tutuca 0.9.114 → 0.9.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tutuca-cli.js +39 -15
- package/dist/tutuca-dev.ext.js +37 -13
- package/dist/tutuca-dev.js +37 -13
- package/dist/tutuca-dev.min.js +1 -1
- package/dist/tutuca-extra.ext.js +26 -9
- package/dist/tutuca-extra.js +26 -9
- package/dist/tutuca-extra.min.js +1 -1
- package/dist/tutuca.ext.js +26 -9
- package/dist/tutuca.js +26 -9
- package/dist/tutuca.min.js +1 -1
- package/package.json +1 -1
- package/skill/margaui/components/menu.md +31 -1
- package/skill/tutuca/core.md +18 -0
- package/skill/tutuca/patterns/handle-events.md +4 -1
- package/skill/tutuca-source/tutuca.ext.js +26 -9
package/dist/tutuca-cli.js
CHANGED
|
@@ -6236,7 +6236,8 @@ function parseRenderEach(px, value, as, attrs) {
|
|
|
6236
6236
|
if (seqVal === null) return null;
|
|
6237
6237
|
const renderIt = px.addNode(RenderItNode, as);
|
|
6238
6238
|
const attrParser = getAttrParser(px);
|
|
6239
|
-
const eachAttr = attrParser.
|
|
6239
|
+
const eachAttr = attrParser.pushWrapper("each", value, seqVal);
|
|
6240
|
+
attrParser.eachAttr = eachAttr;
|
|
6240
6241
|
const when = attrs.getNamedItem("@when") ?? attrs.getNamedItem("when");
|
|
6241
6242
|
if (when) {
|
|
6242
6243
|
if (when.name.charCodeAt(0) !== 64) maybeDeprecateBareXDirective(px, "render-each", "when");
|
|
@@ -6279,17 +6280,25 @@ function condenseChildsWhites(childs) {
|
|
|
6279
6280
|
}
|
|
6280
6281
|
function compileModifiers(eventName, names) {
|
|
6281
6282
|
if (names.length === 0) return identityModifierWrapper;
|
|
6282
|
-
const wrappers = MOD_WRAPPERS_BY_EVENT[eventName] ??
|
|
6283
|
-
|
|
6283
|
+
const wrappers = MOD_WRAPPERS_BY_EVENT[eventName] ?? NO_WRAPPERS;
|
|
6284
|
+
const effects = [];
|
|
6284
6285
|
for (const name of names) {
|
|
6285
|
-
const
|
|
6286
|
+
const effect = MOD_EFFECTS[name];
|
|
6287
|
+
if (effect !== void 0) effects.push(effect);
|
|
6288
|
+
}
|
|
6289
|
+
let w = effects.length === 0 ? (that, f, args, _ctx) => f.apply(that, args) : (that, f, args, ctx) => {
|
|
6290
|
+
for (const effect of effects) effect(ctx.e);
|
|
6291
|
+
return f.apply(that, args);
|
|
6292
|
+
};
|
|
6293
|
+
for (const name of names) {
|
|
6294
|
+
const wrapper = wrappers[name] ?? MOD_WRAPPERS_FOR_ANY_EVENT[name];
|
|
6286
6295
|
if (wrapper !== void 0) w = wrapper(w);
|
|
6287
6296
|
}
|
|
6288
6297
|
return (f, ctx) => function(...args) {
|
|
6289
6298
|
return w(this, f, args, ctx);
|
|
6290
6299
|
};
|
|
6291
6300
|
}
|
|
6292
|
-
var BaseNode, TextNode, CommentNode, ChildsNode, DomNode, FragmentNode, maybeFragment, VALID_NODE_RE, ANode, MacroNode, RenderViewId, RenderNode, RenderItNode, RenderTextNode, RenderOnceNode, WrapperNode, ShowNode, HideNode, PushViewNameNode, SlotNode, ScopeNode, EachNode, IterInfo, X_OPS, WRAPPER_NODES, ParseContext, _htmlBlockTags, HTML_BLOCK_TAGS, isBlockDomNode, isEmptyText, isIgnorableXChild, hasMeaningfulChilds, NodeEvents, NodeEvent, fwdIfCtxPred, fwdIfKey, fwdCtrl, fwdMeta, fwdAlt,
|
|
6301
|
+
var BaseNode, TextNode, CommentNode, ChildsNode, DomNode, FragmentNode, maybeFragment, VALID_NODE_RE, ANode, MacroNode, RenderViewId, RenderNode, RenderItNode, RenderTextNode, RenderOnceNode, WrapperNode, ShowNode, HideNode, PushViewNameNode, SlotNode, ScopeNode, EachNode, IterInfo, X_OPS, WRAPPER_NODES, ParseContext, _htmlBlockTags, HTML_BLOCK_TAGS, isBlockDomNode, isEmptyText, isIgnorableXChild, hasMeaningfulChilds, NodeEvents, NodeEvent, fwdIfCtxPred, fwdIfKey, fwdCtrl, fwdMeta, fwdAlt, MOD_WRAPPERS_FOR_ANY_EVENT, MOD_WRAPPERS_BY_EVENT, MOD_EFFECTS, NO_WRAPPERS, identityModifierWrapper;
|
|
6293
6302
|
var init_anode = __esm({
|
|
6294
6303
|
"src/anode.js"() {
|
|
6295
6304
|
init_attribute();
|
|
@@ -6807,15 +6816,23 @@ var init_anode = __esm({
|
|
|
6807
6816
|
fwdCtrl = fwdIfCtxPred(({ e }) => isMac && e.metaKey || e.ctrlKey);
|
|
6808
6817
|
fwdMeta = fwdIfCtxPred(({ e }) => e.metaKey);
|
|
6809
6818
|
fwdAlt = fwdIfCtxPred(({ e }) => e.altKey);
|
|
6810
|
-
|
|
6819
|
+
MOD_WRAPPERS_FOR_ANY_EVENT = {
|
|
6820
|
+
ctrl: fwdCtrl,
|
|
6821
|
+
cmd: fwdCtrl,
|
|
6822
|
+
meta: fwdMeta,
|
|
6823
|
+
alt: fwdAlt
|
|
6824
|
+
};
|
|
6811
6825
|
MOD_WRAPPERS_BY_EVENT = {
|
|
6812
6826
|
keydown: {
|
|
6813
6827
|
send: fwdIfKey("Enter"),
|
|
6814
|
-
cancel: fwdIfKey("Escape")
|
|
6815
|
-
|
|
6816
|
-
|
|
6817
|
-
|
|
6828
|
+
cancel: fwdIfKey("Escape")
|
|
6829
|
+
}
|
|
6830
|
+
};
|
|
6831
|
+
MOD_EFFECTS = {
|
|
6832
|
+
prevent: (e) => e.preventDefault?.(),
|
|
6833
|
+
stop: (e) => e.stopPropagation?.()
|
|
6818
6834
|
};
|
|
6835
|
+
NO_WRAPPERS = {};
|
|
6819
6836
|
identityModifierWrapper = (f, _ctx) => f;
|
|
6820
6837
|
}
|
|
6821
6838
|
});
|
|
@@ -9357,10 +9374,13 @@ function checkEventModifiers(lx, view) {
|
|
|
9357
9374
|
for (const event of view.ctx.events) {
|
|
9358
9375
|
for (const handler of event.handlers) {
|
|
9359
9376
|
const { name, modifiers } = handler;
|
|
9360
|
-
const
|
|
9377
|
+
const known = [
|
|
9378
|
+
...Object.keys(MOD_WRAPPERS_BY_EVENT[name] ?? NO_WRAPPERS2),
|
|
9379
|
+
...ANY_EVENT_MODIFIERS
|
|
9380
|
+
];
|
|
9361
9381
|
for (const modifier of modifiers) {
|
|
9362
|
-
if (
|
|
9363
|
-
const close = closestName(modifier,
|
|
9382
|
+
if (!known.includes(modifier)) {
|
|
9383
|
+
const close = closestName(modifier, known);
|
|
9364
9384
|
lx.error(
|
|
9365
9385
|
UNKNOWN_EVENT_MODIFIER,
|
|
9366
9386
|
{
|
|
@@ -9774,7 +9794,7 @@ function checkUnreferencedDynamics(lx, Comp, referencedDynamics) {
|
|
|
9774
9794
|
}
|
|
9775
9795
|
}
|
|
9776
9796
|
}
|
|
9777
|
-
var KNOWN_COMPONENT_SPEC_KEYS, EMPTY_SET2, FRAMEWORK_WELL_KNOWN_EXTRAS, KNOWN_DIRECTIVE_NAMES, ALT_HANDLER_NOT_DEFINED, ALT_HANDLER_NOT_REFERENCED, DYN_VAL_NOT_DEFINED, DYN_ALIAS_NOT_REFERENCED, PROVIDE_NOT_ADDRESSABLE, LOOKUP_BAD_SHAPE, LOOKUP_TARGET_MALFORMED, RENDER_IT_OUTSIDE_OF_LOOP, UNKNOWN_EVENT_MODIFIER, UNKNOWN_HANDLER_ARG_NAME, INPUT_HANDLER_NOT_IMPLEMENTED, INPUT_HANDLER_NOT_REFERENCED, INPUT_HANDLER_METHOD_NOT_IMPLEMENTED, INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD, INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER, FIELD_VAL_NOT_DEFINED, FIELD_VAL_IS_METHOD, METHOD_VAL_NOT_DEFINED, METHOD_VAL_IS_FIELD, DUPLICATE_ATTR_DEFINITION, IF_NO_BRANCH_SET, UNKNOWN_COMPONENT_NAME, UNKNOWN_MACRO_ARG, UNKNOWN_DIRECTIVE, UNKNOWN_X_OP, UNKNOWN_X_ATTR, X_OP_IGNORES_CHILDREN, MAYBE_DROP_AT_PREFIX, MAYBE_ADD_AT_PREFIX, DEPRECATED_BARE_X_DIRECTIVE, BAD_VALUE, UNSUPPORTED_EXPR_SYNTAX, BINDING_MEMBER_TOO_DEEP, SUGGEST_BINDING_MEMBER, REDUNDANT_TEMPLATE_STRING, PLACEHOLDERLESS_TEMPLATE_STRING, CONSTANT_CONDITION, UNKNOWN_COMPONENT_SPEC_KEY, COMP_FIELD_BAD_SHAPE, ASYNC_HANDLER, TOP_LEVEL_AT_RULE_IN_SCOPED_STYLE, GLOBAL_SELECTOR_IN_SCOPED_STYLE, FIELD_NAME_RESERVED_BY_RECORD, RECORD_FIELD_NAME_COLLISIONS, X_KNOWN_OP_NAMES, X_KNOWN_ATTR_NAMES, HOST_DIRECTIVE_ONLY_NAMES, LEVEL_WARN2, LEVEL_ERROR2, LEVEL_HINT, PARSE_ISSUES, BINDING_MEMBER_TOO_DEEP_RE, UNSUPPORTED_EXPR_GUIDANCE, HTML_LINT_OPTS,
|
|
9797
|
+
var KNOWN_COMPONENT_SPEC_KEYS, EMPTY_SET2, FRAMEWORK_WELL_KNOWN_EXTRAS, KNOWN_DIRECTIVE_NAMES, ALT_HANDLER_NOT_DEFINED, ALT_HANDLER_NOT_REFERENCED, DYN_VAL_NOT_DEFINED, DYN_ALIAS_NOT_REFERENCED, PROVIDE_NOT_ADDRESSABLE, LOOKUP_BAD_SHAPE, LOOKUP_TARGET_MALFORMED, RENDER_IT_OUTSIDE_OF_LOOP, UNKNOWN_EVENT_MODIFIER, UNKNOWN_HANDLER_ARG_NAME, INPUT_HANDLER_NOT_IMPLEMENTED, INPUT_HANDLER_NOT_REFERENCED, INPUT_HANDLER_METHOD_NOT_IMPLEMENTED, INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD, INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER, FIELD_VAL_NOT_DEFINED, FIELD_VAL_IS_METHOD, METHOD_VAL_NOT_DEFINED, METHOD_VAL_IS_FIELD, DUPLICATE_ATTR_DEFINITION, IF_NO_BRANCH_SET, UNKNOWN_COMPONENT_NAME, UNKNOWN_MACRO_ARG, UNKNOWN_DIRECTIVE, UNKNOWN_X_OP, UNKNOWN_X_ATTR, X_OP_IGNORES_CHILDREN, MAYBE_DROP_AT_PREFIX, MAYBE_ADD_AT_PREFIX, DEPRECATED_BARE_X_DIRECTIVE, BAD_VALUE, UNSUPPORTED_EXPR_SYNTAX, BINDING_MEMBER_TOO_DEEP, SUGGEST_BINDING_MEMBER, REDUNDANT_TEMPLATE_STRING, PLACEHOLDERLESS_TEMPLATE_STRING, CONSTANT_CONDITION, UNKNOWN_COMPONENT_SPEC_KEY, COMP_FIELD_BAD_SHAPE, ASYNC_HANDLER, TOP_LEVEL_AT_RULE_IN_SCOPED_STYLE, GLOBAL_SELECTOR_IN_SCOPED_STYLE, FIELD_NAME_RESERVED_BY_RECORD, RECORD_FIELD_NAME_COLLISIONS, X_KNOWN_OP_NAMES, X_KNOWN_ATTR_NAMES, HOST_DIRECTIVE_ONLY_NAMES, LEVEL_WARN2, LEVEL_ERROR2, LEVEL_HINT, PARSE_ISSUES, BINDING_MEMBER_TOO_DEEP_RE, UNSUPPORTED_EXPR_GUIDANCE, HTML_LINT_OPTS, NO_WRAPPERS2, ANY_EVENT_MODIFIERS, KNOWN_HANDLER_NAMES, fixTo, BOOL_CONDITION_ORIGINS, isBoolConditionCtx, ATTR_VAL_CHECKERS, NODE_KIND_TO_CTX, HANDLER_CHANNELS, ASYNC_HANDLER_HELP, NON_NESTABLE_AT_RULE, GLOBAL_LEADING_SELECTOR, IGNORE_DIRECTIVE, blankRun, STYLE_TO_GLOBAL_HELP, KNOWN_LOOKUP_KEYS, LintContext, LintParseContext;
|
|
9778
9798
|
var init_lint_check = __esm({
|
|
9779
9799
|
"tools/core/lint-check.js"() {
|
|
9780
9800
|
init_anode();
|
|
@@ -9883,7 +9903,11 @@ var init_lint_check = __esm({
|
|
|
9883
9903
|
// phantom — case checks still apply, but don't enforce parent rules.
|
|
9884
9904
|
transparentTagPrefixes: ["x"]
|
|
9885
9905
|
};
|
|
9886
|
-
|
|
9906
|
+
NO_WRAPPERS2 = {};
|
|
9907
|
+
ANY_EVENT_MODIFIERS = [
|
|
9908
|
+
...Object.keys(MOD_WRAPPERS_FOR_ANY_EVENT),
|
|
9909
|
+
...Object.keys(MOD_EFFECTS)
|
|
9910
|
+
];
|
|
9887
9911
|
KNOWN_HANDLER_NAMES = /* @__PURE__ */ new Set([
|
|
9888
9912
|
"value",
|
|
9889
9913
|
"valueAsInt",
|
package/dist/tutuca-dev.ext.js
CHANGED
|
@@ -2304,7 +2304,8 @@ function parseRenderEach(px, value, as, attrs) {
|
|
|
2304
2304
|
if (seqVal === null) return null;
|
|
2305
2305
|
const renderIt = px.addNode(RenderItNode, as);
|
|
2306
2306
|
const attrParser = getAttrParser(px);
|
|
2307
|
-
const eachAttr = attrParser.
|
|
2307
|
+
const eachAttr = attrParser.pushWrapper("each", value, seqVal);
|
|
2308
|
+
attrParser.eachAttr = eachAttr;
|
|
2308
2309
|
const when = attrs.getNamedItem("@when") ?? attrs.getNamedItem("when");
|
|
2309
2310
|
if (when) {
|
|
2310
2311
|
if (when.name.charCodeAt(0) !== 64) maybeDeprecateBareXDirective(px, "render-each", "when");
|
|
@@ -2647,22 +2648,38 @@ var fwdIfKey = (keyName) => fwdIfCtxPred((ctx) => ctx.e.key === keyName);
|
|
|
2647
2648
|
var fwdCtrl = fwdIfCtxPred(({ e }) => isMac && e.metaKey || e.ctrlKey);
|
|
2648
2649
|
var fwdMeta = fwdIfCtxPred(({ e }) => e.metaKey);
|
|
2649
2650
|
var fwdAlt = fwdIfCtxPred(({ e }) => e.altKey);
|
|
2650
|
-
var
|
|
2651
|
+
var MOD_WRAPPERS_FOR_ANY_EVENT = {
|
|
2652
|
+
ctrl: fwdCtrl,
|
|
2653
|
+
cmd: fwdCtrl,
|
|
2654
|
+
meta: fwdMeta,
|
|
2655
|
+
alt: fwdAlt
|
|
2656
|
+
};
|
|
2651
2657
|
var MOD_WRAPPERS_BY_EVENT = {
|
|
2652
2658
|
keydown: {
|
|
2653
2659
|
send: fwdIfKey("Enter"),
|
|
2654
|
-
cancel: fwdIfKey("Escape")
|
|
2655
|
-
|
|
2656
|
-
},
|
|
2657
|
-
click: { ...metaWraps }
|
|
2660
|
+
cancel: fwdIfKey("Escape")
|
|
2661
|
+
}
|
|
2658
2662
|
};
|
|
2663
|
+
var MOD_EFFECTS = {
|
|
2664
|
+
prevent: (e) => e.preventDefault?.(),
|
|
2665
|
+
stop: (e) => e.stopPropagation?.()
|
|
2666
|
+
};
|
|
2667
|
+
var NO_WRAPPERS = {};
|
|
2659
2668
|
var identityModifierWrapper = (f, _ctx) => f;
|
|
2660
2669
|
function compileModifiers(eventName, names) {
|
|
2661
2670
|
if (names.length === 0) return identityModifierWrapper;
|
|
2662
|
-
const wrappers = MOD_WRAPPERS_BY_EVENT[eventName] ??
|
|
2663
|
-
|
|
2671
|
+
const wrappers = MOD_WRAPPERS_BY_EVENT[eventName] ?? NO_WRAPPERS;
|
|
2672
|
+
const effects = [];
|
|
2664
2673
|
for (const name of names) {
|
|
2665
|
-
const
|
|
2674
|
+
const effect = MOD_EFFECTS[name];
|
|
2675
|
+
if (effect !== void 0) effects.push(effect);
|
|
2676
|
+
}
|
|
2677
|
+
let w = effects.length === 0 ? (that, f, args, _ctx) => f.apply(that, args) : (that, f, args, ctx) => {
|
|
2678
|
+
for (const effect of effects) effect(ctx.e);
|
|
2679
|
+
return f.apply(that, args);
|
|
2680
|
+
};
|
|
2681
|
+
for (const name of names) {
|
|
2682
|
+
const wrapper = wrappers[name] ?? MOD_WRAPPERS_FOR_ANY_EVENT[name];
|
|
2666
2683
|
if (wrapper !== void 0) w = wrapper(w);
|
|
2667
2684
|
}
|
|
2668
2685
|
return (f, ctx) => function(...args) {
|
|
@@ -5363,15 +5380,22 @@ function walkForRenderIt(lx, node, loopDepth) {
|
|
|
5363
5380
|
return;
|
|
5364
5381
|
}
|
|
5365
5382
|
}
|
|
5366
|
-
var
|
|
5383
|
+
var NO_WRAPPERS2 = {};
|
|
5384
|
+
var ANY_EVENT_MODIFIERS = [
|
|
5385
|
+
...Object.keys(MOD_WRAPPERS_FOR_ANY_EVENT),
|
|
5386
|
+
...Object.keys(MOD_EFFECTS)
|
|
5387
|
+
];
|
|
5367
5388
|
function checkEventModifiers(lx, view) {
|
|
5368
5389
|
for (const event of view.ctx.events) {
|
|
5369
5390
|
for (const handler of event.handlers) {
|
|
5370
5391
|
const { name, modifiers } = handler;
|
|
5371
|
-
const
|
|
5392
|
+
const known = [
|
|
5393
|
+
...Object.keys(MOD_WRAPPERS_BY_EVENT[name] ?? NO_WRAPPERS2),
|
|
5394
|
+
...ANY_EVENT_MODIFIERS
|
|
5395
|
+
];
|
|
5372
5396
|
for (const modifier of modifiers) {
|
|
5373
|
-
if (
|
|
5374
|
-
const close = closestName(modifier,
|
|
5397
|
+
if (!known.includes(modifier)) {
|
|
5398
|
+
const close = closestName(modifier, known);
|
|
5375
5399
|
lx.error(
|
|
5376
5400
|
UNKNOWN_EVENT_MODIFIER,
|
|
5377
5401
|
{
|
package/dist/tutuca-dev.js
CHANGED
|
@@ -10658,7 +10658,8 @@ function parseRenderEach(px, value, as, attrs) {
|
|
|
10658
10658
|
if (seqVal === null) return null;
|
|
10659
10659
|
const renderIt = px.addNode(RenderItNode, as);
|
|
10660
10660
|
const attrParser = getAttrParser(px);
|
|
10661
|
-
const eachAttr = attrParser.
|
|
10661
|
+
const eachAttr = attrParser.pushWrapper("each", value, seqVal);
|
|
10662
|
+
attrParser.eachAttr = eachAttr;
|
|
10662
10663
|
const when = attrs.getNamedItem("@when") ?? attrs.getNamedItem("when");
|
|
10663
10664
|
if (when) {
|
|
10664
10665
|
if (when.name.charCodeAt(0) !== 64) maybeDeprecateBareXDirective(px, "render-each", "when");
|
|
@@ -11001,22 +11002,38 @@ var fwdIfKey = (keyName) => fwdIfCtxPred((ctx) => ctx.e.key === keyName);
|
|
|
11001
11002
|
var fwdCtrl = fwdIfCtxPred(({ e }) => isMac && e.metaKey || e.ctrlKey);
|
|
11002
11003
|
var fwdMeta = fwdIfCtxPred(({ e }) => e.metaKey);
|
|
11003
11004
|
var fwdAlt = fwdIfCtxPred(({ e }) => e.altKey);
|
|
11004
|
-
var
|
|
11005
|
+
var MOD_WRAPPERS_FOR_ANY_EVENT = {
|
|
11006
|
+
ctrl: fwdCtrl,
|
|
11007
|
+
cmd: fwdCtrl,
|
|
11008
|
+
meta: fwdMeta,
|
|
11009
|
+
alt: fwdAlt
|
|
11010
|
+
};
|
|
11005
11011
|
var MOD_WRAPPERS_BY_EVENT = {
|
|
11006
11012
|
keydown: {
|
|
11007
11013
|
send: fwdIfKey("Enter"),
|
|
11008
|
-
cancel: fwdIfKey("Escape")
|
|
11009
|
-
|
|
11010
|
-
},
|
|
11011
|
-
click: { ...metaWraps }
|
|
11014
|
+
cancel: fwdIfKey("Escape")
|
|
11015
|
+
}
|
|
11012
11016
|
};
|
|
11017
|
+
var MOD_EFFECTS = {
|
|
11018
|
+
prevent: (e) => e.preventDefault?.(),
|
|
11019
|
+
stop: (e) => e.stopPropagation?.()
|
|
11020
|
+
};
|
|
11021
|
+
var NO_WRAPPERS = {};
|
|
11013
11022
|
var identityModifierWrapper = (f, _ctx) => f;
|
|
11014
11023
|
function compileModifiers(eventName, names) {
|
|
11015
11024
|
if (names.length === 0) return identityModifierWrapper;
|
|
11016
|
-
const wrappers = MOD_WRAPPERS_BY_EVENT[eventName] ??
|
|
11017
|
-
|
|
11025
|
+
const wrappers = MOD_WRAPPERS_BY_EVENT[eventName] ?? NO_WRAPPERS;
|
|
11026
|
+
const effects = [];
|
|
11018
11027
|
for (const name of names) {
|
|
11019
|
-
const
|
|
11028
|
+
const effect = MOD_EFFECTS[name];
|
|
11029
|
+
if (effect !== void 0) effects.push(effect);
|
|
11030
|
+
}
|
|
11031
|
+
let w = effects.length === 0 ? (that, f, args, _ctx) => f.apply(that, args) : (that, f, args, ctx) => {
|
|
11032
|
+
for (const effect of effects) effect(ctx.e);
|
|
11033
|
+
return f.apply(that, args);
|
|
11034
|
+
};
|
|
11035
|
+
for (const name of names) {
|
|
11036
|
+
const wrapper = wrappers[name] ?? MOD_WRAPPERS_FOR_ANY_EVENT[name];
|
|
11020
11037
|
if (wrapper !== void 0) w = wrapper(w);
|
|
11021
11038
|
}
|
|
11022
11039
|
return (f, ctx) => function(...args) {
|
|
@@ -13717,15 +13734,22 @@ function walkForRenderIt(lx, node, loopDepth) {
|
|
|
13717
13734
|
return;
|
|
13718
13735
|
}
|
|
13719
13736
|
}
|
|
13720
|
-
var
|
|
13737
|
+
var NO_WRAPPERS2 = {};
|
|
13738
|
+
var ANY_EVENT_MODIFIERS = [
|
|
13739
|
+
...Object.keys(MOD_WRAPPERS_FOR_ANY_EVENT),
|
|
13740
|
+
...Object.keys(MOD_EFFECTS)
|
|
13741
|
+
];
|
|
13721
13742
|
function checkEventModifiers(lx, view) {
|
|
13722
13743
|
for (const event of view.ctx.events) {
|
|
13723
13744
|
for (const handler of event.handlers) {
|
|
13724
13745
|
const { name, modifiers } = handler;
|
|
13725
|
-
const
|
|
13746
|
+
const known = [
|
|
13747
|
+
...Object.keys(MOD_WRAPPERS_BY_EVENT[name] ?? NO_WRAPPERS2),
|
|
13748
|
+
...ANY_EVENT_MODIFIERS
|
|
13749
|
+
];
|
|
13726
13750
|
for (const modifier of modifiers) {
|
|
13727
|
-
if (
|
|
13728
|
-
const close = closestName(modifier,
|
|
13751
|
+
if (!known.includes(modifier)) {
|
|
13752
|
+
const close = closestName(modifier, known);
|
|
13729
13753
|
lx.error(
|
|
13730
13754
|
UNKNOWN_EVENT_MODIFIER,
|
|
13731
13755
|
{
|