@livetemplate/client 0.8.10 → 0.8.13

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.
Files changed (49) hide show
  1. package/dist/dom/directives.d.ts +17 -5
  2. package/dist/dom/directives.d.ts.map +1 -1
  3. package/dist/dom/directives.js +161 -17
  4. package/dist/dom/directives.js.map +1 -1
  5. package/dist/dom/event-delegation.d.ts +5 -3
  6. package/dist/dom/event-delegation.d.ts.map +1 -1
  7. package/dist/dom/event-delegation.js +62 -177
  8. package/dist/dom/event-delegation.js.map +1 -1
  9. package/dist/dom/link-interceptor.js +1 -1
  10. package/dist/dom/link-interceptor.js.map +1 -1
  11. package/dist/dom/reactive-attributes.d.ts +15 -20
  12. package/dist/dom/reactive-attributes.d.ts.map +1 -1
  13. package/dist/dom/reactive-attributes.js +78 -81
  14. package/dist/dom/reactive-attributes.js.map +1 -1
  15. package/dist/livetemplate-client.browser.js +4 -4
  16. package/dist/livetemplate-client.browser.js.map +4 -4
  17. package/dist/livetemplate-client.d.ts +0 -2
  18. package/dist/livetemplate-client.d.ts.map +1 -1
  19. package/dist/livetemplate-client.js +7 -12
  20. package/dist/livetemplate-client.js.map +1 -1
  21. package/dist/state/form-lifecycle-manager.d.ts +1 -3
  22. package/dist/state/form-lifecycle-manager.d.ts.map +1 -1
  23. package/dist/state/form-lifecycle-manager.js +6 -6
  24. package/dist/state/form-lifecycle-manager.js.map +1 -1
  25. package/dist/tests/directives.test.js +33 -33
  26. package/dist/tests/directives.test.js.map +1 -1
  27. package/dist/tests/event-delegation.test.js +7 -9
  28. package/dist/tests/event-delegation.test.js.map +1 -1
  29. package/dist/tests/form-lifecycle-manager.test.js +27 -28
  30. package/dist/tests/form-lifecycle-manager.test.js.map +1 -1
  31. package/dist/tests/reactive-attributes.test.js +60 -84
  32. package/dist/tests/reactive-attributes.test.js.map +1 -1
  33. package/dist/utils/lvt-selector.d.ts +3 -0
  34. package/dist/utils/lvt-selector.d.ts.map +1 -0
  35. package/dist/utils/lvt-selector.js +13 -0
  36. package/dist/utils/lvt-selector.js.map +1 -0
  37. package/package.json +1 -1
  38. package/dist/dom/modal-manager.d.ts +0 -11
  39. package/dist/dom/modal-manager.d.ts.map +0 -1
  40. package/dist/dom/modal-manager.js +0 -62
  41. package/dist/dom/modal-manager.js.map +0 -1
  42. package/dist/tests/modal-manager.test.d.ts +0 -2
  43. package/dist/tests/modal-manager.test.d.ts.map +0 -1
  44. package/dist/tests/modal-manager.test.js +0 -80
  45. package/dist/tests/modal-manager.test.js.map +0 -1
  46. package/dist/utils/confirm.d.ts +0 -12
  47. package/dist/utils/confirm.d.ts.map +0 -1
  48. package/dist/utils/confirm.js +0 -35
  49. package/dist/utils/confirm.js.map +0 -1
@@ -2,22 +2,23 @@
2
2
  /**
3
3
  * Reactive Attributes - Declarative DOM actions triggered by LiveTemplate lifecycle events.
4
4
  *
5
- * Attribute Pattern: lvt-{action}-on:{event}="param"
5
+ * Attribute Pattern: lvt-el:{method}:on:[{action}:]{state|interaction}="param"
6
6
  *
7
- * Events:
7
+ * States (lifecycle):
8
8
  * - pending: Action started, waiting for server response
9
9
  * - success: Action completed successfully
10
10
  * - error: Action completed with validation errors
11
11
  * - done: Action completed (regardless of success/error)
12
12
  *
13
- * Event Scope:
14
- * - Global: lvt-reset-on:success (any action)
15
- * - Action-specific: lvt-reset-on:create-todo:success (specific action only)
13
+ * Interactions:
14
+ * - click-away: Click outside the element (handled by setupClickAwayDelegation)
16
15
  *
17
- * Actions:
16
+ * Trigger Scope:
17
+ * - Unscoped: lvt-el:reset:on:success (any action)
18
+ * - Action-scoped: lvt-el:reset:on:create-todo:success (specific action only)
19
+ *
20
+ * Methods:
18
21
  * - reset: Calls form.reset()
19
- * - disable: Sets element.disabled = true
20
- * - enable: Sets element.disabled = false
21
22
  * - addClass: Adds CSS class(es)
22
23
  * - removeClass: Removes CSS class(es)
23
24
  * - toggleClass: Toggles CSS class(es)
@@ -31,21 +32,10 @@ exports.matchesEvent = matchesEvent;
31
32
  exports.processReactiveAttributes = processReactiveAttributes;
32
33
  exports.setupReactiveAttributeListeners = setupReactiveAttributeListeners;
33
34
  const LIFECYCLE_EVENTS = ["pending", "success", "error", "done"];
34
- const REACTIVE_ACTIONS = [
35
- "reset",
36
- "disable",
37
- "enable",
38
- "addClass",
39
- "removeClass",
40
- "toggleClass",
41
- "setAttr",
42
- "toggleAttr",
43
- ];
44
- // Lowercase versions for case-insensitive matching (HTML attributes are lowercased)
45
- const ACTION_MAP = {
35
+ const LIFECYCLE_SET = new Set(LIFECYCLE_EVENTS);
36
+ // Lowercase method names → canonical ReactiveAction
37
+ const METHOD_MAP = {
46
38
  reset: "reset",
47
- disable: "disable",
48
- enable: "enable",
49
39
  addclass: "addClass",
50
40
  removeclass: "removeClass",
51
41
  toggleclass: "toggleClass",
@@ -55,37 +45,40 @@ const ACTION_MAP = {
55
45
  /**
56
46
  * Parse a reactive attribute name and value into a binding.
57
47
  *
48
+ * Supported pattern: lvt-el:{method}:on:[{action}:]{state}
49
+ *
58
50
  * Examples:
59
- * parseReactiveAttribute("lvt-reset-on:success", "") => { action: "reset", lifecycle: "success" }
60
- * parseReactiveAttribute("lvt-addClass-on:pending", "loading") => { action: "addClass", lifecycle: "pending", param: "loading" }
61
- * parseReactiveAttribute("lvt-reset-on:create-todo:success", "") => { action: "reset", lifecycle: "success", actionName: "create-todo" }
51
+ * parseReactiveAttribute("lvt-el:reset:on:success", "") => { action: "reset", lifecycle: "success" }
52
+ * parseReactiveAttribute("lvt-el:addclass:on:pending", "loading") => { action: "addClass", lifecycle: "pending", param: "loading" }
53
+ * parseReactiveAttribute("lvt-el:reset:on:create-todo:success", "") => { action: "reset", lifecycle: "success", actionName: "create-todo" }
62
54
  */
63
55
  function parseReactiveAttribute(attrName, attrValue) {
64
- // Pattern: lvt-{action}-on:{actionName?}:{lifecycle}
65
- // The lifecycle must be at the end, action name is optional in the middle
66
- // Note: HTML attributes are lowercased by browsers, so we match case-insensitively
67
- const match = attrName.toLowerCase().match(/^lvt-(\w+)-on:(.+)$/);
68
- if (!match)
69
- return null;
70
- const actionKey = match[1];
71
- const action = ACTION_MAP[actionKey];
72
- if (!action)
73
- return null;
74
- const eventPart = match[2];
75
- // Check if the last segment is a lifecycle event
76
- // Format: "{actionName}:{lifecycle}" or just "{lifecycle}"
77
- const segments = eventPart.split(":");
78
- const lastSegment = segments[segments.length - 1];
79
- if (!LIFECYCLE_EVENTS.includes(lastSegment))
80
- return null;
81
- const lifecycle = lastSegment;
82
- const actionName = segments.length > 1 ? segments.slice(0, -1).join(":") : undefined;
83
- return {
84
- action,
85
- lifecycle,
86
- actionName: actionName || undefined,
87
- param: attrValue || undefined,
88
- };
56
+ const lower = attrName.toLowerCase();
57
+ // New pattern: lvt-el:{method}:on:[{action}:]{state}
58
+ const newMatch = lower.match(/^lvt-el:(\w+):on:(.+)$/);
59
+ if (newMatch) {
60
+ const methodKey = newMatch[1];
61
+ const action = METHOD_MAP[methodKey];
62
+ if (!action)
63
+ return null;
64
+ const eventPart = newMatch[2];
65
+ // Skip interaction triggers (click-away) — handled by click-away delegation
66
+ if (eventPart === "click-away")
67
+ return null;
68
+ const segments = eventPart.split(":");
69
+ const lastSegment = segments[segments.length - 1];
70
+ if (!LIFECYCLE_SET.has(lastSegment))
71
+ return null;
72
+ const lifecycle = lastSegment;
73
+ const actionName = segments.length > 1 ? segments.slice(0, -1).join(":") : undefined;
74
+ return {
75
+ action,
76
+ lifecycle,
77
+ actionName: actionName || undefined,
78
+ param: attrValue || undefined,
79
+ };
80
+ }
81
+ return null;
89
82
  }
90
83
  /**
91
84
  * Execute a reactive action on an element.
@@ -97,16 +90,6 @@ function executeAction(element, action, param) {
97
90
  element.reset();
98
91
  }
99
92
  break;
100
- case "disable":
101
- if ("disabled" in element) {
102
- element.disabled = true;
103
- }
104
- break;
105
- case "enable":
106
- if ("disabled" in element) {
107
- element.disabled = false;
108
- }
109
- break;
110
93
  case "addClass":
111
94
  if (param) {
112
95
  const classes = param.split(/\s+/).filter(Boolean);
@@ -144,36 +127,53 @@ function executeAction(element, action, param) {
144
127
  }
145
128
  /**
146
129
  * Check if an event matches a binding.
147
- *
148
- * @param binding The reactive binding to check
149
- * @param lifecycle The lifecycle event that fired
150
- * @param actionName The action name that triggered the event (optional)
151
130
  */
152
131
  function matchesEvent(binding, lifecycle, actionName) {
153
- // Lifecycle must match
154
132
  if (binding.lifecycle !== lifecycle)
155
133
  return false;
156
- // If binding has no actionName, it's global (matches any action)
157
134
  if (!binding.actionName)
158
135
  return true;
159
- // If binding has actionName, it must match the fired action
160
136
  return binding.actionName === actionName;
161
137
  }
162
138
  /**
163
139
  * Process all reactive attributes for a lifecycle event.
164
- *
165
- * Instead of building complex selectors, we iterate all elements with any lvt-*-on:* attribute
166
- * and check each one against the fired event.
167
140
  */
168
141
  function processReactiveAttributes(lifecycle, actionName) {
169
- // Find all elements that might have reactive attributes
170
- // This is a broad selector but avoids escaping issues with attribute names containing colons
171
- const allElements = document.querySelectorAll("*");
172
- allElements.forEach((element) => {
173
- // Check all attributes on this element for reactive bindings
142
+ // Target only elements with lvt-el: attributes instead of scanning all DOM elements.
143
+ // CSS doesn't support attribute-name-starts-with, so we build selectors from known
144
+ // method prefixes. This covers both unscoped (lvt-el:reset:on:success) and
145
+ // action-scoped (lvt-el:reset:on:create-todo:success) patterns.
146
+ const methodKeys = Object.keys(METHOD_MAP);
147
+ const selectorParts = [];
148
+ // Escape CSS-special characters in actionName for use in attribute selectors
149
+ const escapedAction = actionName
150
+ ? actionName.replace(/([^\w-])/g, "\\$1")
151
+ : undefined;
152
+ for (const m of methodKeys) {
153
+ selectorParts.push(`[lvt-el\\:${m}\\:on\\:${lifecycle}]`);
154
+ if (escapedAction) {
155
+ selectorParts.push(`[lvt-el\\:${m}\\:on\\:${escapedAction}\\:${lifecycle}]`);
156
+ }
157
+ }
158
+ const selector = selectorParts.join(", ");
159
+ let candidates;
160
+ try {
161
+ candidates = document.querySelectorAll(selector);
162
+ }
163
+ catch {
164
+ // If selector is still invalid despite escaping, scan targeted elements only
165
+ // by matching unscoped patterns (without actionName)
166
+ const fallbackParts = methodKeys.map(m => `[lvt-el\\:${m}\\:on\\:${lifecycle}]`);
167
+ try {
168
+ candidates = document.querySelectorAll(fallbackParts.join(", "));
169
+ }
170
+ catch {
171
+ return; // Cannot construct any valid selector
172
+ }
173
+ }
174
+ candidates.forEach((element) => {
174
175
  Array.from(element.attributes).forEach((attr) => {
175
- // Quick filter: only process lvt-*-on: attributes
176
- if (!attr.name.startsWith("lvt-") || !attr.name.includes("-on:")) {
176
+ if (!attr.name.startsWith("lvt-el:") || !attr.name.includes(":on:")) {
177
177
  return;
178
178
  }
179
179
  const binding = parseReactiveAttribute(attr.name, attr.value);
@@ -185,17 +185,14 @@ function processReactiveAttributes(lifecycle, actionName) {
185
185
  }
186
186
  /**
187
187
  * Set up document-level event listeners for reactive attributes.
188
- * This should be called once during client initialization.
189
188
  */
190
189
  function setupReactiveAttributeListeners() {
191
190
  LIFECYCLE_EVENTS.forEach((lifecycle) => {
192
- // Listen in capture phase to process before event bubbles
193
191
  document.addEventListener(`lvt:${lifecycle}`, (e) => {
194
192
  const customEvent = e;
195
193
  const actionName = customEvent.detail?.action;
196
194
  processReactiveAttributes(lifecycle, actionName);
197
- }, true // capture phase
198
- );
195
+ }, true);
199
196
  });
200
197
  }
201
198
  //# sourceMappingURL=reactive-attributes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactive-attributes.js","sourceRoot":"","sources":["../../dom/reactive-attributes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reactive-attributes.js","sourceRoot":"","sources":["../../dom/reactive-attributes.ts"],"names":[],"mappings":"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"}