tutuca 0.9.53 → 0.9.55
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 +1 -1
- package/dist/tutuca-cli.js +33 -16
- package/dist/tutuca-dev.js +35 -20
- package/dist/tutuca-dev.min.js +2 -2
- package/dist/tutuca-extra.js +4 -8
- package/dist/tutuca-extra.min.js +1 -1
- package/dist/tutuca.js +4 -8
- package/dist/tutuca.min.js +1 -1
- package/package.json +1 -1
- package/skill/tutuca/SKILL.md +15 -25
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Zero-dependency batteries included SPA framework.
|
|
4
4
|
|
|
5
5
|
- **Single file, no build, no dependencies, no setup** — a script tag is all you need
|
|
6
|
-
- **Batteries included** — state management, side effects, automatic memoization, drag and drop and more
|
|
6
|
+
- **Batteries included** — state management, side effects, automatic memoization, drag and drop, testing, CLI tooling, LLM skills and more
|
|
7
7
|
- **Fits in your head** (and the context window)
|
|
8
8
|
- **View source friendly** — step through the whole stack
|
|
9
9
|
- **As much HTML as possible, as little JS as needed**
|
package/dist/tutuca-cli.js
CHANGED
|
@@ -3615,16 +3615,25 @@ function getFieldMethods(field) {
|
|
|
3615
3615
|
name: `reset${uname}`,
|
|
3616
3616
|
sig: `reset${uname}()`,
|
|
3617
3617
|
desc: "Reset to default value"
|
|
3618
|
-
}
|
|
3618
|
+
}
|
|
3619
|
+
];
|
|
3620
|
+
const truthy = [
|
|
3619
3621
|
{
|
|
3620
|
-
name: `is${uname}
|
|
3621
|
-
sig: `is${uname}
|
|
3622
|
-
desc: "Check if
|
|
3622
|
+
name: `is${uname}Truthy`,
|
|
3623
|
+
sig: `is${uname}Truthy()`,
|
|
3624
|
+
desc: "Check if value is truthy"
|
|
3623
3625
|
},
|
|
3624
3626
|
{
|
|
3625
|
-
name: `is${uname}
|
|
3626
|
-
sig: `is${uname}
|
|
3627
|
-
desc: "Check if
|
|
3627
|
+
name: `is${uname}Falsy`,
|
|
3628
|
+
sig: `is${uname}Falsy()`,
|
|
3629
|
+
desc: "Check if value is falsy"
|
|
3630
|
+
}
|
|
3631
|
+
];
|
|
3632
|
+
const nullable = [
|
|
3633
|
+
{
|
|
3634
|
+
name: `is${uname}Null`,
|
|
3635
|
+
sig: `is${uname}Null()`,
|
|
3636
|
+
desc: "Check if value is null/undefined"
|
|
3628
3637
|
}
|
|
3629
3638
|
];
|
|
3630
3639
|
switch (type3) {
|
|
@@ -3634,21 +3643,28 @@ function getFieldMethods(field) {
|
|
|
3634
3643
|
name: `toggle${uname}`,
|
|
3635
3644
|
sig: `toggle${uname}()`,
|
|
3636
3645
|
desc: "Toggle boolean value"
|
|
3637
|
-
});
|
|
3646
|
+
}, ...truthy);
|
|
3647
|
+
break;
|
|
3648
|
+
case "int":
|
|
3649
|
+
case "float":
|
|
3650
|
+
methods.push(...truthy);
|
|
3651
|
+
break;
|
|
3652
|
+
case "any":
|
|
3653
|
+
methods.push(...nullable, ...truthy);
|
|
3638
3654
|
break;
|
|
3639
3655
|
case "text":
|
|
3640
3656
|
methods.push({
|
|
3641
3657
|
name: `is${uname}Empty`,
|
|
3642
3658
|
sig: `is${uname}Empty()`,
|
|
3643
3659
|
desc: "Check if string is empty"
|
|
3644
|
-
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get string length" });
|
|
3660
|
+
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get string length" }, ...truthy);
|
|
3645
3661
|
break;
|
|
3646
3662
|
case "list":
|
|
3647
3663
|
methods.push({
|
|
3648
3664
|
name: `is${uname}Empty`,
|
|
3649
3665
|
sig: `is${uname}Empty()`,
|
|
3650
3666
|
desc: "Check if list is empty"
|
|
3651
|
-
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get list size" }, {
|
|
3667
|
+
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get list size" }, ...truthy, {
|
|
3652
3668
|
name: `setIn${uname}At`,
|
|
3653
3669
|
sig: `setIn${uname}At(i, v)`,
|
|
3654
3670
|
desc: "Set item at index"
|
|
@@ -3689,7 +3705,7 @@ function getFieldMethods(field) {
|
|
|
3689
3705
|
name: `${name}Len`,
|
|
3690
3706
|
sig: `${name}Len()`,
|
|
3691
3707
|
desc: `Get ${label} size`
|
|
3692
|
-
}, {
|
|
3708
|
+
}, ...truthy, {
|
|
3693
3709
|
name: `setIn${uname}At`,
|
|
3694
3710
|
sig: `setIn${uname}At(key, v)`,
|
|
3695
3711
|
desc: "Set value at key"
|
|
@@ -3717,7 +3733,7 @@ function getFieldMethods(field) {
|
|
|
3717
3733
|
name: `is${uname}Empty`,
|
|
3718
3734
|
sig: `is${uname}Empty()`,
|
|
3719
3735
|
desc: "Check if set is empty"
|
|
3720
|
-
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get set size" }, {
|
|
3736
|
+
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get set size" }, ...truthy, {
|
|
3721
3737
|
name: `addIn${uname}`,
|
|
3722
3738
|
sig: `addIn${uname}(v)`,
|
|
3723
3739
|
desc: "Add value to set"
|
|
@@ -3739,6 +3755,9 @@ function getFieldMethods(field) {
|
|
|
3739
3755
|
desc: "Toggle value in set"
|
|
3740
3756
|
});
|
|
3741
3757
|
break;
|
|
3758
|
+
default:
|
|
3759
|
+
methods.push(...nullable, ...truthy);
|
|
3760
|
+
break;
|
|
3742
3761
|
}
|
|
3743
3762
|
return methods;
|
|
3744
3763
|
}
|
|
@@ -5406,15 +5425,13 @@ class Components {
|
|
|
5406
5425
|
return v?.[this.getComponentSymbol]?.() ?? null;
|
|
5407
5426
|
}
|
|
5408
5427
|
getOnEnterFor(v) {
|
|
5409
|
-
|
|
5410
|
-
return comp ? comp.on.stackEnter : defaultOnStackEnter;
|
|
5428
|
+
return this.getCompFor(v)?.on.stackEnter ?? defaultOnStackEnter;
|
|
5411
5429
|
}
|
|
5412
5430
|
getHandlerFor(v, name, key) {
|
|
5413
5431
|
return this.getCompFor(v)?.[key][name] ?? null;
|
|
5414
5432
|
}
|
|
5415
5433
|
getRequestFor(v, name) {
|
|
5416
|
-
|
|
5417
|
-
return comp ? comp.scope.lookupRequest(name) : null;
|
|
5434
|
+
return this.getCompFor(v)?.scope.lookupRequest(name) ?? null;
|
|
5418
5435
|
}
|
|
5419
5436
|
compileStyles() {
|
|
5420
5437
|
const styles2 = [];
|
package/dist/tutuca-dev.js
CHANGED
|
@@ -8510,15 +8510,13 @@ class Components {
|
|
|
8510
8510
|
return v?.[this.getComponentSymbol]?.() ?? null;
|
|
8511
8511
|
}
|
|
8512
8512
|
getOnEnterFor(v) {
|
|
8513
|
-
|
|
8514
|
-
return comp ? comp.on.stackEnter : defaultOnStackEnter;
|
|
8513
|
+
return this.getCompFor(v)?.on.stackEnter ?? defaultOnStackEnter;
|
|
8515
8514
|
}
|
|
8516
8515
|
getHandlerFor(v, name, key) {
|
|
8517
8516
|
return this.getCompFor(v)?.[key][name] ?? null;
|
|
8518
8517
|
}
|
|
8519
8518
|
getRequestFor(v, name) {
|
|
8520
|
-
|
|
8521
|
-
return comp ? comp.scope.lookupRequest(name) : null;
|
|
8519
|
+
return this.getCompFor(v)?.scope.lookupRequest(name) ?? null;
|
|
8522
8520
|
}
|
|
8523
8521
|
compileStyles() {
|
|
8524
8522
|
const styles2 = [];
|
|
@@ -8603,8 +8601,7 @@ class DynamicAlias extends Dynamic {
|
|
|
8603
8601
|
this.dynName = dynName;
|
|
8604
8602
|
}
|
|
8605
8603
|
_resolveSymbol(stack) {
|
|
8606
|
-
|
|
8607
|
-
return t?.dynamic[this.dynName]?.symbol ?? null;
|
|
8604
|
+
return stack.lookupType(this.compName)?.dynamic[this.dynName]?.symbol ?? null;
|
|
8608
8605
|
}
|
|
8609
8606
|
getSymbol(stack) {
|
|
8610
8607
|
this.symbol ??= this._resolveSymbol(stack);
|
|
@@ -8652,9 +8649,8 @@ class Component {
|
|
|
8652
8649
|
} else if (isString(dinfo?.default) && isString(dinfo?.for)) {
|
|
8653
8650
|
const val = vp.parseDynamic(dinfo.default, this.views.main.ctx);
|
|
8654
8651
|
const [compName, dynName] = dinfo.for.split(".");
|
|
8655
|
-
if (isString(compName) && isString(dynName))
|
|
8652
|
+
if (isString(compName) && isString(dynName))
|
|
8656
8653
|
this.dynamic[key] = new DynamicAlias(key, val, compName, dynName);
|
|
8657
|
-
}
|
|
8658
8654
|
}
|
|
8659
8655
|
}
|
|
8660
8656
|
for (const name in this.views)
|
|
@@ -14869,16 +14865,25 @@ function getFieldMethods(field) {
|
|
|
14869
14865
|
name: `reset${uname}`,
|
|
14870
14866
|
sig: `reset${uname}()`,
|
|
14871
14867
|
desc: "Reset to default value"
|
|
14872
|
-
}
|
|
14868
|
+
}
|
|
14869
|
+
];
|
|
14870
|
+
const truthy = [
|
|
14873
14871
|
{
|
|
14874
|
-
name: `is${uname}
|
|
14875
|
-
sig: `is${uname}
|
|
14876
|
-
desc: "Check if
|
|
14872
|
+
name: `is${uname}Truthy`,
|
|
14873
|
+
sig: `is${uname}Truthy()`,
|
|
14874
|
+
desc: "Check if value is truthy"
|
|
14877
14875
|
},
|
|
14878
14876
|
{
|
|
14879
|
-
name: `is${uname}
|
|
14880
|
-
sig: `is${uname}
|
|
14881
|
-
desc: "Check if
|
|
14877
|
+
name: `is${uname}Falsy`,
|
|
14878
|
+
sig: `is${uname}Falsy()`,
|
|
14879
|
+
desc: "Check if value is falsy"
|
|
14880
|
+
}
|
|
14881
|
+
];
|
|
14882
|
+
const nullable = [
|
|
14883
|
+
{
|
|
14884
|
+
name: `is${uname}Null`,
|
|
14885
|
+
sig: `is${uname}Null()`,
|
|
14886
|
+
desc: "Check if value is null/undefined"
|
|
14882
14887
|
}
|
|
14883
14888
|
];
|
|
14884
14889
|
switch (type3) {
|
|
@@ -14888,21 +14893,28 @@ function getFieldMethods(field) {
|
|
|
14888
14893
|
name: `toggle${uname}`,
|
|
14889
14894
|
sig: `toggle${uname}()`,
|
|
14890
14895
|
desc: "Toggle boolean value"
|
|
14891
|
-
});
|
|
14896
|
+
}, ...truthy);
|
|
14897
|
+
break;
|
|
14898
|
+
case "int":
|
|
14899
|
+
case "float":
|
|
14900
|
+
methods.push(...truthy);
|
|
14901
|
+
break;
|
|
14902
|
+
case "any":
|
|
14903
|
+
methods.push(...nullable, ...truthy);
|
|
14892
14904
|
break;
|
|
14893
14905
|
case "text":
|
|
14894
14906
|
methods.push({
|
|
14895
14907
|
name: `is${uname}Empty`,
|
|
14896
14908
|
sig: `is${uname}Empty()`,
|
|
14897
14909
|
desc: "Check if string is empty"
|
|
14898
|
-
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get string length" });
|
|
14910
|
+
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get string length" }, ...truthy);
|
|
14899
14911
|
break;
|
|
14900
14912
|
case "list":
|
|
14901
14913
|
methods.push({
|
|
14902
14914
|
name: `is${uname}Empty`,
|
|
14903
14915
|
sig: `is${uname}Empty()`,
|
|
14904
14916
|
desc: "Check if list is empty"
|
|
14905
|
-
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get list size" }, {
|
|
14917
|
+
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get list size" }, ...truthy, {
|
|
14906
14918
|
name: `setIn${uname}At`,
|
|
14907
14919
|
sig: `setIn${uname}At(i, v)`,
|
|
14908
14920
|
desc: "Set item at index"
|
|
@@ -14943,7 +14955,7 @@ function getFieldMethods(field) {
|
|
|
14943
14955
|
name: `${name}Len`,
|
|
14944
14956
|
sig: `${name}Len()`,
|
|
14945
14957
|
desc: `Get ${label} size`
|
|
14946
|
-
}, {
|
|
14958
|
+
}, ...truthy, {
|
|
14947
14959
|
name: `setIn${uname}At`,
|
|
14948
14960
|
sig: `setIn${uname}At(key, v)`,
|
|
14949
14961
|
desc: "Set value at key"
|
|
@@ -14971,7 +14983,7 @@ function getFieldMethods(field) {
|
|
|
14971
14983
|
name: `is${uname}Empty`,
|
|
14972
14984
|
sig: `is${uname}Empty()`,
|
|
14973
14985
|
desc: "Check if set is empty"
|
|
14974
|
-
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get set size" }, {
|
|
14986
|
+
}, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get set size" }, ...truthy, {
|
|
14975
14987
|
name: `addIn${uname}`,
|
|
14976
14988
|
sig: `addIn${uname}(v)`,
|
|
14977
14989
|
desc: "Add value to set"
|
|
@@ -14993,6 +15005,9 @@ function getFieldMethods(field) {
|
|
|
14993
15005
|
desc: "Toggle value in set"
|
|
14994
15006
|
});
|
|
14995
15007
|
break;
|
|
15008
|
+
default:
|
|
15009
|
+
methods.push(...nullable, ...truthy);
|
|
15010
|
+
break;
|
|
14996
15011
|
}
|
|
14997
15012
|
return methods;
|
|
14998
15013
|
}
|