micra.js 2.2.1 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +118 -0
- package/README.md +44 -0
- package/dist/core/bus.d.ts +6 -4
- package/dist/core/reactive.d.ts +4 -0
- package/dist/dom/directives.d.ts +2 -2
- package/dist/dom/each.d.ts +5 -2
- package/dist/dom/scan.d.ts +5 -9
- package/dist/index.d.ts +1 -1
- package/dist/micra.cjs.js +75 -62
- package/dist/micra.cjs.js.map +3 -3
- package/dist/micra.esm.js +75 -62
- package/dist/micra.esm.js.map +3 -3
- package/dist/micra.js +75 -62
- package/dist/micra.js.map +3 -3
- package/dist/micra.min.js +2 -2
- package/dist/types.d.ts +46 -6
- package/llms-full.txt +162 -14
- package/llms.txt +1 -1
- package/package.json +2 -2
- package/src/core/bus.ts +15 -6
- package/src/core/mount.ts +6 -5
- package/src/core/reactive.ts +6 -1
- package/src/dom/directives.ts +1 -3
- package/src/dom/each.ts +97 -47
- package/src/dom/scan.ts +5 -25
- package/src/index.ts +3 -0
- package/src/types.ts +57 -6
- package/src/dom/query.ts +0 -50
package/dist/micra.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* Micra.js v2.
|
|
1
|
+
/* Micra.js v2.3.1 — https://github.com/micra-js/micra — MIT */
|
|
2
2
|
"use strict";
|
|
3
3
|
var Micra = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -227,8 +227,9 @@ var Micra = (() => {
|
|
|
227
227
|
set.delete(handler);
|
|
228
228
|
if (set.size === 0) _bus.delete(event);
|
|
229
229
|
}
|
|
230
|
-
function emit(event,
|
|
230
|
+
function emit(event, ...args) {
|
|
231
231
|
var _a;
|
|
232
|
+
const payload = args[0];
|
|
232
233
|
(_a = _bus.get(event)) == null ? void 0 : _a.forEach((h) => {
|
|
233
234
|
try {
|
|
234
235
|
h(payload);
|
|
@@ -252,13 +253,14 @@ var Micra = (() => {
|
|
|
252
253
|
}
|
|
253
254
|
function createScheduler(render) {
|
|
254
255
|
let pending = false;
|
|
256
|
+
const flush = () => {
|
|
257
|
+
pending = false;
|
|
258
|
+
render();
|
|
259
|
+
};
|
|
255
260
|
return function schedule() {
|
|
256
261
|
if (pending) return;
|
|
257
262
|
pending = true;
|
|
258
|
-
|
|
259
|
-
pending = false;
|
|
260
|
-
render();
|
|
261
|
-
});
|
|
263
|
+
queueMicrotask(flush);
|
|
262
264
|
};
|
|
263
265
|
}
|
|
264
266
|
|
|
@@ -324,7 +326,7 @@ var Micra = (() => {
|
|
|
324
326
|
const desired = stateVal == null ? "" : String(stateVal);
|
|
325
327
|
if (html.value !== desired) html.value = desired;
|
|
326
328
|
}
|
|
327
|
-
function applyDirectives(scan, state, rawState
|
|
329
|
+
function applyDirectives(scan, state, rawState) {
|
|
328
330
|
for (const b of scan.if) applyIf(b, state);
|
|
329
331
|
for (const b of scan.text) applyText(b.el, b.expr, state);
|
|
330
332
|
for (const b of scan.html) applyHtml(b.el, b.expr, state);
|
|
@@ -535,20 +537,6 @@ var Micra = (() => {
|
|
|
535
537
|
}
|
|
536
538
|
return scan;
|
|
537
539
|
}
|
|
538
|
-
function scanFragment(frag) {
|
|
539
|
-
const scan = emptyScan();
|
|
540
|
-
const walker = document.createTreeWalker(
|
|
541
|
-
frag,
|
|
542
|
-
NodeFilter.SHOW_ELEMENT,
|
|
543
|
-
NESTED_COMPONENT_FILTER
|
|
544
|
-
);
|
|
545
|
-
let node = walker.nextNode();
|
|
546
|
-
while (node) {
|
|
547
|
-
classify(node, scan);
|
|
548
|
-
node = walker.nextNode();
|
|
549
|
-
}
|
|
550
|
-
return scan;
|
|
551
|
-
}
|
|
552
540
|
|
|
553
541
|
// src/dom/each.ts
|
|
554
542
|
function renderList(templates, state, rawState, instance, triggerKey) {
|
|
@@ -579,10 +567,28 @@ var Micra = (() => {
|
|
|
579
567
|
if (keyAttr) {
|
|
580
568
|
renderKeyed(tmpl, items, keyAttr, marker, keyMap, state, rawState, instance, canSkipUnchanged);
|
|
581
569
|
} else {
|
|
582
|
-
renderNoKey(tmpl, items, marker, state, rawState, instance);
|
|
570
|
+
renderNoKey(tmpl, items, marker, state, rawState, instance, canSkipUnchanged);
|
|
583
571
|
}
|
|
584
572
|
}
|
|
585
573
|
}
|
|
574
|
+
function createRowNode(tmpl, state, instance) {
|
|
575
|
+
const frag = tmpl.content.cloneNode(true);
|
|
576
|
+
let node;
|
|
577
|
+
if (frag.childNodes.length === 1) {
|
|
578
|
+
node = frag.firstElementChild;
|
|
579
|
+
} else {
|
|
580
|
+
node = document.createElement("micra-each-item");
|
|
581
|
+
node.style.display = "contents";
|
|
582
|
+
node.append(frag);
|
|
583
|
+
}
|
|
584
|
+
const rowScan = scanComponent(node);
|
|
585
|
+
node.__micraScan = rowScan;
|
|
586
|
+
node._itemState = Object.create(state);
|
|
587
|
+
bindDataOn(rowScan.on, instance);
|
|
588
|
+
bindAtEvents(rowScan.atEvents, instance);
|
|
589
|
+
bindModels(rowScan.model, instance);
|
|
590
|
+
return node;
|
|
591
|
+
}
|
|
586
592
|
function renderKeyed(tmpl, items, keyAttr, marker, keyMap, state, rawState, instance, canSkipUnchanged) {
|
|
587
593
|
var _a;
|
|
588
594
|
const nextKeys = /* @__PURE__ */ new Set();
|
|
@@ -602,22 +608,8 @@ var Micra = (() => {
|
|
|
602
608
|
nextKeys.add(key);
|
|
603
609
|
let node = keyMap.get(key);
|
|
604
610
|
if (!node) {
|
|
605
|
-
|
|
606
|
-
if (frag.childNodes.length === 1) {
|
|
607
|
-
node = frag.firstElementChild;
|
|
608
|
-
} else {
|
|
609
|
-
node = document.createElement("micra-each-item");
|
|
610
|
-
node.style.display = "contents";
|
|
611
|
-
node.append(frag);
|
|
612
|
-
}
|
|
613
|
-
node.__micraKey = key;
|
|
611
|
+
node = createRowNode(tmpl, state, instance);
|
|
614
612
|
keyMap.set(key, node);
|
|
615
|
-
const rowScan2 = scanComponent(node);
|
|
616
|
-
node.__micraScan = rowScan2;
|
|
617
|
-
bindDataOn(rowScan2.on, instance);
|
|
618
|
-
bindAtEvents(rowScan2.atEvents, instance);
|
|
619
|
-
bindModels(rowScan2.model, instance);
|
|
620
|
-
node._itemState = Object.create(state);
|
|
621
613
|
} else if (canSkipUnchanged && node.__micraItem === item && node.__micraIndex === index) {
|
|
622
614
|
nextNodes.push(node);
|
|
623
615
|
continue;
|
|
@@ -629,7 +621,7 @@ var Micra = (() => {
|
|
|
629
621
|
itemState.index = index;
|
|
630
622
|
itemState.$index = index;
|
|
631
623
|
const rowScan = (_a = node.__micraScan) != null ? _a : node.__micraScan = scanComponent(node);
|
|
632
|
-
applyDirectives(rowScan, itemState, rawState
|
|
624
|
+
applyDirectives(rowScan, itemState, rawState);
|
|
633
625
|
nextNodes.push(node);
|
|
634
626
|
}
|
|
635
627
|
for (const [key, node] of keyMap) {
|
|
@@ -695,29 +687,50 @@ var Micra = (() => {
|
|
|
695
687
|
anchor = node;
|
|
696
688
|
}
|
|
697
689
|
}
|
|
698
|
-
function renderNoKey(tmpl, items, marker, state, rawState, instance) {
|
|
699
|
-
tmpl.__micraList
|
|
700
|
-
|
|
701
|
-
const
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
)
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
const
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
}
|
|
720
|
-
|
|
690
|
+
function renderNoKey(tmpl, items, marker, state, rawState, instance, canSkipUnchanged) {
|
|
691
|
+
const prevList = tmpl.__micraList;
|
|
692
|
+
const prevLen = prevList.length;
|
|
693
|
+
const nextLen = items.length;
|
|
694
|
+
const reuseLen = nextLen < prevLen ? nextLen : prevLen;
|
|
695
|
+
const nextList = new Array(nextLen);
|
|
696
|
+
for (let i = 0; i < reuseLen; i++) {
|
|
697
|
+
const node = prevList[i];
|
|
698
|
+
const item = items[i];
|
|
699
|
+
if (canSkipUnchanged && node.__micraItem === item && node.__micraIndex === i) {
|
|
700
|
+
nextList[i] = node;
|
|
701
|
+
continue;
|
|
702
|
+
}
|
|
703
|
+
node.__micraItem = item;
|
|
704
|
+
node.__micraIndex = i;
|
|
705
|
+
const itemState = node._itemState;
|
|
706
|
+
itemState.item = item;
|
|
707
|
+
itemState.index = i;
|
|
708
|
+
itemState.$index = i;
|
|
709
|
+
applyDirectives(node.__micraScan, itemState, rawState);
|
|
710
|
+
nextList[i] = node;
|
|
711
|
+
}
|
|
712
|
+
for (let i = nextLen; i < prevLen; i++) {
|
|
713
|
+
prevList[i].remove();
|
|
714
|
+
}
|
|
715
|
+
if (nextLen > prevLen) {
|
|
716
|
+
const frag = document.createDocumentFragment();
|
|
717
|
+
for (let i = prevLen; i < nextLen; i++) {
|
|
718
|
+
const node = createRowNode(tmpl, state, instance);
|
|
719
|
+
const item = items[i];
|
|
720
|
+
const itemState = node._itemState;
|
|
721
|
+
itemState.item = item;
|
|
722
|
+
itemState.index = i;
|
|
723
|
+
itemState.$index = i;
|
|
724
|
+
node.__micraItem = item;
|
|
725
|
+
node.__micraIndex = i;
|
|
726
|
+
applyDirectives(node.__micraScan, itemState, rawState);
|
|
727
|
+
nextList[i] = node;
|
|
728
|
+
frag.append(node);
|
|
729
|
+
}
|
|
730
|
+
const anchor = prevLen > 0 ? nextList[prevLen - 1] : marker;
|
|
731
|
+
anchor.after(frag);
|
|
732
|
+
}
|
|
733
|
+
tmpl.__micraList = nextList;
|
|
721
734
|
}
|
|
722
735
|
|
|
723
736
|
// src/dom/refs.ts
|
|
@@ -809,7 +822,7 @@ var Micra = (() => {
|
|
|
809
822
|
try {
|
|
810
823
|
const mRoot2 = root;
|
|
811
824
|
const scan = (_a2 = mRoot2.__micraScan) != null ? _a2 : mRoot2.__micraScan = scanComponent(root);
|
|
812
|
-
applyDirectives(scan, exprState, rawState
|
|
825
|
+
applyDirectives(scan, exprState, rawState);
|
|
813
826
|
renderList(scan.each, exprState, rawState, instance, triggerKey);
|
|
814
827
|
bindDataOn(scan.on, instance);
|
|
815
828
|
bindAtEvents(scan.atEvents, instance);
|