resonantjs 1.1.7 β†’ 1.1.8

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/README.md CHANGED
@@ -1,25 +1,25 @@
1
- # ResonantJs πŸš€
1
+ # ResonantJs
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/resonantjs.svg)](https://badge.fury.io/js/resonantjs)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- **ResonantJs** is a lightweight, powerful JavaScript framework that brings **reactive data-binding** to vanilla JavaScript applications. Build dynamic, responsive UIs with minimal code and zero dependencies.
6
+ **ResonantJs** is a lightweight, powerful JavaScript framework that brings reactive data-binding to vanilla JavaScript applications. Build dynamic, responsive UIs with minimal code and zero dependencies.
7
7
 
8
- > **Zero dependencies β€’ ~11.5KB minified β€’ Lightning fast β€’ Easy to learn**
8
+ > **Zero dependencies β€’ ~17KB minified β€’ Lightning fast β€’ Easy to learn**
9
9
 
10
- ## ✨ Why Choose ResonantJs?
10
+ ## Why Choose ResonantJs?
11
11
 
12
- - πŸ”„ **True Reactivity**: Data changes automatically update the DOM - no manual manipulation needed
13
- - 🎯 **Attribute-Based**: Use simple HTML attributes to create powerful data bindings
14
- - πŸ—οΈ **Deep Object Support**: Handles nested objects and arrays with full reactivity
15
- - πŸ’Ύ **Built-in Persistence**: Automatic localStorage integration for data persistence
16
- - 🎨 **Dynamic Styling**: Conditional CSS classes and styles based on your data
17
- - ⚑ **Performance**: Efficient updates with minimal overhead
18
- - πŸ“¦ **Tiny Footprint**: Under 11.5KB minified - perfect for any project size
12
+ - **True Reactivity**: Data changes automatically update the DOM with no manual manipulation required
13
+ - **Attribute-Based**: Simple HTML attributes create powerful data bindings
14
+ - **Deep Object Support**: Full reactivity for nested objects and arrays
15
+ - **Built-in Persistence**: Automatic localStorage integration for data persistence
16
+ - **Dynamic Styling**: Conditional CSS classes and styles based on your data
17
+ - **Performance**: Efficient updates with minimal overhead
18
+ - **Tiny Footprint**: Under 17KB minified, perfect for any project size
19
19
 
20
20
  ---
21
21
 
22
- ## πŸš€ Quick Start
22
+ ## Quick Start
23
23
 
24
24
  ### Installation
25
25
 
@@ -55,13 +55,84 @@ npm install resonantjs
55
55
  </html>
56
56
  ```
57
57
 
58
- That's it! Your counter will automatically update the DOM and persist to localStorage.
58
+ That's it. Your counter automatically updates the DOM and persists to localStorage.
59
59
 
60
60
  ---
61
61
 
62
- ## πŸ“– Core Concepts
62
+ ## Build a Todo App in 5 Minutes
63
+
64
+ Copy and paste the snippet below into an `.html` file and open it in your browser.
65
+
66
+ ```html
67
+ <!doctype html>
68
+ <html>
69
+ <head>
70
+ <meta charset="utf-8" />
71
+ <title>ResonantJs β€’ 5‑min Todo</title>
72
+ <style>
73
+ .completed { text-decoration: line-through; color: #888; }
74
+ </style>
75
+ <script src="https://unpkg.com/resonantjs@latest/resonant.js"></script>
76
+ </head>
77
+ <body>
78
+ <h1>Todos (<span res="tasks.length"></span>)</h1>
79
+
80
+ <input placeholder="Add a task..." res="newTask" />
81
+ <button onclick="addTask()">Add</button>
82
+
83
+ <ul>
84
+ <li res="tasks" res-display="newTask === '' || name.toLowerCase().includes(newTask.toLowerCase())">
85
+ <input type="checkbox" res-prop="completed" />
86
+ <span res-prop="name" res-style="completed ? 'completed' : ''"></span>
87
+ <button res-onclick="removeTask">Remove</button>
88
+ </li>
89
+ </ul>
90
+
91
+ <script>
92
+ const resonant = new Resonant();
93
+ resonant.addAll({
94
+ newTask: '',
95
+ tasks: [
96
+ { name: 'Learn ResonantJs', completed: false },
97
+ { name: 'Ship a feature', completed: true }
98
+ ]
99
+ });
100
+
101
+ function addTask() {
102
+ const title = newTask.trim();
103
+ if (!title) return;
104
+ tasks.unshift({ name: title, completed: false });
105
+ newTask = '';
106
+ }
107
+
108
+ function removeTask(item) {
109
+ const idx = tasks.indexOf(item);
110
+ if (idx !== -1) tasks.delete(idx);
111
+ }
112
+
113
+ // Optional: observe changes
114
+ resonant.addCallback('tasks', (list, item, action) => {
115
+ console.log('[tasks]', action, item);
116
+ });
117
+ </script>
118
+ </body>
119
+ </html>
120
+ ```
121
+
122
+ ### Key Takeaways
123
+
124
+ - Use `res="tasks"` on a template element inside a list container to auto-render each item
125
+ - Use `res-prop` inside that template to bind fields of the current item
126
+ - Use `res-display` for inline filtering/conditional rendering; inside lists, bare props like `completed` refer to the current item
127
+ - `res-style` returns a space-separated class string
128
+ - Event handlers referenced by `res-onclick` are global functions and receive `item` when declared with a parameter
129
+
130
+ ---
131
+
132
+ ## Core Concepts
133
+
134
+ ### Data Binding (`res`)
63
135
 
64
- ### 1. **Data Binding** (`res`)
65
136
  Bind HTML elements directly to your JavaScript variables:
66
137
 
67
138
  ```html
@@ -69,7 +140,8 @@ Bind HTML elements directly to your JavaScript variables:
69
140
  <div res="user.profile.name"></div> <!-- Nested object property -->
70
141
  ```
71
142
 
72
- ### 2. **Object Properties** (`res-prop`)
143
+ ### Object Properties (`res-prop`)
144
+
73
145
  Bind to specific properties within objects:
74
146
 
75
147
  ```html
@@ -79,7 +151,8 @@ Bind to specific properties within objects:
79
151
  </div>
80
152
  ```
81
153
 
82
- ### 3. **Array Rendering**
154
+ ### Array Rendering
155
+
83
156
  Automatically render arrays with template-based elements:
84
157
 
85
158
  ```html
@@ -91,8 +164,9 @@ Automatically render arrays with template-based elements:
91
164
  </ul>
92
165
  ```
93
166
 
94
- ### 4. **Conditional Display** (`res-display`)
95
- Show/hide elements based on conditions:
167
+ ### Conditional Display (`res-display`)
168
+
169
+ Show or hide elements based on conditions:
96
170
 
97
171
  ```html
98
172
  <div res-display="user.isActive">Welcome back!</div>
@@ -100,7 +174,8 @@ Show/hide elements based on conditions:
100
174
  <div res-display="user.role === 'admin'">Admin Panel</div>
101
175
  ```
102
176
 
103
- ### 5. **Dynamic Styling** (`res-style`)
177
+ ### Dynamic Styling (`res-style`)
178
+
104
179
  Apply conditional CSS classes and styles:
105
180
 
106
181
  ```html
@@ -108,7 +183,8 @@ Apply conditional CSS classes and styles:
108
183
  <span res-style="'priority-' + task.priority">High Priority</span>
109
184
  ```
110
185
 
111
- ### 6. **Event Handling** (`res-onclick`)
186
+ ### Event Handling (`res-onclick`)
187
+
112
188
  Bind click events with context:
113
189
 
114
190
  ```html
@@ -116,7 +192,8 @@ Bind click events with context:
116
192
  <button res-onclick-remove="true">Delete Item</button>
117
193
  ```
118
194
 
119
- ### 7. **Computed Properties**
195
+ ### Computed Properties
196
+
120
197
  Create reactive derived values that automatically update:
121
198
 
122
199
  ```javascript
@@ -134,7 +211,8 @@ resonant.computed('fullName', () => {
134
211
  <span res="fullName"></span> <!-- Automatically shows "John Doe" -->
135
212
  ```
136
213
 
137
- ### 8. **Input Binding**
214
+ ### Input Binding
215
+
138
216
  Two-way data binding for form elements:
139
217
 
140
218
  ```html
@@ -148,9 +226,62 @@ Two-way data binding for form elements:
148
226
 
149
227
  ---
150
228
 
151
- ## 🎯 Key Features
229
+ ## Best Practices and Tips
230
+
231
+ - **Name your state clearly**: Variables you `add` become globals on `window` (e.g., `tasks`, `user`). Avoid collisions with existing globals.
232
+ - **List templates**: In `res="items"` templates, you can reference current item fields directly (`completed`, `name`) or as `item.completed` β€” both work.
233
+ - **Array updates**: Prefer `items.set(i, value)` over direct index assignment for clarity; both are reactive.
234
+ - **Batch updates**: When replacing a whole list, use `items.update(newArray)` to emit a single coherent update.
235
+ - **Object binding**: Use `res-prop=""` to bind an entire object to a single element when you just want to print it.
236
+ - **Event handlers**: `res-onclick` handlers are looked up on `window`. If your handler accepts an argument, Resonant passes the current `item`.
237
+ - **Quick removal**: For quick removal buttons, use `res-onclick-remove="idProp"` to delete by a unique key on each item.
238
+ - **Computed properties**: Track dependencies automatically. Use plain variable names inside the function (e.g., `firstName`, `lastName`). They are read-only.
239
+ - **Conditional expressions**: Keep display and style expressions simple and fast.
240
+
241
+ ### Performance Notes
242
+
243
+ - Resonant selectively re-renders only changed array items by tracking indices and stable object keys
244
+ - Deeply nested objects and arrays are proxied; nested edits still update only affected DOM segments
245
+
246
+ ---
247
+
248
+ ## API & Attribute Reference
249
+
250
+ ### HTML Attributes
251
+
252
+ - `res` β€” bind a variable or array/template root
253
+ - `res-prop` β€” bind an object property within a `res` context; empty value binds the whole item
254
+ - `res-display` β€” boolean expression to show/hide element
255
+ - `res-style` β€” expression returning a space-separated class string
256
+ - `res-onclick` β€” call a global function; if it declares a parameter, it receives the current item
257
+ - `res-onclick-remove` β€” remove from the parent array by matching the given property (e.g., `id`)
258
+
259
+ ### JavaScript API
260
+
261
+ - `const resonant = new Resonant()`
262
+ - `resonant.add(name, value, persist?)`
263
+ - `resonant.addAll(objectMap)`
264
+ - `resonant.addCallback(name, (newValue, item, action) => void)`
265
+ - `resonant.computed(name, () => value)`
266
+
267
+ ### Array Helpers
268
+
269
+ Reactive arrays include these methods:
270
+
271
+ - `.push`, `.pop`, `.shift`, `.unshift`, `.splice`, `.sort`, `.reverse`
272
+ - `.set(index, value)`, `.delete(index)`, `.update(array)`, `.filter(fn)`, `.filterInPlace(fn)`, `.forceUpdate()`
273
+
274
+ ### Callback Actions
275
+
276
+ - Scalars: `modified`
277
+ - Arrays: `added`, `removed`, `modified`, `updated`, `filtered`
278
+
279
+ ---
280
+
281
+ ## Key Features
282
+
283
+ ### Reactive Data Management
152
284
 
153
- ### **Reactive Data Management**
154
285
  ```javascript
155
286
  const resonant = new Resonant();
156
287
 
@@ -166,11 +297,12 @@ resonant.addAll({
166
297
  });
167
298
 
168
299
  // Changes automatically update the UI
169
- user.name = 'Jane'; // DOM updates instantly
300
+ user.name = 'Jane'; // DOM updates instantly
170
301
  tasks.push({ title: 'New task' }); // Array renders new item
171
302
  ```
172
303
 
173
- ### **Event Callbacks**
304
+ ### Callback System
305
+
174
306
  React to data changes with custom logic:
175
307
 
176
308
  ```javascript
@@ -187,7 +319,8 @@ resonant.addCallback('user', (newValue, item, action) => {
187
319
  });
188
320
  ```
189
321
 
190
- ### **Persistence**
322
+ ### LocalStorage Persistence
323
+
191
324
  Automatic localStorage integration:
192
325
 
193
326
  ```javascript
@@ -199,7 +332,8 @@ resonant.add('appState', { currentView: 'dashboard' }, true);
199
332
  userPreferences.theme = 'light'; // Saved to localStorage
200
333
  ```
201
334
 
202
- ### **Computed Properties**
335
+ ### Computed Properties
336
+
203
337
  Reactive derived values that automatically recalculate:
204
338
 
205
339
  ```javascript
@@ -220,23 +354,28 @@ resonant.computed('greeting', () => {
220
354
  });
221
355
  ```
222
356
 
223
- ### **Advanced Array Operations**
357
+ ### Array Operations
358
+
224
359
  Full array reactivity with custom methods:
225
360
 
226
361
  ```javascript
227
362
  // All operations trigger UI updates
228
- items.push(newItem); // Add item
229
- items.splice(index, 1); // Remove item
230
- items.update([...newItems]); // Replace entire array
231
- items.set(index, newValue); // Update specific index
232
- items.delete(index); // Delete by index
363
+ items.push(newItem); // Add item
364
+ items.splice(index, 1); // Remove item
365
+ items.update([...newItems]); // Replace entire array
366
+ items.set(index, newValue); // Update specific index
367
+ items.delete(index); // Delete by index
368
+ items.filter(v => v > 0); // Non-mutating; still triggers a 'filtered' callback
369
+ items.filterInPlace(fn); // Mutating filter + rerender
370
+ items.forceUpdate(); // Force a rerender without changing contents
233
371
  ```
234
372
 
235
373
  ---
236
374
 
237
- ## πŸ—οΈ Real-World Examples
375
+ ## Real-World Examples
238
376
 
239
377
  ### Todo List with Filtering
378
+
240
379
  ```html
241
380
  <div>
242
381
  <input res="newTask" placeholder="Add task..." />
@@ -296,6 +435,7 @@ updateFilter();
296
435
  ```
297
436
 
298
437
  ### Dashboard with Statistics
438
+
299
439
  ```html
300
440
  <div class="dashboard">
301
441
  <div class="stats">
@@ -334,9 +474,10 @@ updateFilter();
334
474
 
335
475
  ---
336
476
 
337
- ## πŸ“š Advanced Patterns
477
+ ## Advanced Patterns
478
+
479
+ ### Nested Data Structures
338
480
 
339
- ### **Nested Data Structures**
340
481
  Handle complex, deeply nested data:
341
482
 
342
483
  ```javascript
@@ -362,7 +503,8 @@ company.departments[0].teams[0].members[0].name = 'Alice Johnson';
362
503
  company.departments[0].teams[0].members.push(newMember);
363
504
  ```
364
505
 
365
- ### **Computed Properties**
506
+ ### Computed Properties
507
+
366
508
  Create reactive calculated values that automatically update when dependencies change:
367
509
 
368
510
  ```javascript
@@ -413,7 +555,8 @@ resonant.computed('total', () => {
413
555
  <div>Total: $<span res="total"></span></div>
414
556
  ```
415
557
 
416
- ### **Component-Like Patterns**
558
+ ### Component-Like Patterns
559
+
417
560
  Organize code into reusable patterns:
418
561
 
419
562
  ```javascript
@@ -438,41 +581,44 @@ function createTaskManager(containerId) {
438
581
 
439
582
  ---
440
583
 
441
- ## 🎨 Examples & Demos
584
+ ## Examples & Demos
442
585
 
443
586
  Explore our comprehensive examples:
444
587
 
445
588
  - **[Basic Counter](./examples/example-basic.html)** - Simple reactive counter
446
589
  - **[Task Manager](./examples/example-taskmanager.html)** - Complete task management app
447
590
  - **[Houses Demo](./examples/example-houses.html)** - Complex nested data structures
448
- - **[Advanced Demo](./examples/example-taskmanager-simple-demo.html)** - Full-featured application
591
+ - **[Tests Showcase](./examples/tests.html)** - Interactive testbed used in CI
449
592
 
450
593
  Each example demonstrates different aspects of ResonantJs and can serve as starting points for your projects.
451
594
 
452
595
  ---
453
596
 
454
- ## πŸš€ Performance & Browser Support
597
+ ## Performance & Browser Support
598
+
599
+ ### Performance
455
600
 
456
- ### **Performance**
457
601
  - **Minimal overhead**: Only updates affected DOM elements
458
602
  - **Efficient diffing**: Smart change detection for nested objects
459
603
  - **Lazy evaluation**: Conditional expressions only run when dependencies change
460
604
  - **Memory efficient**: Automatic cleanup of unused observers
461
605
 
462
- ### **Browser Support**
463
- - βœ… Chrome 60+
464
- - βœ… Firefox 55+
465
- - βœ… Safari 12+
466
- - βœ… Edge 79+
467
- - βœ… Mobile browsers (iOS Safari, Chrome Mobile)
606
+ ### Browser Support
607
+
608
+ - Chrome 60+
609
+ - Firefox 55+
610
+ - Safari 12+
611
+ - Edge 79+
612
+ - Mobile browsers (iOS Safari, Chrome Mobile)
468
613
 
469
614
  ---
470
615
 
471
- ## 🀝 Contributing
616
+ ## Contributing
472
617
 
473
618
  We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
474
619
 
475
620
  ### Development Setup
621
+
476
622
  ```bash
477
623
  git clone https://github.com/amurgola/ResonantJs.git
478
624
  cd ResonantJs
@@ -481,20 +627,21 @@ npm test
481
627
  ```
482
628
 
483
629
  ### Running Tests
630
+
484
631
  ```bash
485
- npm test # Run all tests
486
- npm test -- test/specific.test.js # Run specific test file
632
+ npm test # Run all tests
633
+ npm test -- test/specific.test.js # Run specific test file
487
634
  ```
488
635
 
489
636
  ---
490
637
 
491
- ## πŸ“„ License
638
+ ## License
492
639
 
493
640
  ResonantJs is released under the **MIT License**. See [LICENSE](LICENSE) file for details.
494
641
 
495
642
  ---
496
643
 
497
- ## πŸ™‹β€β™‚οΈ Support & Community
644
+ ## Support & Community
498
645
 
499
646
  - **Issues**: [GitHub Issues](https://github.com/amurgola/ResonantJs/issues)
500
647
  - **Discussions**: [GitHub Discussions](https://github.com/amurgola/ResonantJs/discussions)
@@ -504,8 +651,8 @@ ResonantJs is released under the **MIT License**. See [LICENSE](LICENSE) file fo
504
651
 
505
652
  <div align="center">
506
653
 
507
- **[⭐ Star us on GitHub](https://github.com/amurgola/ResonantJs)** β€’ **[πŸš€ Try the Demo](./examples/example-taskmanager-simple-demo.html)** β€’ **[πŸ“– Read the Docs](https://github.com/amurgola/ResonantJs/wiki)**
654
+ **[Star us on GitHub](https://github.com/amurgola/ResonantJs)** β€’ **[Try the Demo](./examples/example-taskmanager-simple-demo.html)** β€’ **[Read the Docs](https://github.com/amurgola/ResonantJs/wiki)**
508
655
 
509
- *Built with ❀️ by [Andrew Paul Murgola](https://github.com/amurgola)*
656
+ *Built with care by [Andrew Paul Murgola](https://github.com/amurgola)*
510
657
 
511
658
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "resonantjs",
3
- "version": "1.1.7",
3
+ "version": "1.1.8",
4
4
  "description": "A lightweight JavaScript framework that enables reactive data-binding for building dynamic and responsive web applications. It simplifies creating interactive UIs by automatically updating the DOM when your data changes.",
5
5
  "main": "resonant.js",
6
6
  "repository": {
package/resonant.js CHANGED
@@ -406,6 +406,27 @@
406
406
 
407
407
  add(variableName, value, persist) {
408
408
  value = this.persist(variableName, value, persist);
409
+
410
+ //Check if Value is a fetch promise, and resolve as toJson before adding
411
+ if (value.constructor.name === 'Response') {
412
+ value.json().then(resolvedValue => {
413
+ this.add(variableName, resolvedValue, persist);
414
+ }).catch(err => {
415
+ console.error(`Resonant: Error resolving fetch response for variable "${variableName}":`, err);
416
+ });
417
+ return;
418
+ }
419
+
420
+ // Check if Value is promise, and resolve before adding
421
+ if (value instanceof Promise) {
422
+ value.then(resolvedValue => {
423
+ this.add(variableName, resolvedValue, persist);
424
+ }).catch(err => {
425
+ console.error(`Resonant: Error resolving promise for variable "${variableName}":`, err);
426
+ });
427
+ return;
428
+ }
429
+
409
430
  if (Array.isArray(value)) {
410
431
  this.data[variableName] = new ObservableArray(variableName, this, ...value);
411
432
  this.arrayDataChangeDetection[variableName] = Array.prototype.slice.call(this.data[variableName]);
@@ -820,12 +841,16 @@
820
841
  template = window[tplKey];
821
842
  }
822
843
 
844
+ // Build a map of existing elements by their key
823
845
  const existingElements = new Map();
824
- container.querySelectorAll(`[res="${variablePath}"][res-rendered="true"]`).forEach(element => {
846
+ const existingElementsList = Array.from(container.querySelectorAll(`[res="${variablePath}"][res-rendered="true"]`));
847
+ existingElementsList.forEach(element => {
825
848
  const key = element.getAttribute('res-key');
826
849
  if (key) existingElements.set(key, element);
827
850
  });
828
- container.querySelectorAll(`[res="${variablePath}"][res-rendered="true"]`).forEach(elm => elm.remove());
851
+
852
+ const changedSet = this._changedArrayIndices[variablePath] || this._changedArrayIndices[this._getRootAndPath(variablePath).root];
853
+ const usedElements = new Set();
829
854
 
830
855
  arrayValue.forEach((instance, index) => {
831
856
  let elementKey = null;
@@ -833,11 +858,10 @@
833
858
  if (!elementKey) elementKey = String(index);
834
859
 
835
860
  let elementToUse;
836
- const changedSet = this._changedArrayIndices[variablePath] || this._changedArrayIndices[this._getRootAndPath(variablePath).root];
837
- const shouldReuse = existingElements.has(elementKey) && !(changedSet && changedSet.has(index));
861
+ let shouldReuse = existingElements.has(elementKey) && !(changedSet && changedSet.has(index));
838
862
  if (shouldReuse) {
839
863
  elementToUse = existingElements.get(elementKey);
840
- existingElements.delete(elementKey);
864
+ usedElements.add(elementToUse);
841
865
  elementToUse.setAttribute("res-index", index);
842
866
  } else {
843
867
  elementToUse = template.cloneNode(true);
@@ -849,39 +873,57 @@
849
873
  }
850
874
  elementToUse.setAttribute("res-index", index);
851
875
 
852
- if (!isObject(instance)) {
853
- const anyPlace = elementToUse.querySelector('[res-prop=""]');
854
- if (anyPlace) {
855
- anyPlace.innerHTML = String(instance);
876
+ // Only render primitive content for new elements, not reused ones
877
+ // But always update nested arrays/objects as they may have changed
878
+ if (!shouldReuse) {
879
+ if (!isObject(instance)) {
880
+ const anyPlace = elementToUse.querySelector('[res-prop=""]');
881
+ if (anyPlace) {
882
+ anyPlace.innerHTML = String(instance);
883
+ } else {
884
+ elementToUse.innerHTML = String(instance);
885
+ }
856
886
  } else {
857
- elementToUse.innerHTML = String(instance);
887
+ const keys = Object.keys(instance);
888
+ keys.forEach(key => {
889
+ let overrideInstanceValue = null;
890
+ let subEl = elementToUse.querySelector(`[res-prop="${key}"]`);
891
+ if (!subEl) {
892
+ subEl = elementToUse.querySelector('[res-prop=""]');
893
+ overrideInstanceValue = instance;
894
+ }
895
+ if (subEl) {
896
+ const value = this._resolveValue(instance, key, overrideInstanceValue);
897
+ const tag = subEl.tagName;
898
+ if ((tag === 'INPUT' || tag === 'TEXTAREA') &&
899
+ !Array.isArray(value) &&
900
+ !isObject(value)) {
901
+ const prev = value;
902
+ this._handleInputElement(
903
+ subEl,
904
+ value,
905
+ (newValue) => {
906
+ instance[key] = newValue;
907
+ this._queueUpdate(this._getRootAndPath(variablePath).root, 'modified', instance, key, prev, index, `${index}.${key}`);
908
+ }
909
+ );
910
+ }
911
+ else if (!Array.isArray(value) && !isObject(value)) {
912
+ subEl.innerHTML = value ?? '';
913
+ }
914
+ }
915
+ });
858
916
  }
859
- } else {
917
+ }
918
+
919
+ // Always update nested arrays and objects (even for reused elements)
920
+ if (isObject(instance)) {
860
921
  const keys = Object.keys(instance);
861
922
  keys.forEach(key => {
862
- let overrideInstanceValue = null;
863
923
  let subEl = elementToUse.querySelector(`[res-prop="${key}"]`);
864
- if (!subEl) {
865
- subEl = elementToUse.querySelector('[res-prop=""]');
866
- overrideInstanceValue = instance;
867
- }
868
924
  if (subEl) {
869
- const value = this._resolveValue(instance, key, overrideInstanceValue);
870
- const tag = subEl.tagName;
871
- if ((tag === 'INPUT' || tag === 'TEXTAREA') &&
872
- !Array.isArray(value) &&
873
- !isObject(value)) {
874
- const prev = value;
875
- this._handleInputElement(
876
- subEl,
877
- value,
878
- (newValue) => {
879
- instance[key] = newValue;
880
- this._queueUpdate(this._getRootAndPath(variablePath).root, 'modified', instance, key, prev, index, `${index}.${key}`);
881
- }
882
- );
883
- }
884
- else if (Array.isArray(value)) {
925
+ const value = this._resolveValue(instance, key, null);
926
+ if (Array.isArray(value)) {
885
927
  let parentKey = null;
886
928
  try { parentKey = arrayValue[index]?.key; } catch (_) {}
887
929
  this._renderNestedArray(subEl, value, parentKey, variablePath);
@@ -895,9 +937,6 @@
895
937
  }
896
938
  });
897
939
  }
898
- else {
899
- subEl.innerHTML = value ?? '';
900
- }
901
940
  }
902
941
  });
903
942
  }
@@ -905,8 +944,16 @@
905
944
  this._handleDisplayElements(elementToUse, instance, variablePath);
906
945
  this._bindClickEvents(elementToUse, instance, arrayValue);
907
946
 
947
+ // Always append to ensure correct order (appendChild moves existing elements)
908
948
  container.appendChild(elementToUse);
909
949
  });
950
+
951
+ // Remove elements that weren't reused
952
+ existingElementsList.forEach(element => {
953
+ if (!usedElements.has(element)) {
954
+ element.remove();
955
+ }
956
+ });
910
957
  }
911
958
 
912
959
  _renderNestedArray(subEl, arrayValue, parentKey, parentVarPath) {
package/resonant.min.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{function e(e){return null!==e&&"object"==typeof e}function t(e){if("number"==typeof e)return!0;if("string"!=typeof e)return!1;const t=Number(e);return Number.isInteger(t)&&String(t)===e}const r=Symbol("resonantProxy"),s=new WeakMap;class n{constructor(e,t,...r){const s=Array.from(r);return n._createArrayProxy(s,e,t,"")}static _ensureKey(t,r){if(e(t)){if(!s.has(t)){const e=""+r._nextKeyId++;s.set(t,e)}if(!Object.prototype.hasOwnProperty.call(t,"key"))try{Object.defineProperty(t,"key",{get:()=>s.get(t),enumerable:!1,configurable:!1})}catch(e){}}}static _ensureKeysRecursive(t,r){return e(t)?Array.isArray(t)?(t.forEach(e=>n._ensureKeysRecursive(e,r)),t):(n._ensureKey(t,r),Object.keys(t).forEach(e=>{n._ensureKeysRecursive(t[e],r)}),t):t}static _wrapAny(t,s,i,o){return e(t)?t[r]?t:Array.isArray(t)?n._createArrayProxy(t.slice(),s,i,o):i._createObject(s,t,o):t}static _createArrayProxy(s,i,o,a){try{Object.defineProperty(s,r,{value:!0,enumerable:!1})}catch(e){}for(let t=0;t<s.length;t++){const r=s[t];e(r)&&n._ensureKeysRecursive(r,o),s[t]=n._wrapAny(r,i,o,a?`${a}.${t}`:`${t}`)}const l=!(!a||!String(a).length),c=(e,t)=>{const r=l?"modified":"added";o._queueUpdate(i,r,e,null,void 0,t,a)},u=(e,t)=>{const r=l?"modified":"removed";o._queueUpdate(i,r,e,null,void 0,t,a)},d=(e,t,r,s=null)=>{o._queueUpdate(i,"modified",e,s,r,t,a)},p=(e=null)=>{const t=l?"modified":"updated",r=null!==e?e:s;o._queueUpdate(i,t,r,null,void 0,null,a)};return new Proxy(s,{get(e,s,l){if(s===r)return!0;if("length"===s)return Reflect.get(e,s,l);if("set"===s)return(t,r)=>{const s=Number(t),l=e[s],c=n._wrapAny(r,i,o,a?`${a}.${s}`:`${s}`);return n._ensureKeysRecursive(c,o),e[s]=c,d(e[s],s,l),!0};if("delete"===s)return t=>{const r=Number(t);if(!Object.prototype.hasOwnProperty.call(e,r))return!0;const s=e[r];return Array.prototype.splice.call(e,r,1),u(s,r),!0};if("update"===s)return t=>{const r=Array.isArray(t)?t:[];for(let t=e.length-1;t>=0;t--){const r=e[t];e.splice(t,1),u(r,t)}const s=r.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${t}`:`${t}`);return n._ensureKeysRecursive(r,o),r});Array.prototype.push.apply(e,s),s.forEach((e,t)=>c(e,t)),p(t)};if("filterInPlace"===s)return t=>{const r=e.filter(t);for(let t=e.length-1;t>=0;t--){const r=e[t];e.splice(t,1),u(r,t)}const s=r.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${t}`:`${t}`);return n._ensureKeysRecursive(r,o),r});return Array.prototype.push.apply(e,s),s.forEach((e,t)=>c(e,t)),p(),r};if("forceUpdate"===s)return()=>{n._ensureKeysRecursive(e,o),p()};const h={push:(...t)=>{const r=e.length,s=t.map((e,t)=>{const s=n._wrapAny(e,i,o,a?`${a}.${r+t}`:`${r+t}`);return n._ensureKeysRecursive(s,o),s}),l=Array.prototype.push.apply(e,s);return s.forEach((e,t)=>c(e,r+t)),l},pop:()=>{if(!e.length)return;const t=e.length-1,r=Array.prototype.pop.call(e);return u(r,t),r},unshift:(...t)=>{const r=t.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${t}`:`${t}`);return n._ensureKeysRecursive(r,o),r}),s=Array.prototype.unshift.apply(e,r);return r.forEach((e,t)=>c(e,t)),s},shift:()=>{if(!e.length)return;const t=Array.prototype.shift.call(e);return u(t,0),t},splice:(t,r,...s)=>{const l=Number(t)||0,d=void 0===r?e.length-l:Number(r),p=e.slice(l,l+d),h=s.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${l+t}`:`${l+t}`);return n._ensureKeysRecursive(r,o),r}),y=Array.prototype.splice.call(e,l,d,...h);return p.forEach((e,t)=>u(e,l+t)),h.forEach((e,t)=>c(e,l+t)),y},sort:t=>(Array.prototype.sort.call(e,t),l),reverse:()=>(Array.prototype.reverse.call(e),l),filter:(t,r=!0)=>{const s=Array.prototype.filter.call(e,t);return r&&o._queueUpdate(i,"filtered",void 0,null,void 0,null,a),s}};if(s in h)return h[s];if("symbol"==typeof s&&s===Symbol.iterator)return e[Symbol.iterator].bind(e);if(t(s))return Reflect.get(e,s,l);const y=Reflect.get(e,s,l);return"function"==typeof y?y.bind(e):y},set(e,r,s,l){if("length"===r){const t=Number(s);if(!Number.isInteger(t)||t<0)return!1;if(t<e.length){const n=e.slice(t);return Reflect.set(e,r,s,l),n.forEach((e,r)=>u(e,t+r)),!0}return Reflect.set(e,r,s,l)}if(t(r)){const t=Number(r),c=e[t],u=n._wrapAny(s,i,o,a?`${a}.${t}`:`${t}`);n._ensureKeysRecursive(u,o);const p=Reflect.set(e,r,u,l);return d(e[t],t,c),p}return Reflect.set(e,r,s,l)},deleteProperty(e,r){if(t(r)&&Object.prototype.hasOwnProperty.call(e,r)){const t=Number(r),s=e[t],n=Reflect.deleteProperty(e,r);return u(s,t),n}return Reflect.deleteProperty(e,r)}})}}window.Resonant=class{constructor(){this.data={},this.callbacks={},this.pendingUpdates=new Map,this.arrayDataChangeDetection={},this.computedProperties={},this.computedDependencies={},this._currentComputed=null,this._nextKeyId=1,this._changedArrayIndices={}}_splitPath(e){return"string"!=typeof e?[]:e.split(".").filter(Boolean)}_getRootAndPath(e){const t=this._splitPath(e);return{root:t.shift()||e,path:t.join(".")}}_getByPath(t){const{root:r,path:s}=this._getRootAndPath(t);let n=this.data[r];if(!s)return n;const i=this._splitPath(s);for(const t of i){if(!e(n))return;n=n[t]}return n}_setByPath(t,r){const{root:s,path:n}=this._getRootAndPath(t);if(!n)return void(window[s]=r);let i=this.data[s];const o=this._splitPath(n);for(let t=0;t<o.length-1;t++){const r=o[t];e(i[r])||(i[r]={}),i=i[r]}i[o[o.length-1]]=r}_handleInputElement(e,t,r){const s=(e.type||"").toLowerCase();if("checkbox"===s){const s=!!t;e.checked!==s&&(e.checked=s),e.hasAttribute("data-resonant-bound")||(e.onchange=()=>r(!!e.checked),e.setAttribute("data-resonant-bound","true"))}else if("number"===s||"range"===s){const s=t??"";e.value!==String(s)&&(e.value=s),e.hasAttribute("data-resonant-bound")||(e.oninput=()=>{const t=e.value,s=""===t?null:Number(t);r(Number.isNaN(s)?null:s)},e.setAttribute("data-resonant-bound","true"))}else{const s=t??"";e.value!==String(s)&&(e.value=s),e.hasAttribute("data-resonant-bound")||(e.oninput=()=>r(e.value),e.setAttribute("data-resonant-bound","true"))}}persist(e,t,r){if(!r)return t;try{const r=localStorage.getItem("res_"+e);return null!=r?JSON.parse(r):(localStorage.setItem("res_"+e,JSON.stringify(t)),t)}catch(r){return console.warn("Resonant: persistence error for",e,r),t}}updatePersistantData(e){try{localStorage.getItem("res_"+e)&&localStorage.setItem("res_"+e,JSON.stringify(this.data[e]))}catch(t){console.warn("Resonant: persistence update error for",e,t)}}add(t,r,s){r=this.persist(t,r,s),Array.isArray(r)?(this.data[t]=new n(t,this,...r),this.arrayDataChangeDetection[t]=Array.prototype.slice.call(this.data[t])):e(r)?this.data[t]=this._createObject(t,r,""):this.data[t]=r,this._defineProperty(t),this.updateElement(t)}addAll(e){Object.entries(e).forEach(([e,t])=>{this.add(e,t)})}computed(e,t){this.computedProperties[e]=t,this.computedDependencies[e]=new Set,this.computedDependencies[e].clear(),this._currentComputed=e;try{const r=t();this.data[e]=r,this._defineProperty(e),this.updateElement(e)}finally{this._currentComputed=null}}_captureAccess(e){this._currentComputed&&this.computedDependencies[this._currentComputed].add(e)}_recomputeProperty(e){if(!this.computedProperties[e])return;const t=this.computedProperties[e],r=this.data[e];this.computedDependencies[e].clear(),this._currentComputed=e;try{const s=t();r!==s&&(this.data[e]=s,this.updateElement(e),this._queueUpdate(e,"modified",s,null,r))}finally{this._currentComputed=null}}_resolveValue(e,t,r=null){return r??e[t]}_createObject(t,s,i=""){const o=this,a=(s,i)=>{if(!e(s))return s;if(s[r])return s;if(Array.isArray(s))return n._createArrayProxy(s.slice(),t,o,i);n._ensureKeysRecursive(s,o);const l={get(s,l,c){if(l===r)return!0;if(o._currentComputed&&"symbol"!=typeof l){const e=i?`${t}.${i}.${String(l)}`:`${t}.${String(l)}`;o._captureAccess(t),o._captureAccess(e)}const u=Reflect.get(s,l,c);if(e(u)){const e=i?`${i}.${String(l)}`:String(l);let c;return u[r]?u:(c=Array.isArray(u)?n._createArrayProxy(u,t,o,e):a(u,e),s[l]=c,c)}return u},set(e,r,s,l){const c=e[r];if(c===s)return!0;const u=i?`${i}.${String(r)}`:String(r),d=a(s,u);n._ensureKeysRecursive(d,o);const p=Reflect.set(e,r,d,l);return o._queueUpdate(t,"modified",e,String(r),c,null,u),p},deleteProperty(e,r){const s=e[r],n=Reflect.deleteProperty(e,r);return n&&o._queueUpdate(t,"removed",null,String(r),s,null,i?`${i}.${String(r)}`:String(r)),n}};try{Object.defineProperty(s,r,{value:!0,enumerable:!1})}catch(e){}return new Proxy(s,l)};return a(s,i)}_evaluateDisplayCondition(t,r,s,n){try{let i=s||"",o=!1;if(n){const{root:t}=this._getRootAndPath(n);if(r&&e(r)){const e=new RegExp(`\\b${t}\\b`,"g");i=i.replace(e,"item");(i.match(/\b[a-zA-Z_][a-zA-Z0-9_]*\b/g)||[]).forEach(e=>{if("item"!==e&&"true"!==e&&"false"!==e&&"null"!==e&&"undefined"!==e&&Object.prototype.hasOwnProperty.call(r,e)){const t=new RegExp(`\\b${e}\\b`,"g");i=i.replace(t,`item.${e}`)}})}}try{o=!!new Function("item","state",`return (${i});`)(r,this.data)}catch(e){o=!!new Function(`return (${s});`)()}t.style.display=o?"inherit":"none"}catch(e){console.error(`Error evaluating display condition: ${s}`,e)}}_handleDisplayElements(e,t,r){e.querySelectorAll("[res-display]").forEach(e=>{const s=e.getAttribute("res-display")||"";this._evaluateDisplayCondition(e,t,s,r)})}_bindClickEvents(t,r,s){t.querySelectorAll("[res-onclick], [res-onclick-remove]").forEach(t=>{const n=t.getAttribute("res-onclick"),i=t.getAttribute("res-onclick-remove");n&&(t.onclick=()=>{const e=window&&window[n]||null;if("function"==typeof e)try{e.length>0?e(r):e()}catch(e){console.error("Resonant: onclick handler error for",n,e)}else console.warn("Resonant: onclick handler not found:",n)}),i&&(t.onclick=()=>{if(s&&Array.isArray(s)){const t=s.findIndex(t=>e(t)&&t[i]===r[i]);-1!==t&&s.splice(t,1)}})})}_defineProperty(t){Object.defineProperty(window,t,{configurable:!0,get:()=>(this._captureAccess(t),this.data[t]),set:r=>{this.computedProperties[t]?console.warn(`Cannot set computed property "${t}"`):(Array.isArray(r)?(this.data[t]=new n(t,this,...r),this.arrayDataChangeDetection[t]=Array.prototype.slice.call(this.data[t])):e(r)?this.data[t]=this._createObject(t,r,""):this.data[t]=r,this.updateElement(t),this.updateDisplayConditionalsFor(t),this.updateStylesFor(t),Array.isArray(r)||e(r)||this._queueUpdate(t,"modified",this.data[t]))}})}_queueUpdate(e,t,r,s=null,n,i=null,o=null){if(this.pendingUpdates.has(e)||this.pendingUpdates.set(e,[]),this.pendingUpdates.get(e).push({action:t,item:r,property:s,oldValue:n,index:i,path:o}),this._changedArrayIndices[e]||(this._changedArrayIndices[e]=new Set),"number"==typeof i&&i>=0)this._changedArrayIndices[e].add(i);else if("string"==typeof o){const t=o.match(/^(\d+)(\.|$)/);t&&this._changedArrayIndices[e].add(Number(t[1]))}1===this.pendingUpdates.get(e).length&&setTimeout(()=>{let t=this.pendingUpdates.get(e)||[];this.updatePersistantData(e),this.pendingUpdates.delete(e);const r=new Map;t.forEach(e=>r.set((e=>`${e.action}|${e.property??""}|${e.index??""}|${e.path??""}`)(e),e)),t=Array.from(r.values()),t.forEach(t=>{this._triggerCallbacks(e,t)});const s=new Set;t.forEach(t=>{s.add(e),t.path&&s.add(`${e}.${t.path}`)}),Object.keys(this.computedDependencies).forEach(t=>{const r=this.computedDependencies[t];for(const n of s)if(r.has(n)||r.has(e)){this._recomputeProperty(t);break}}),this.updateElement(e),this.updateDisplayConditionalsFor(e),this.updateStylesFor(e),this._changedArrayIndices[e]&&delete this._changedArrayIndices[e]},0)}_triggerCallbacks(e,t){this.callbacks[e]&&this.callbacks[e].forEach(r=>{const s=t.item||t.oldValue;try{r("undefined"!=typeof window&&void 0!==window[e]?window[e]:this.data[e],s,t.action)}catch(t){console.error("Resonant: callback error for",e,t)}})}updateElement(t){const{root:r}=this._getRootAndPath(t);document.querySelectorAll(`[res="${r}"], [res^="${r}."]`).forEach(t=>{const r=t.getAttribute("res"),s=this._getByPath(r);if("INPUT"===t.tagName||"TEXTAREA"===t.tagName)this._handleInputElement(t,s,e=>{this._setByPath(r,e);const{root:t,path:s}=this._getRootAndPath(r);this._queueUpdate(t,"modified",this._getByPath(r),s?s.split(".").pop():null,null,null,s||null)});else if(Array.isArray(s)){if("true"===t.getAttribute("res-rendered"))return;t.querySelectorAll(`[res="${r}"][res-rendered="true"]`).forEach(e=>e.remove()),this._renderArray(r,t)}else if(e(s)){t.querySelectorAll("[res-prop]").forEach(e=>{const t=e.getAttribute("res-prop");t&&t in s&&this._renderObjectProperty(e,s[t],r,t)})}else t.innerHTML=s??""}),this.updateDisplayConditionalsFor(t),this.updateStylesFor(t)}_renderObjectProperty(t,r,s,n){const i=t.tagName;if("INPUT"!==i&&"TEXTAREA"!==i||Array.isArray(r)||e(r))if(Array.isArray(r)){let n=null;const i=this._getByPath(s);if(i&&e(i))try{n=i.key}catch(e){}else{const e=t.getAttribute("res-child");e&&e.includes("--")&&(n=e.split("--")[1])}this._renderNestedArray(t,r,n,s)}else if(e(r)){t.querySelectorAll("[res-prop]").forEach(e=>{const t=e.getAttribute("res-prop");t&&t in r&&this._renderObjectProperty(e,r[t],s,t)})}else t.innerHTML=r??"";else{const e=`${s}.${n}`;this._handleInputElement(t,r,t=>{this._setByPath(e,t)})}}_renderArray(t,r){const s=this._getByPath(t),n=r.hasAttribute("res")&&r.parentElement?r.parentElement:r;let i;const o=t+"_template";window[o]?i=window[o]:(i=r.cloneNode(!0),window[o]=i,r.style.display="none",r.setAttribute("res-template","true"));const a=new Map;n.querySelectorAll(`[res="${t}"][res-rendered="true"]`).forEach(e=>{const t=e.getAttribute("res-key");t&&a.set(t,e)}),n.querySelectorAll(`[res="${t}"][res-rendered="true"]`).forEach(e=>e.remove()),s.forEach((r,o)=>{let l,c=null;try{c=r&&r.key}catch(e){}c||(c=String(o));const u=this._changedArrayIndices[t]||this._changedArrayIndices[this._getRootAndPath(t).root];if(a.has(c)&&!(u&&u.has(o))?(l=a.get(c),a.delete(c),l.setAttribute("res-index",o)):(l=i.cloneNode(!0),l.removeAttribute("res-template"),l.style.display="",l.setAttribute("res-rendered","true"),l.setAttribute("res-key",c),l.setAttribute("res",t)),l.setAttribute("res-index",o),e(r)){Object.keys(r).forEach(n=>{let i=null,a=l.querySelector(`[res-prop="${n}"]`);if(a||(a=l.querySelector('[res-prop=""]'),i=r),a){const l=this._resolveValue(r,n,i),c=a.tagName;if("INPUT"!==c&&"TEXTAREA"!==c||Array.isArray(l)||e(l))if(Array.isArray(l)){let e=null;try{e=s[o]?.key}catch(e){}this._renderNestedArray(a,l,e,t)}else if(e(l)){a.querySelectorAll("[res-prop]").forEach(e=>{const r=e.getAttribute("res-prop");r&&r in l&&this._renderObjectProperty(e,l[r],t,`${o}.${r}`)})}else a.innerHTML=l??"";else{const e=l;this._handleInputElement(a,l,s=>{r[n]=s,this._queueUpdate(this._getRootAndPath(t).root,"modified",r,n,e,o,`${o}.${n}`)})}}})}else{const e=l.querySelector('[res-prop=""]');e?e.innerHTML=String(r):l.innerHTML=String(r)}this._handleDisplayElements(l,r,t),this._bindClickEvents(l,r,s),n.appendChild(l)})}_renderNestedArray(t,r,s,n){t.__res_template||(t.__res_template=t.cloneNode(!0));const i=t.__res_template;for(t.innerHTML="";t.children&&t.children.length;)t.children[0].remove();r.forEach((o,a)=>{const l=i.cloneNode(!0);if(l.setAttribute("res-rendered","true"),l.setAttribute("res-index",a),null===o||e(o)){l.querySelectorAll("[res-prop]").forEach(e=>{const t=e.getAttribute("res-prop");if(t&&t in o){let r=null;try{r=o.key}catch(e){}e.setAttribute("res-child",(r?`${r}-`:"")+t+"--"+(s||"")),this._renderObjectProperty(e,o[t],n,t)}});const e=l.getAttribute("res-display");e&&this._evaluateDisplayCondition(l,o,e,n),this._handleDisplayElements(l,o,n),this._bindClickEvents(l,o,r)}else l.innerHTML=o;t.appendChild(l)})}updateDisplayConditionalsFor(e){document.querySelectorAll(`[res-display*="${e}"]`).forEach(t=>{const r=t.getAttribute("res-display");let s=null,n=t;for(;n;){const e=n.getAttribute&&n.getAttribute("res"),t=n.getAttribute&&n.getAttribute("res-index");if(e){const r=this._getByPath(e);if(Array.isArray(r)&&null!=t){s=r[Number(t)];break}s=r;break}n=n.parentElement}this._evaluateDisplayCondition(t,s??this.data[e],r,e)});document.querySelectorAll(`[res="${e}"] [res-display]`).forEach(t=>{const r=t.getAttribute("res-display");this._evaluateDisplayCondition(t,this.data[e],r,e)})}updateStylesFor(e){document.querySelectorAll(`[res-style*="${e}"]`).forEach(t=>{let r=t.getAttribute("res-style");try{const e=t.getAttribute("res-styles");e&&(e.split(/\s+/).filter(Boolean).forEach(e=>t.classList.remove(e)),t.removeAttribute("res-styles"));let s=t,n=null,i=null;for(;s;){const e=s.getAttribute&&s.getAttribute("res"),t=s.getAttribute&&s.getAttribute("res-index");e&&(n=e),null!=t&&(i=t),s=s.parentElement}let o=null;if(n){const e=this._getByPath(n);o=Array.isArray(e)&&null!==i?e[Number(i)]:e}let a=r;if(n){const{root:e}=this._getRootAndPath(n),t=new RegExp(`\\b${e}\\b`,"g");a=a.replace(t,"item")}const l=new Function("item","state",`return (${a});`)(o,this.data);"string"==typeof l&&l.trim()&&(l.split(/\s+/).forEach(e=>t.classList.add(e)),t.setAttribute("res-styles",l.trim()))}catch(t){console.error(`Error evaluating style for ${e}: ${r}`,t)}})}addCallback(e,t){this.callbacks[e]||(this.callbacks[e]=[]),this.callbacks[e].push(t)}},window.ObservableArray=n})();
1
+ (()=>{function e(e){return null!==e&&"object"==typeof e}function t(e){if("number"==typeof e)return!0;if("string"!=typeof e)return!1;const t=Number(e);return Number.isInteger(t)&&String(t)===e}const r=Symbol("resonantProxy"),s=new WeakMap;class n{constructor(e,t,...r){const s=Array.from(r);return n._createArrayProxy(s,e,t,"")}static _ensureKey(t,r){if(e(t)){if(!s.has(t)){const e=""+r._nextKeyId++;s.set(t,e)}if(!Object.prototype.hasOwnProperty.call(t,"key"))try{Object.defineProperty(t,"key",{get:()=>s.get(t),enumerable:!1,configurable:!1})}catch(e){}}}static _ensureKeysRecursive(t,r){return e(t)?Array.isArray(t)?(t.forEach(e=>n._ensureKeysRecursive(e,r)),t):(n._ensureKey(t,r),Object.keys(t).forEach(e=>{n._ensureKeysRecursive(t[e],r)}),t):t}static _wrapAny(t,s,i,o){return e(t)?t[r]?t:Array.isArray(t)?n._createArrayProxy(t.slice(),s,i,o):i._createObject(s,t,o):t}static _createArrayProxy(s,i,o,a){try{Object.defineProperty(s,r,{value:!0,enumerable:!1})}catch(e){}for(let t=0;t<s.length;t++){const r=s[t];e(r)&&n._ensureKeysRecursive(r,o),s[t]=n._wrapAny(r,i,o,a?`${a}.${t}`:`${t}`)}const l=!(!a||!String(a).length),c=(e,t)=>{const r=l?"modified":"added";o._queueUpdate(i,r,e,null,void 0,t,a)},u=(e,t)=>{const r=l?"modified":"removed";o._queueUpdate(i,r,e,null,void 0,t,a)},d=(e,t,r,s=null)=>{o._queueUpdate(i,"modified",e,s,r,t,a)},p=(e=null)=>{const t=l?"modified":"updated",r=null!==e?e:s;o._queueUpdate(i,t,r,null,void 0,null,a)};return new Proxy(s,{get(e,s,l){if(s===r)return!0;if("length"===s)return Reflect.get(e,s,l);if("set"===s)return(t,r)=>{const s=Number(t),l=e[s],c=n._wrapAny(r,i,o,a?`${a}.${s}`:`${s}`);return n._ensureKeysRecursive(c,o),e[s]=c,d(e[s],s,l),!0};if("delete"===s)return t=>{const r=Number(t);if(!Object.prototype.hasOwnProperty.call(e,r))return!0;const s=e[r];return Array.prototype.splice.call(e,r,1),u(s,r),!0};if("update"===s)return t=>{const r=Array.isArray(t)?t:[];for(let t=e.length-1;t>=0;t--){const r=e[t];e.splice(t,1),u(r,t)}const s=r.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${t}`:`${t}`);return n._ensureKeysRecursive(r,o),r});Array.prototype.push.apply(e,s),s.forEach((e,t)=>c(e,t)),p(t)};if("filterInPlace"===s)return t=>{const r=e.filter(t);for(let t=e.length-1;t>=0;t--){const r=e[t];e.splice(t,1),u(r,t)}const s=r.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${t}`:`${t}`);return n._ensureKeysRecursive(r,o),r});return Array.prototype.push.apply(e,s),s.forEach((e,t)=>c(e,t)),p(),r};if("forceUpdate"===s)return()=>{n._ensureKeysRecursive(e,o),p()};const h={push:(...t)=>{const r=e.length,s=t.map((e,t)=>{const s=n._wrapAny(e,i,o,a?`${a}.${r+t}`:`${r+t}`);return n._ensureKeysRecursive(s,o),s}),l=Array.prototype.push.apply(e,s);return s.forEach((e,t)=>c(e,r+t)),l},pop:()=>{if(!e.length)return;const t=e.length-1,r=Array.prototype.pop.call(e);return u(r,t),r},unshift:(...t)=>{const r=t.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${t}`:`${t}`);return n._ensureKeysRecursive(r,o),r}),s=Array.prototype.unshift.apply(e,r);return r.forEach((e,t)=>c(e,t)),s},shift:()=>{if(!e.length)return;const t=Array.prototype.shift.call(e);return u(t,0),t},splice:(t,r,...s)=>{const l=Number(t)||0,d=void 0===r?e.length-l:Number(r),p=e.slice(l,l+d),h=s.map((e,t)=>{const r=n._wrapAny(e,i,o,a?`${a}.${l+t}`:`${l+t}`);return n._ensureKeysRecursive(r,o),r}),y=Array.prototype.splice.call(e,l,d,...h);return p.forEach((e,t)=>u(e,l+t)),h.forEach((e,t)=>c(e,l+t)),y},sort:t=>(Array.prototype.sort.call(e,t),l),reverse:()=>(Array.prototype.reverse.call(e),l),filter:(t,r=!0)=>{const s=Array.prototype.filter.call(e,t);return r&&o._queueUpdate(i,"filtered",void 0,null,void 0,null,a),s}};if(s in h)return h[s];if("symbol"==typeof s&&s===Symbol.iterator)return e[Symbol.iterator].bind(e);if(t(s))return Reflect.get(e,s,l);const y=Reflect.get(e,s,l);return"function"==typeof y?y.bind(e):y},set(e,r,s,l){if("length"===r){const t=Number(s);if(!Number.isInteger(t)||t<0)return!1;if(t<e.length){const n=e.slice(t);return Reflect.set(e,r,s,l),n.forEach((e,r)=>u(e,t+r)),!0}return Reflect.set(e,r,s,l)}if(t(r)){const t=Number(r),c=e[t],u=n._wrapAny(s,i,o,a?`${a}.${t}`:`${t}`);n._ensureKeysRecursive(u,o);const p=Reflect.set(e,r,u,l);return d(e[t],t,c),p}return Reflect.set(e,r,s,l)},deleteProperty(e,r){if(t(r)&&Object.prototype.hasOwnProperty.call(e,r)){const t=Number(r),s=e[t],n=Reflect.deleteProperty(e,r);return u(s,t),n}return Reflect.deleteProperty(e,r)}})}}window.Resonant=class{constructor(){this.data={},this.callbacks={},this.pendingUpdates=new Map,this.arrayDataChangeDetection={},this.computedProperties={},this.computedDependencies={},this._currentComputed=null,this._nextKeyId=1,this._changedArrayIndices={}}_splitPath(e){return"string"!=typeof e?[]:e.split(".").filter(Boolean)}_getRootAndPath(e){const t=this._splitPath(e);return{root:t.shift()||e,path:t.join(".")}}_getByPath(t){const{root:r,path:s}=this._getRootAndPath(t);let n=this.data[r];if(!s)return n;const i=this._splitPath(s);for(const t of i){if(!e(n))return;n=n[t]}return n}_setByPath(t,r){const{root:s,path:n}=this._getRootAndPath(t);if(!n)return void(window[s]=r);let i=this.data[s];const o=this._splitPath(n);for(let t=0;t<o.length-1;t++){const r=o[t];e(i[r])||(i[r]={}),i=i[r]}i[o[o.length-1]]=r}_handleInputElement(e,t,r){const s=(e.type||"").toLowerCase();if("checkbox"===s){const s=!!t;e.checked!==s&&(e.checked=s),e.hasAttribute("data-resonant-bound")||(e.onchange=()=>r(!!e.checked),e.setAttribute("data-resonant-bound","true"))}else if("number"===s||"range"===s){const s=t??"";e.value!==String(s)&&(e.value=s),e.hasAttribute("data-resonant-bound")||(e.oninput=()=>{const t=e.value,s=""===t?null:Number(t);r(Number.isNaN(s)?null:s)},e.setAttribute("data-resonant-bound","true"))}else{const s=t??"";e.value!==String(s)&&(e.value=s),e.hasAttribute("data-resonant-bound")||(e.oninput=()=>r(e.value),e.setAttribute("data-resonant-bound","true"))}}persist(e,t,r){if(!r)return t;try{const r=localStorage.getItem("res_"+e);return null!=r?JSON.parse(r):(localStorage.setItem("res_"+e,JSON.stringify(t)),t)}catch(r){return console.warn("Resonant: persistence error for",e,r),t}}updatePersistantData(e){try{localStorage.getItem("res_"+e)&&localStorage.setItem("res_"+e,JSON.stringify(this.data[e]))}catch(t){console.warn("Resonant: persistence update error for",e,t)}}add(t,r,s){"Response"!==(r=this.persist(t,r,s)).constructor.name?r instanceof Promise?r.then(e=>{this.add(t,e,s)}).catch(e=>{console.error(`Resonant: Error resolving promise for variable "${t}":`,e)}):(Array.isArray(r)?(this.data[t]=new n(t,this,...r),this.arrayDataChangeDetection[t]=Array.prototype.slice.call(this.data[t])):e(r)?this.data[t]=this._createObject(t,r,""):this.data[t]=r,this._defineProperty(t),this.updateElement(t)):r.json().then(e=>{this.add(t,e,s)}).catch(e=>{console.error(`Resonant: Error resolving fetch response for variable "${t}":`,e)})}addAll(e){Object.entries(e).forEach(([e,t])=>{this.add(e,t)})}computed(e,t){this.computedProperties[e]=t,this.computedDependencies[e]=new Set,this.computedDependencies[e].clear(),this._currentComputed=e;try{const r=t();this.data[e]=r,this._defineProperty(e),this.updateElement(e)}finally{this._currentComputed=null}}_captureAccess(e){this._currentComputed&&this.computedDependencies[this._currentComputed].add(e)}_recomputeProperty(e){if(!this.computedProperties[e])return;const t=this.computedProperties[e],r=this.data[e];this.computedDependencies[e].clear(),this._currentComputed=e;try{const s=t();r!==s&&(this.data[e]=s,this.updateElement(e),this._queueUpdate(e,"modified",s,null,r))}finally{this._currentComputed=null}}_resolveValue(e,t,r=null){return r??e[t]}_createObject(t,s,i=""){const o=this,a=(s,i)=>{if(!e(s))return s;if(s[r])return s;if(Array.isArray(s))return n._createArrayProxy(s.slice(),t,o,i);n._ensureKeysRecursive(s,o);const l={get(s,l,c){if(l===r)return!0;if(o._currentComputed&&"symbol"!=typeof l){const e=i?`${t}.${i}.${String(l)}`:`${t}.${String(l)}`;o._captureAccess(t),o._captureAccess(e)}const u=Reflect.get(s,l,c);if(e(u)){const e=i?`${i}.${String(l)}`:String(l);let c;return u[r]?u:(c=Array.isArray(u)?n._createArrayProxy(u,t,o,e):a(u,e),s[l]=c,c)}return u},set(e,r,s,l){const c=e[r];if(c===s)return!0;const u=i?`${i}.${String(r)}`:String(r),d=a(s,u);n._ensureKeysRecursive(d,o);const p=Reflect.set(e,r,d,l);return o._queueUpdate(t,"modified",e,String(r),c,null,u),p},deleteProperty(e,r){const s=e[r],n=Reflect.deleteProperty(e,r);return n&&o._queueUpdate(t,"removed",null,String(r),s,null,i?`${i}.${String(r)}`:String(r)),n}};try{Object.defineProperty(s,r,{value:!0,enumerable:!1})}catch(e){}return new Proxy(s,l)};return a(s,i)}_evaluateDisplayCondition(t,r,s,n){try{let i=s||"",o=!1;if(n){const{root:t}=this._getRootAndPath(n);if(r&&e(r)){const e=new RegExp(`\\b${t}\\b`,"g");i=i.replace(e,"item");(i.match(/\b[a-zA-Z_][a-zA-Z0-9_]*\b/g)||[]).forEach(e=>{if("item"!==e&&"true"!==e&&"false"!==e&&"null"!==e&&"undefined"!==e&&Object.prototype.hasOwnProperty.call(r,e)){const t=new RegExp(`\\b${e}\\b`,"g");i=i.replace(t,`item.${e}`)}})}}try{o=!!new Function("item","state",`return (${i});`)(r,this.data)}catch(e){o=!!new Function(`return (${s});`)()}t.style.display=o?"inherit":"none"}catch(e){console.error(`Error evaluating display condition: ${s}`,e)}}_handleDisplayElements(e,t,r){e.querySelectorAll("[res-display]").forEach(e=>{const s=e.getAttribute("res-display")||"";this._evaluateDisplayCondition(e,t,s,r)})}_bindClickEvents(t,r,s){t.querySelectorAll("[res-onclick], [res-onclick-remove]").forEach(t=>{const n=t.getAttribute("res-onclick"),i=t.getAttribute("res-onclick-remove");n&&(t.onclick=()=>{const e=window&&window[n]||null;if("function"==typeof e)try{e.length>0?e(r):e()}catch(e){console.error("Resonant: onclick handler error for",n,e)}else console.warn("Resonant: onclick handler not found:",n)}),i&&(t.onclick=()=>{if(s&&Array.isArray(s)){const t=s.findIndex(t=>e(t)&&t[i]===r[i]);-1!==t&&s.splice(t,1)}})})}_defineProperty(t){Object.defineProperty(window,t,{configurable:!0,get:()=>(this._captureAccess(t),this.data[t]),set:r=>{this.computedProperties[t]?console.warn(`Cannot set computed property "${t}"`):(Array.isArray(r)?(this.data[t]=new n(t,this,...r),this.arrayDataChangeDetection[t]=Array.prototype.slice.call(this.data[t])):e(r)?this.data[t]=this._createObject(t,r,""):this.data[t]=r,this.updateElement(t),this.updateDisplayConditionalsFor(t),this.updateStylesFor(t),Array.isArray(r)||e(r)||this._queueUpdate(t,"modified",this.data[t]))}})}_queueUpdate(e,t,r,s=null,n,i=null,o=null){if(this.pendingUpdates.has(e)||this.pendingUpdates.set(e,[]),this.pendingUpdates.get(e).push({action:t,item:r,property:s,oldValue:n,index:i,path:o}),this._changedArrayIndices[e]||(this._changedArrayIndices[e]=new Set),"number"==typeof i&&i>=0)this._changedArrayIndices[e].add(i);else if("string"==typeof o){const t=o.match(/^(\d+)(\.|$)/);t&&this._changedArrayIndices[e].add(Number(t[1]))}1===this.pendingUpdates.get(e).length&&setTimeout(()=>{let t=this.pendingUpdates.get(e)||[];this.updatePersistantData(e),this.pendingUpdates.delete(e);const r=new Map;t.forEach(e=>r.set((e=>`${e.action}|${e.property??""}|${e.index??""}|${e.path??""}`)(e),e)),t=Array.from(r.values()),t.forEach(t=>{this._triggerCallbacks(e,t)});const s=new Set;t.forEach(t=>{s.add(e),t.path&&s.add(`${e}.${t.path}`)}),Object.keys(this.computedDependencies).forEach(t=>{const r=this.computedDependencies[t];for(const n of s)if(r.has(n)||r.has(e)){this._recomputeProperty(t);break}}),this.updateElement(e),this.updateDisplayConditionalsFor(e),this.updateStylesFor(e),this._changedArrayIndices[e]&&delete this._changedArrayIndices[e]},0)}_triggerCallbacks(e,t){this.callbacks[e]&&this.callbacks[e].forEach(r=>{const s=t.item||t.oldValue;try{r("undefined"!=typeof window&&void 0!==window[e]?window[e]:this.data[e],s,t.action)}catch(t){console.error("Resonant: callback error for",e,t)}})}updateElement(t){const{root:r}=this._getRootAndPath(t);document.querySelectorAll(`[res="${r}"], [res^="${r}."]`).forEach(t=>{const r=t.getAttribute("res"),s=this._getByPath(r);if("INPUT"===t.tagName||"TEXTAREA"===t.tagName)this._handleInputElement(t,s,e=>{this._setByPath(r,e);const{root:t,path:s}=this._getRootAndPath(r);this._queueUpdate(t,"modified",this._getByPath(r),s?s.split(".").pop():null,null,null,s||null)});else if(Array.isArray(s)){if("true"===t.getAttribute("res-rendered"))return;t.querySelectorAll(`[res="${r}"][res-rendered="true"]`).forEach(e=>e.remove()),this._renderArray(r,t)}else if(e(s)){t.querySelectorAll("[res-prop]").forEach(e=>{const t=e.getAttribute("res-prop");t&&t in s&&this._renderObjectProperty(e,s[t],r,t)})}else t.innerHTML=s??""}),this.updateDisplayConditionalsFor(t),this.updateStylesFor(t)}_renderObjectProperty(t,r,s,n){const i=t.tagName;if("INPUT"!==i&&"TEXTAREA"!==i||Array.isArray(r)||e(r))if(Array.isArray(r)){let n=null;const i=this._getByPath(s);if(i&&e(i))try{n=i.key}catch(e){}else{const e=t.getAttribute("res-child");e&&e.includes("--")&&(n=e.split("--")[1])}this._renderNestedArray(t,r,n,s)}else if(e(r)){t.querySelectorAll("[res-prop]").forEach(e=>{const t=e.getAttribute("res-prop");t&&t in r&&this._renderObjectProperty(e,r[t],s,t)})}else t.innerHTML=r??"";else{const e=`${s}.${n}`;this._handleInputElement(t,r,t=>{this._setByPath(e,t)})}}_renderArray(t,r){const s=this._getByPath(t),n=r.hasAttribute("res")&&r.parentElement?r.parentElement:r;let i;const o=t+"_template";window[o]?i=window[o]:(i=r.cloneNode(!0),window[o]=i,r.style.display="none",r.setAttribute("res-template","true"));const a=new Map,l=Array.from(n.querySelectorAll(`[res="${t}"][res-rendered="true"]`));l.forEach(e=>{const t=e.getAttribute("res-key");t&&a.set(t,e)});const c=this._changedArrayIndices[t]||this._changedArrayIndices[this._getRootAndPath(t).root],u=new Set;s.forEach((r,o)=>{let l,d=null;try{d=r&&r.key}catch(e){}d||(d=String(o));let p=a.has(d)&&!(c&&c.has(o));if(p?(l=a.get(d),u.add(l),l.setAttribute("res-index",o)):(l=i.cloneNode(!0),l.removeAttribute("res-template"),l.style.display="",l.setAttribute("res-rendered","true"),l.setAttribute("res-key",d),l.setAttribute("res",t)),l.setAttribute("res-index",o),!p)if(e(r)){Object.keys(r).forEach(s=>{let n=null,i=l.querySelector(`[res-prop="${s}"]`);if(i||(i=l.querySelector('[res-prop=""]'),n=r),i){const a=this._resolveValue(r,s,n),l=i.tagName;if("INPUT"!==l&&"TEXTAREA"!==l||Array.isArray(a)||e(a))Array.isArray(a)||e(a)||(i.innerHTML=a??"");else{const e=a;this._handleInputElement(i,a,n=>{r[s]=n,this._queueUpdate(this._getRootAndPath(t).root,"modified",r,s,e,o,`${o}.${s}`)})}}})}else{const e=l.querySelector('[res-prop=""]');e?e.innerHTML=String(r):l.innerHTML=String(r)}if(e(r)){Object.keys(r).forEach(n=>{let i=l.querySelector(`[res-prop="${n}"]`);if(i){const a=this._resolveValue(r,n,null);if(Array.isArray(a)){let e=null;try{e=s[o]?.key}catch(e){}this._renderNestedArray(i,a,e,t)}else if(e(a)){i.querySelectorAll("[res-prop]").forEach(e=>{const r=e.getAttribute("res-prop");r&&r in a&&this._renderObjectProperty(e,a[r],t,`${o}.${r}`)})}}})}this._handleDisplayElements(l,r,t),this._bindClickEvents(l,r,s),n.appendChild(l)}),l.forEach(e=>{u.has(e)||e.remove()})}_renderNestedArray(t,r,s,n){t.__res_template||(t.__res_template=t.cloneNode(!0));const i=t.__res_template;for(t.innerHTML="";t.children&&t.children.length;)t.children[0].remove();r.forEach((o,a)=>{const l=i.cloneNode(!0);if(l.setAttribute("res-rendered","true"),l.setAttribute("res-index",a),null===o||e(o)){l.querySelectorAll("[res-prop]").forEach(e=>{const t=e.getAttribute("res-prop");if(t&&t in o){let r=null;try{r=o.key}catch(e){}e.setAttribute("res-child",(r?`${r}-`:"")+t+"--"+(s||"")),this._renderObjectProperty(e,o[t],n,t)}});const e=l.getAttribute("res-display");e&&this._evaluateDisplayCondition(l,o,e,n),this._handleDisplayElements(l,o,n),this._bindClickEvents(l,o,r)}else l.innerHTML=o;t.appendChild(l)})}updateDisplayConditionalsFor(e){document.querySelectorAll(`[res-display*="${e}"]`).forEach(t=>{const r=t.getAttribute("res-display");let s=null,n=t;for(;n;){const e=n.getAttribute&&n.getAttribute("res"),t=n.getAttribute&&n.getAttribute("res-index");if(e){const r=this._getByPath(e);if(Array.isArray(r)&&null!=t){s=r[Number(t)];break}s=r;break}n=n.parentElement}this._evaluateDisplayCondition(t,s??this.data[e],r,e)});document.querySelectorAll(`[res="${e}"] [res-display]`).forEach(t=>{const r=t.getAttribute("res-display");this._evaluateDisplayCondition(t,this.data[e],r,e)})}updateStylesFor(e){document.querySelectorAll(`[res-style*="${e}"]`).forEach(t=>{let r=t.getAttribute("res-style");try{const e=t.getAttribute("res-styles");e&&(e.split(/\s+/).filter(Boolean).forEach(e=>t.classList.remove(e)),t.removeAttribute("res-styles"));let s=t,n=null,i=null;for(;s;){const e=s.getAttribute&&s.getAttribute("res"),t=s.getAttribute&&s.getAttribute("res-index");e&&(n=e),null!=t&&(i=t),s=s.parentElement}let o=null;if(n){const e=this._getByPath(n);o=Array.isArray(e)&&null!==i?e[Number(i)]:e}let a=r;if(n){const{root:e}=this._getRootAndPath(n),t=new RegExp(`\\b${e}\\b`,"g");a=a.replace(t,"item")}const l=new Function("item","state",`return (${a});`)(o,this.data);"string"==typeof l&&l.trim()&&(l.split(/\s+/).forEach(e=>t.classList.add(e)),t.setAttribute("res-styles",l.trim()))}catch(t){console.error(`Error evaluating style for ${e}: ${r}`,t)}})}addCallback(e,t){this.callbacks[e]||(this.callbacks[e]=[]),this.callbacks[e].push(t)}},window.ObservableArray=n})();
2
2
  //# sourceMappingURL=resonant.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resonant.min.js","names":["isObject","val","isNumericProp","prop","n","Number","isInteger","String","PROXY_FLAG","Symbol","OBJECT_KEY","WeakMap","ObservableArray","constructor","variableName","resonantInstance","args","base","Array","from","_createArrayProxy","_ensureKey","target","resonant","has","id","_nextKeyId","set","Object","prototype","hasOwnProperty","call","defineProperty","get","enumerable","configurable","_","_ensureKeysRecursive","value","isArray","forEach","v","keys","k","_wrapAny","rootName","path","slice","_createObject","i","length","item","isNestedArray","notifyAdded","index","action","_queueUpdate","undefined","notifyRemoved","notifyModified","oldValue","property","notifyUpdated","payloadItem","itemForCallback","Proxy","t","receiver","Reflect","idx","wrapped","old","splice","array","newArr","wrappedItems","map","it","w","push","apply","predicate","filtered","filter","arrMethods","startLen","result","pop","unshift","shift","start","deleteCount","items","s","dc","removed","res","sort","cmp","reverse","fn","actuallyFilter","iterator","bind","newLen","ok","deleteProperty","window","Resonant","this","data","callbacks","pendingUpdates","Map","arrayDataChangeDetection","computedProperties","computedDependencies","_currentComputed","_changedArrayIndices","_splitPath","split","Boolean","_getRootAndPath","parts","root","join","_getByPath","cur","p","_setByPath","_handleInputElement","element","onChangeCallback","type","toLowerCase","b","checked","hasAttribute","onchange","setAttribute","oninput","raw","num","isNaN","persist","found","localStorage","getItem","JSON","parse","setItem","stringify","e","console","warn","updatePersistantData","add","_defineProperty","updateElement","addAll","config","entries","computed","computedName","computeFunction","Set","clear","_captureAccess","token","_recomputeProperty","newValue","_resolveValue","instance","key","override","rootVarName","obj","basePath","self","wrap","o","handler","childPath","_evaluateDisplayCondition","condition","expr","show","rootPattern","RegExp","replace","match","tok","rx","Function","style","display","error","_handleDisplayElements","parentElement","querySelectorAll","displayEl","getAttribute","_bindClickEvents","arrayValue","onclickEl","functionName","removeKey","onclick","removeIdx","findIndex","updateDisplayConditionalsFor","updateStylesFor","m","setTimeout","updates","delete","seen","u","keyOf","values","_triggerCallbacks","changedTokens","deps","callbackData","callback","document","resAttr","boundValue","tagName","root2","el","remove","_renderArray","subEl","_renderObjectProperty","innerHTML","propValue","parentVarName","tag","parentKey","parentObj","childAttr","includes","_renderNestedArray","nestedEl","nestedKey","variablePath","container","template","tplKey","cloneNode","existingElements","elm","elementToUse","elementKey","changedSet","removeAttribute","overrideInstanceValue","querySelector","prev","anyPlace","appendChild","parentVarPath","__res_template","children","cloned","itemKey","displayCondition","conditionalElement","node","r","bound","styleElement","styleCondition","cls","classList","parent","boundPath","ctxItem","styleClass","trim","addCallback","method"],"sources":["0"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"resonant.min.js","names":["isObject","val","isNumericProp","prop","n","Number","isInteger","String","PROXY_FLAG","Symbol","OBJECT_KEY","WeakMap","ObservableArray","constructor","variableName","resonantInstance","args","base","Array","from","_createArrayProxy","_ensureKey","target","resonant","has","id","_nextKeyId","set","Object","prototype","hasOwnProperty","call","defineProperty","get","enumerable","configurable","_","_ensureKeysRecursive","value","isArray","forEach","v","keys","k","_wrapAny","rootName","path","slice","_createObject","i","length","item","isNestedArray","notifyAdded","index","action","_queueUpdate","undefined","notifyRemoved","notifyModified","oldValue","property","notifyUpdated","payloadItem","itemForCallback","Proxy","t","receiver","Reflect","idx","wrapped","old","splice","array","newArr","wrappedItems","map","it","w","push","apply","predicate","filtered","filter","arrMethods","startLen","result","pop","unshift","shift","start","deleteCount","items","s","dc","removed","res","sort","cmp","reverse","fn","actuallyFilter","iterator","bind","newLen","ok","deleteProperty","window","Resonant","this","data","callbacks","pendingUpdates","Map","arrayDataChangeDetection","computedProperties","computedDependencies","_currentComputed","_changedArrayIndices","_splitPath","split","Boolean","_getRootAndPath","parts","root","join","_getByPath","cur","p","_setByPath","_handleInputElement","element","onChangeCallback","type","toLowerCase","b","checked","hasAttribute","onchange","setAttribute","oninput","raw","num","isNaN","persist","found","localStorage","getItem","JSON","parse","setItem","stringify","e","console","warn","updatePersistantData","add","name","Promise","then","resolvedValue","catch","err","error","_defineProperty","updateElement","json","addAll","config","entries","computed","computedName","computeFunction","Set","clear","_captureAccess","token","_recomputeProperty","newValue","_resolveValue","instance","key","override","rootVarName","obj","basePath","self","wrap","o","handler","childPath","_evaluateDisplayCondition","condition","expr","show","rootPattern","RegExp","replace","match","tok","rx","Function","style","display","_handleDisplayElements","parentElement","querySelectorAll","displayEl","getAttribute","_bindClickEvents","arrayValue","onclickEl","functionName","removeKey","onclick","removeIdx","findIndex","updateDisplayConditionalsFor","updateStylesFor","m","setTimeout","updates","delete","seen","u","keyOf","values","_triggerCallbacks","changedTokens","deps","callbackData","callback","document","resAttr","boundValue","tagName","root2","el","remove","_renderArray","subEl","_renderObjectProperty","innerHTML","propValue","parentVarName","tag","parentKey","parentObj","childAttr","includes","_renderNestedArray","nestedEl","nestedKey","variablePath","container","template","tplKey","cloneNode","existingElements","existingElementsList","changedSet","usedElements","elementToUse","elementKey","shouldReuse","removeAttribute","overrideInstanceValue","querySelector","prev","anyPlace","appendChild","parentVarPath","__res_template","children","cloned","itemKey","displayCondition","conditionalElement","node","r","bound","styleElement","styleCondition","cls","classList","parent","boundPath","ctxItem","styleClass","trim","addCallback","method"],"sources":["0"],"mappings":"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","ignoreList":[]}
package/test/mockDom.js CHANGED
@@ -46,7 +46,8 @@ class MockElement {
46
46
  hasAttribute(name) { return Object.prototype.hasOwnProperty.call(this.attributes, name); }
47
47
  removeAttribute(name) { delete this.attributes[name]; }
48
48
  appendChild(child) {
49
- if (child.parentElement && child.parentElement !== this) {
49
+ // Remove child from its current parent (even if it's this element)
50
+ if (child.parentElement) {
50
51
  const idx = child.parentElement.children.indexOf(child);
51
52
  if (idx >= 0) {
52
53
  child.parentElement.children.splice(idx, 1);
@@ -367,4 +367,144 @@ test('array item property update should not affect other array items', async ()
367
367
 
368
368
  // Verify values are correct
369
369
  assert.strictEqual(secondItemPrice.innerHTML, '25');
370
+ });
371
+
372
+ test('manual DOM changes should be preserved when updating unrelated array items', async () => {
373
+ // Create DOM structure with array of objects
374
+ const root = new MockElement('ul');
375
+
376
+ const li = new MockElement('li');
377
+ li.setAttribute('res', 'people');
378
+
379
+ const nameSpan = new MockElement('span');
380
+ nameSpan.setAttribute('res-prop', 'name');
381
+ li.appendChild(nameSpan);
382
+
383
+ const ageSpan = new MockElement('span');
384
+ ageSpan.setAttribute('res-prop', 'age');
385
+ li.appendChild(ageSpan);
386
+
387
+ root.appendChild(li);
388
+
389
+ const { context, resonant } = createResonantDom(root);
390
+
391
+ // Initialize array with multiple people
392
+ resonant.add('people', [
393
+ { name: 'Alice', age: 30 },
394
+ { name: 'Bob', age: 25 },
395
+ { name: 'Charlie', age: 35 }
396
+ ]);
397
+
398
+ // Get rendered elements
399
+ const renderedItems = root.querySelectorAll('[res-rendered="true"]');
400
+ assert.strictEqual(renderedItems.length, 3, 'Should have 3 rendered items');
401
+
402
+ // Verify initial values
403
+ const firstItemNameSpan = renderedItems[0].querySelector('[res-prop="name"]');
404
+ const secondItemNameSpan = renderedItems[1].querySelector('[res-prop="name"]');
405
+ const thirdItemNameSpan = renderedItems[2].querySelector('[res-prop="name"]');
406
+
407
+ assert.strictEqual(firstItemNameSpan.innerHTML, 'Alice');
408
+ assert.strictEqual(secondItemNameSpan.innerHTML, 'Bob');
409
+ assert.strictEqual(thirdItemNameSpan.innerHTML, 'Charlie');
410
+
411
+ // Manually modify the first item's name directly in the DOM
412
+ firstItemNameSpan.innerHTML = 'Manually Changed Alice';
413
+
414
+ // Update the second item's name through the reactive system
415
+ context.people[1].name = 'Robert';
416
+ await new Promise(r => setTimeout(r, 5));
417
+
418
+ // Get updated rendered elements
419
+ const updatedItems = root.querySelectorAll('[res-rendered="true"]');
420
+
421
+ // Verify the manually changed first item was NOT overwritten
422
+ const updatedFirstItemNameSpan = updatedItems[0].querySelector('[res-prop="name"]');
423
+ assert.strictEqual(updatedFirstItemNameSpan.innerHTML, 'Manually Changed Alice',
424
+ 'First item manual change should be preserved');
425
+
426
+ // Verify the second item was updated correctly
427
+ const updatedSecondItemNameSpan = updatedItems[1].querySelector('[res-prop="name"]');
428
+ assert.strictEqual(updatedSecondItemNameSpan.innerHTML, 'Robert',
429
+ 'Second item should be updated to Robert');
430
+
431
+ // Verify the third item remains unchanged
432
+ const updatedThirdItemNameSpan = updatedItems[2].querySelector('[res-prop="name"]');
433
+ assert.strictEqual(updatedThirdItemNameSpan.innerHTML, 'Charlie',
434
+ 'Third item should remain unchanged');
435
+ });
436
+
437
+ test('manual DOM changes in one array should be preserved when updating a different array', async () => {
438
+ // Create DOM structure with two separate arrays
439
+ const root = new MockElement('div');
440
+
441
+ // First array container
442
+ const firstArrayContainer = new MockElement('ul');
443
+ const firstArrayTemplate = new MockElement('li');
444
+ firstArrayTemplate.setAttribute('res', 'teamA');
445
+ const firstArrayNameSpan = new MockElement('span');
446
+ firstArrayNameSpan.setAttribute('res-prop', 'name');
447
+ firstArrayTemplate.appendChild(firstArrayNameSpan);
448
+ firstArrayContainer.appendChild(firstArrayTemplate);
449
+ root.appendChild(firstArrayContainer);
450
+
451
+ // Second array container
452
+ const secondArrayContainer = new MockElement('ul');
453
+ const secondArrayTemplate = new MockElement('li');
454
+ secondArrayTemplate.setAttribute('res', 'teamB');
455
+ const secondArrayNameSpan = new MockElement('span');
456
+ secondArrayNameSpan.setAttribute('res-prop', 'name');
457
+ secondArrayTemplate.appendChild(secondArrayNameSpan);
458
+ secondArrayContainer.appendChild(secondArrayTemplate);
459
+ root.appendChild(secondArrayContainer);
460
+
461
+ const { context, resonant } = createResonantDom(root);
462
+
463
+ // Initialize both arrays
464
+ resonant.add('teamA', [
465
+ { name: 'Alice' },
466
+ { name: 'Bob' }
467
+ ]);
468
+ resonant.add('teamB', [
469
+ { name: 'Charlie' },
470
+ { name: 'Diana' }
471
+ ]);
472
+
473
+ // Get rendered elements for both arrays
474
+ const teamAItems = firstArrayContainer.querySelectorAll('[res="teamA"][res-rendered="true"]');
475
+ const teamBItems = secondArrayContainer.querySelectorAll('[res="teamB"][res-rendered="true"]');
476
+
477
+ assert.strictEqual(teamAItems.length, 2, 'Should have 2 teamA items');
478
+ assert.strictEqual(teamBItems.length, 2, 'Should have 2 teamB items');
479
+
480
+ // Verify initial values
481
+ assert.strictEqual(teamAItems[0].querySelector('[res-prop="name"]').innerHTML, 'Alice');
482
+ assert.strictEqual(teamAItems[1].querySelector('[res-prop="name"]').innerHTML, 'Bob');
483
+ assert.strictEqual(teamBItems[0].querySelector('[res-prop="name"]').innerHTML, 'Charlie');
484
+ assert.strictEqual(teamBItems[1].querySelector('[res-prop="name"]').innerHTML, 'Diana');
485
+
486
+ // Manually modify the second array's first item
487
+ const teamBFirstItemNameSpan = teamBItems[0].querySelector('[res-prop="name"]');
488
+ teamBFirstItemNameSpan.innerHTML = 'Manually Changed Charlie';
489
+
490
+ // Update the FIRST array (teamA) through the reactive system
491
+ context.teamA[0].name = 'Alicia';
492
+ await new Promise(r => setTimeout(r, 5));
493
+
494
+ // Get updated rendered elements
495
+ const updatedTeamAItems = firstArrayContainer.querySelectorAll('[res="teamA"][res-rendered="true"]');
496
+ const updatedTeamBItems = secondArrayContainer.querySelectorAll('[res="teamB"][res-rendered="true"]');
497
+
498
+ // Verify the first array was updated correctly
499
+ assert.strictEqual(updatedTeamAItems[0].querySelector('[res-prop="name"]').innerHTML, 'Alicia',
500
+ 'TeamA first item should be updated to Alicia');
501
+ assert.strictEqual(updatedTeamAItems[1].querySelector('[res-prop="name"]').innerHTML, 'Bob',
502
+ 'TeamA second item should remain Bob');
503
+
504
+ // Verify the second array's manual change was preserved (CRITICAL TEST)
505
+ const updatedTeamBFirstItemNameSpan = updatedTeamBItems[0].querySelector('[res-prop="name"]');
506
+ assert.strictEqual(updatedTeamBFirstItemNameSpan.innerHTML, 'Manually Changed Charlie',
507
+ 'TeamB manual change should be preserved when teamA is updated');
508
+ assert.strictEqual(updatedTeamBItems[1].querySelector('[res-prop="name"]').innerHTML, 'Diana',
509
+ 'TeamB second item should remain Diana');
370
510
  });