Update jqhtml packages to latest versions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-12-23 07:45:41 +00:00
parent 3ce82a924a
commit 2899ae826b
87 changed files with 428 additions and 178 deletions

0
node_modules/@jqhtml/core/dist/boot.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/boot.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/component-registry.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/component-registry.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/component.d.ts generated vendored Normal file → Executable file
View File

2
node_modules/@jqhtml/core/dist/component.d.ts.map generated vendored Normal file → Executable file
View File

@@ -1 +1 @@
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,CAAC,EAAE;YACb,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;YACjF,UAAU,EAAE,MAAM,IAAI,CAAC;SACxB,CAAC;KACH;CACF;AAED,qBAAa,gBAAgB;IAE3B,MAAM,CAAC,kBAAkB,UAAQ;IACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAGtB,CAAC,EAAE,GAAG,CAAC;IACP,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAK;IAGzB,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,oBAAoB,CAAwE;IACpG,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,uBAAuB,CAAoC;IACnE,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAChD,OAAO,CAAC,yBAAyB,CAAwB;IACzD,OAAO,CAAC,sBAAsB,CAAkB;IAGhD,OAAO,CAAC,UAAU,CAAuB;IAGzC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,8BAA8B,CAAkB;IACxD,OAAO,CAAC,WAAW,CAAkB;IAGrC,OAAO,CAAC,mBAAmB,CAAkB;IAG7C,OAAO,CAAC,oBAAoB,CAAkB;IAI9C,OAAO,CAAC,sBAAsB,CAAkB;IAIhD,OAAO,CAAC,WAAW,CAAkB;IAIrC,OAAO,CAAC,aAAa,CAAkB;IAIvC,OAAO,CAAC,WAAW,CAAoC;IAKvD,OAAO,CAAC,oBAAoB,CAAkB;gBAElC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IA2JzD;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IAmClC;;;;;;OAMG;YACW,eAAe;IAO7B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM;IAgUzC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI;IA+CtC;;;OAGG;IACH,MAAM,CAAC,EAAE,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI;IAItC;;;OAGG;IACH,MAAM,IAAI,IAAI;IAwJd;;;;;;;;;;OAUG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyI5B;;;;;;;;;;;;;OAaG;YACW,yBAAyB;IAkKvC;;;;;;;;;OASG;YACW,kBAAkB;IAmFhC;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuD7B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9C;;;;OAIG;YACW,wBAAwB;IAqCtC;;;;;;;;;;OAUG;YACW,4BAA4B;IAqC1C;;;;;;;;OAQG;IACG,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpD;;;;;;;;OAQG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuK9B;;;;OAIG;IACH;;;;OAIG;IACH,KAAK,IAAI,IAAI;IA+Cb;;;OAGG;IACH,IAAI,IAAI,IAAI;IAkBZ,SAAS,IAAI,IAAI;IACjB,SAAS,IAAI,IAAI;IACjB,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/B,OAAO,IAAI,IAAI;IAEf;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,MAAM;IAEnB;;;;OAIG;IACH;;;OAGG;IACH,gBAAgB,IAAI,OAAO;IAmC3B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;;;;;;OAUG;IACH,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAuBzF;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAiB7C;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAK3C;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAgB3B;;;;;;;;;;;;;;;OAeG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAgB9C;;;OAGG;IACH,YAAY,IAAI,gBAAgB,GAAG,IAAI;IAIvC;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAa1C;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAoBlD;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,MAAM,EAAE;IA0CtC,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,yBAAyB;IAuHjC,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,gBAAgB;IAcxB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,UAAU;IAUlB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,0BAA0B;CAqEnC"}

0
node_modules/@jqhtml/core/dist/debug-entry.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/debug-entry.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/debug.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/debug.d.ts.map generated vendored Normal file → Executable file
View File

View File

@@ -1306,21 +1306,29 @@ class Load_Coordinator {
}
/**
* Register a leader component that will execute on_load()
* Creates coordination entry and returns a function to call when on_load() completes
* Creates coordination entry and returns a function to call when data is ready
*
* @returns A function that accepts the final data and completes coordination
*/
static register_leader(component, on_load_promise) {
const { key } = this.generate_invocation_key(component.component_name(), component.args);
// Create a promise that we control - it resolves when complete_coordination is called
let resolve_promise;
const coordination_promise = new Promise((resolve) => {
resolve_promise = resolve;
});
const entry = {
status: 'loading',
promise: on_load_promise,
promise: coordination_promise, // Followers await THIS promise, not on_load_promise
resolve_promise,
leader_component: component,
leader_data: null,
leader_error: null,
waiting: []
};
this._registry.set(key, entry);
// Return cleanup function to be called after on_load() completes
return () => this._complete_coordination(key, component);
// Return cleanup function that accepts the final data
return (final_data) => this._complete_coordination(key, component, final_data);
}
/**
* Get the coordination promise for a follower component
@@ -1336,39 +1344,68 @@ class Load_Coordinator {
}
/**
* Complete coordination after leader's on_load() finishes
* Distributes data to all waiting followers and cleans up entry
* Stores leader's data, marks entry as completed, and resolves the promise.
* Followers retrieve the data themselves via get_leader_data().
*
* @param key - The coordination key
* @param leader - The leader component
* @param final_data - The final data after on_load and normalization
* @private
*/
static _complete_coordination(key, leader) {
static _complete_coordination(key, leader, final_data) {
const entry = this._registry.get(key);
if (!entry) {
return;
}
// Capture leader's final state
entry.leader_data = leader.data;
// Store the final data (already normalized by _apply_load_result)
// Deep clone to avoid sharing proxy objects between components
try {
entry.leader_data = JSON.parse(JSON.stringify(final_data));
}
catch (error) {
// If data can't be serialized, use direct reference (may have issues)
entry.leader_data = final_data;
}
entry.status = 'completed';
// Distribute data to all waiting followers
for (const follower of entry.waiting) {
try {
// Copy leader's data to follower
follower.data = entry.leader_data;
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Follower ${follower._cid} received data from leader ${leader._cid}`, { key, data: entry.leader_data });
}
}
catch (error) {
console.error(`[Load Coordinator] Failed to distribute data to follower ${follower._cid}:`, error);
}
}
// Clear coordination entry immediately (no caching)
this._registry.delete(key);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Coordination complete for key: ${key}`, {
leader_cid: leader._cid,
followers_count: entry.waiting.length,
registry_size: this._registry.size
});
console.log(`[Load Coordinator] Leader ${leader._cid} completed, data available for ${entry.waiting.length} followers`, { key, data: entry.leader_data });
}
// Resolve the promise - followers waiting on it will now wake up
entry.resolve_promise();
// Note: We do NOT delete the entry here anymore.
// Followers need to retrieve the data after the promise resolves.
// Entry will be cleaned up when last follower retrieves data.
}
/**
* Get leader's data for a follower component
* Called by follower after coordination promise resolves
* Returns the data and cleans up if this is the last follower
*/
static get_leader_data(component) {
const { key } = this.generate_invocation_key(component.component_name(), component.args);
if (!key) {
return null;
}
const entry = this._registry.get(key);
if (!entry || entry.status !== 'completed') {
return null;
}
// Remove this follower from the waiting list
const follower_index = entry.waiting.indexOf(component);
if (follower_index !== -1) {
entry.waiting.splice(follower_index, 1);
}
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Follower ${component._cid} retrieving data from leader ${entry.leader_component._cid}`, { key, remaining_followers: entry.waiting.length });
}
// If this was the last follower, clean up the entry
if (entry.waiting.length === 0) {
this._registry.delete(key);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Coordination complete for key: ${key}`, { registry_size: this._registry.size });
}
}
return entry.leader_data;
}
/**
* Handle leader on_load() error
@@ -2860,7 +2897,7 @@ class Jqhtml_Component {
console.log(`[Cache] Component ${this._cid} (${this.component_name()}) has non-serializable args - load deduplication and caching disabled`, { uncacheable_property });
}
// Execute on_load on detached proxy without deduplication
const result_data = await this._execute_on_load_detached();
const { data: result_data } = await this._execute_on_load_detached();
// Apply result via sequential queue
await this._apply_load_result(result_data, null);
return;
@@ -2879,9 +2916,17 @@ class Jqhtml_Component {
try {
// Wait for leader to complete
await coordination_promise;
// Data has already been copied by coordinator
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Deduplication] Component ${this._cid} received data from leader`, { data: this.data });
// Retrieve leader's data from coordinator
const leader_data = Load_Coordinator.get_leader_data(this);
if (leader_data !== null) {
// Apply leader's data using the same method as leader
// This properly handles freeze/unfreeze and normalization
await this._apply_load_result(leader_data, data_before_load);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Deduplication] Component ${this._cid} applied data from leader`, { data: this.data });
}
// _apply_load_result already sets ready_state and triggers 'load'
return;
}
}
catch (error) {
@@ -2890,6 +2935,7 @@ class Jqhtml_Component {
throw error;
}
}
// Fallback: if we couldn't get leader data, just mark as complete
this._ready_state = 2;
this._update_debug_attrs();
this._log_lifecycle('load', 'complete (follower)');
@@ -2901,9 +2947,14 @@ class Jqhtml_Component {
console.log(`[Load Deduplication] Component ${this._cid} (${this.component_name()}) is the leader`, { args: this.args });
}
// Execute on_load on detached proxy with Load_Coordinator registration
const result_data = await this._execute_on_load_detached(true);
const { data: result_data, complete_coordination } = await this._execute_on_load_detached(true);
// Apply result via sequential queue
await this._apply_load_result(result_data, data_before_load);
// Complete coordination AFTER this.data is updated
// This ensures followers receive the correct final data
if (complete_coordination) {
complete_coordination(this.data);
}
}
/**
* Execute on_load() on a fully detached proxy.
@@ -3029,24 +3080,21 @@ class Jqhtml_Component {
}
})();
// If using Load_Coordinator, register as leader
// Note: We store the completion function but DON'T call it here
// It will be called by _load() after _apply_load_result() updates this.data
let complete_coordination = null;
if (use_load_coordinator) {
complete_coordination = Load_Coordinator.register_leader(this, on_load_promise);
}
try {
await on_load_promise;
}
finally {
// Complete coordination if we registered
if (complete_coordination) {
complete_coordination();
}
}
await on_load_promise;
// Note: We don't validate args changes here because external code (like parent
// components calling reload()) is allowed to modify component.args during on_load().
// The read-only proxy only prevents code INSIDE on_load() from modifying args.
// Return the data from the detached context
return detached_context.data;
// Return the data from the detached context AND the completion function
return {
data: detached_context.data,
complete_coordination
};
}
/**
* Apply the result of on_load() to this.data via the sequential queue.
@@ -3463,7 +3511,7 @@ class Jqhtml_Component {
// STEP 2: Call on_load() on detached proxy
// This uses the same detached execution as _load() - on_load runs isolated
// and result is applied via sequential queue
const result_data = await this._execute_on_load_detached(false); // false = don't use Load_Coordinator
const { data: result_data } = await this._execute_on_load_detached(false); // false = don't use Load_Coordinator
// Apply result via sequential queue
// This handles normalization, caching, and setting _is_dynamic
await this._apply_load_result(result_data, data_before_load);
@@ -4825,6 +4873,37 @@ function init_jquery_plugin(jQuery) {
originalText.call(jQuery(this), value);
});
};
// Store original jQuery.fn.on
const originalOn = jQuery.fn.on;
/**
* Override jQuery.fn.on() to warn when attaching events to component root elements
*
* JQHTML components have their own .on() method for lifecycle events.
* Attaching jQuery events to a component's root element usually indicates
* the developer meant to use component.on() instead.
*
* To suppress the warning, pass 'intentional' as any argument.
*/
jQuery.fn.on = function (...args) {
// Check if 'intentional' flag is present in any argument
const intentional = args.some(arg => arg === 'intentional');
// Filter out 'intentional' from args before passing to original .on()
const cleanArgs = intentional ? args.filter(arg => arg !== 'intentional') : args;
// Check first element for Component class and warn if needed
if (!intentional && this.length > 0) {
const firstEl = this.first();
if (firstEl.hasClass('Component')) {
const component = firstEl.data('_component');
const componentName = component?.component_name?.() || 'Component';
console.warn(`[JQHTML] jQuery .on('${cleanArgs[0]}') called on <${componentName}> root element.\n` +
`You may have meant to use component.on() for lifecycle events, or attach to a child element.\n` +
`If attaching jQuery events to the component root is intentional, pass 'intentional' as an argument:\n` +
` $(element).on('${cleanArgs[0]}', 'intentional', handler)`);
}
}
// Call original .on() with cleaned arguments and return result
return originalOn.apply(this, cleanArgs);
};
}
// Try to auto-initialize if global jQuery exists
if (typeof window !== 'undefined' && window.jQuery) {
@@ -4852,7 +4931,7 @@ function init(jQuery) {
}
}
// Version - will be replaced during build with actual version from package.json
const version = '2.3.26';
const version = '2.3.27';
// Default export with all functionality
const jqhtml = {
// Core

2
node_modules/@jqhtml/core/dist/index.cjs.map generated vendored Normal file → Executable file

File diff suppressed because one or more lines are too long

0
node_modules/@jqhtml/core/dist/index.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/index.d.ts.map generated vendored Normal file → Executable file
View File

171
node_modules/@jqhtml/core/dist/index.js generated vendored Normal file → Executable file
View File

@@ -1302,21 +1302,29 @@ class Load_Coordinator {
}
/**
* Register a leader component that will execute on_load()
* Creates coordination entry and returns a function to call when on_load() completes
* Creates coordination entry and returns a function to call when data is ready
*
* @returns A function that accepts the final data and completes coordination
*/
static register_leader(component, on_load_promise) {
const { key } = this.generate_invocation_key(component.component_name(), component.args);
// Create a promise that we control - it resolves when complete_coordination is called
let resolve_promise;
const coordination_promise = new Promise((resolve) => {
resolve_promise = resolve;
});
const entry = {
status: 'loading',
promise: on_load_promise,
promise: coordination_promise, // Followers await THIS promise, not on_load_promise
resolve_promise,
leader_component: component,
leader_data: null,
leader_error: null,
waiting: []
};
this._registry.set(key, entry);
// Return cleanup function to be called after on_load() completes
return () => this._complete_coordination(key, component);
// Return cleanup function that accepts the final data
return (final_data) => this._complete_coordination(key, component, final_data);
}
/**
* Get the coordination promise for a follower component
@@ -1332,39 +1340,68 @@ class Load_Coordinator {
}
/**
* Complete coordination after leader's on_load() finishes
* Distributes data to all waiting followers and cleans up entry
* Stores leader's data, marks entry as completed, and resolves the promise.
* Followers retrieve the data themselves via get_leader_data().
*
* @param key - The coordination key
* @param leader - The leader component
* @param final_data - The final data after on_load and normalization
* @private
*/
static _complete_coordination(key, leader) {
static _complete_coordination(key, leader, final_data) {
const entry = this._registry.get(key);
if (!entry) {
return;
}
// Capture leader's final state
entry.leader_data = leader.data;
// Store the final data (already normalized by _apply_load_result)
// Deep clone to avoid sharing proxy objects between components
try {
entry.leader_data = JSON.parse(JSON.stringify(final_data));
}
catch (error) {
// If data can't be serialized, use direct reference (may have issues)
entry.leader_data = final_data;
}
entry.status = 'completed';
// Distribute data to all waiting followers
for (const follower of entry.waiting) {
try {
// Copy leader's data to follower
follower.data = entry.leader_data;
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Follower ${follower._cid} received data from leader ${leader._cid}`, { key, data: entry.leader_data });
}
}
catch (error) {
console.error(`[Load Coordinator] Failed to distribute data to follower ${follower._cid}:`, error);
}
}
// Clear coordination entry immediately (no caching)
this._registry.delete(key);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Coordination complete for key: ${key}`, {
leader_cid: leader._cid,
followers_count: entry.waiting.length,
registry_size: this._registry.size
});
console.log(`[Load Coordinator] Leader ${leader._cid} completed, data available for ${entry.waiting.length} followers`, { key, data: entry.leader_data });
}
// Resolve the promise - followers waiting on it will now wake up
entry.resolve_promise();
// Note: We do NOT delete the entry here anymore.
// Followers need to retrieve the data after the promise resolves.
// Entry will be cleaned up when last follower retrieves data.
}
/**
* Get leader's data for a follower component
* Called by follower after coordination promise resolves
* Returns the data and cleans up if this is the last follower
*/
static get_leader_data(component) {
const { key } = this.generate_invocation_key(component.component_name(), component.args);
if (!key) {
return null;
}
const entry = this._registry.get(key);
if (!entry || entry.status !== 'completed') {
return null;
}
// Remove this follower from the waiting list
const follower_index = entry.waiting.indexOf(component);
if (follower_index !== -1) {
entry.waiting.splice(follower_index, 1);
}
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Follower ${component._cid} retrieving data from leader ${entry.leader_component._cid}`, { key, remaining_followers: entry.waiting.length });
}
// If this was the last follower, clean up the entry
if (entry.waiting.length === 0) {
this._registry.delete(key);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Coordination complete for key: ${key}`, { registry_size: this._registry.size });
}
}
return entry.leader_data;
}
/**
* Handle leader on_load() error
@@ -2856,7 +2893,7 @@ class Jqhtml_Component {
console.log(`[Cache] Component ${this._cid} (${this.component_name()}) has non-serializable args - load deduplication and caching disabled`, { uncacheable_property });
}
// Execute on_load on detached proxy without deduplication
const result_data = await this._execute_on_load_detached();
const { data: result_data } = await this._execute_on_load_detached();
// Apply result via sequential queue
await this._apply_load_result(result_data, null);
return;
@@ -2875,9 +2912,17 @@ class Jqhtml_Component {
try {
// Wait for leader to complete
await coordination_promise;
// Data has already been copied by coordinator
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Deduplication] Component ${this._cid} received data from leader`, { data: this.data });
// Retrieve leader's data from coordinator
const leader_data = Load_Coordinator.get_leader_data(this);
if (leader_data !== null) {
// Apply leader's data using the same method as leader
// This properly handles freeze/unfreeze and normalization
await this._apply_load_result(leader_data, data_before_load);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Deduplication] Component ${this._cid} applied data from leader`, { data: this.data });
}
// _apply_load_result already sets ready_state and triggers 'load'
return;
}
}
catch (error) {
@@ -2886,6 +2931,7 @@ class Jqhtml_Component {
throw error;
}
}
// Fallback: if we couldn't get leader data, just mark as complete
this._ready_state = 2;
this._update_debug_attrs();
this._log_lifecycle('load', 'complete (follower)');
@@ -2897,9 +2943,14 @@ class Jqhtml_Component {
console.log(`[Load Deduplication] Component ${this._cid} (${this.component_name()}) is the leader`, { args: this.args });
}
// Execute on_load on detached proxy with Load_Coordinator registration
const result_data = await this._execute_on_load_detached(true);
const { data: result_data, complete_coordination } = await this._execute_on_load_detached(true);
// Apply result via sequential queue
await this._apply_load_result(result_data, data_before_load);
// Complete coordination AFTER this.data is updated
// This ensures followers receive the correct final data
if (complete_coordination) {
complete_coordination(this.data);
}
}
/**
* Execute on_load() on a fully detached proxy.
@@ -3025,24 +3076,21 @@ class Jqhtml_Component {
}
})();
// If using Load_Coordinator, register as leader
// Note: We store the completion function but DON'T call it here
// It will be called by _load() after _apply_load_result() updates this.data
let complete_coordination = null;
if (use_load_coordinator) {
complete_coordination = Load_Coordinator.register_leader(this, on_load_promise);
}
try {
await on_load_promise;
}
finally {
// Complete coordination if we registered
if (complete_coordination) {
complete_coordination();
}
}
await on_load_promise;
// Note: We don't validate args changes here because external code (like parent
// components calling reload()) is allowed to modify component.args during on_load().
// The read-only proxy only prevents code INSIDE on_load() from modifying args.
// Return the data from the detached context
return detached_context.data;
// Return the data from the detached context AND the completion function
return {
data: detached_context.data,
complete_coordination
};
}
/**
* Apply the result of on_load() to this.data via the sequential queue.
@@ -3459,7 +3507,7 @@ class Jqhtml_Component {
// STEP 2: Call on_load() on detached proxy
// This uses the same detached execution as _load() - on_load runs isolated
// and result is applied via sequential queue
const result_data = await this._execute_on_load_detached(false); // false = don't use Load_Coordinator
const { data: result_data } = await this._execute_on_load_detached(false); // false = don't use Load_Coordinator
// Apply result via sequential queue
// This handles normalization, caching, and setting _is_dynamic
await this._apply_load_result(result_data, data_before_load);
@@ -4821,6 +4869,37 @@ function init_jquery_plugin(jQuery) {
originalText.call(jQuery(this), value);
});
};
// Store original jQuery.fn.on
const originalOn = jQuery.fn.on;
/**
* Override jQuery.fn.on() to warn when attaching events to component root elements
*
* JQHTML components have their own .on() method for lifecycle events.
* Attaching jQuery events to a component's root element usually indicates
* the developer meant to use component.on() instead.
*
* To suppress the warning, pass 'intentional' as any argument.
*/
jQuery.fn.on = function (...args) {
// Check if 'intentional' flag is present in any argument
const intentional = args.some(arg => arg === 'intentional');
// Filter out 'intentional' from args before passing to original .on()
const cleanArgs = intentional ? args.filter(arg => arg !== 'intentional') : args;
// Check first element for Component class and warn if needed
if (!intentional && this.length > 0) {
const firstEl = this.first();
if (firstEl.hasClass('Component')) {
const component = firstEl.data('_component');
const componentName = component?.component_name?.() || 'Component';
console.warn(`[JQHTML] jQuery .on('${cleanArgs[0]}') called on <${componentName}> root element.\n` +
`You may have meant to use component.on() for lifecycle events, or attach to a child element.\n` +
`If attaching jQuery events to the component root is intentional, pass 'intentional' as an argument:\n` +
` $(element).on('${cleanArgs[0]}', 'intentional', handler)`);
}
}
// Call original .on() with cleaned arguments and return result
return originalOn.apply(this, cleanArgs);
};
}
// Try to auto-initialize if global jQuery exists
if (typeof window !== 'undefined' && window.jQuery) {
@@ -4848,7 +4927,7 @@ function init(jQuery) {
}
}
// Version - will be replaced during build with actual version from package.json
const version = '2.3.26';
const version = '2.3.27';
// Default export with all functionality
const jqhtml = {
// Core

2
node_modules/@jqhtml/core/dist/index.js.map generated vendored Normal file → Executable file

File diff suppressed because one or more lines are too long

0
node_modules/@jqhtml/core/dist/instruction-processor.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/instruction-processor.d.ts.map generated vendored Normal file → Executable file
View File

173
node_modules/@jqhtml/core/dist/jqhtml-core.esm.js generated vendored Normal file → Executable file
View File

@@ -1,5 +1,5 @@
/**
* JQHTML Core v2.3.26
* JQHTML Core v2.3.27
* (c) 2025 JQHTML Team
* Released under the MIT License
*/
@@ -1307,21 +1307,29 @@ class Load_Coordinator {
}
/**
* Register a leader component that will execute on_load()
* Creates coordination entry and returns a function to call when on_load() completes
* Creates coordination entry and returns a function to call when data is ready
*
* @returns A function that accepts the final data and completes coordination
*/
static register_leader(component, on_load_promise) {
const { key } = this.generate_invocation_key(component.component_name(), component.args);
// Create a promise that we control - it resolves when complete_coordination is called
let resolve_promise;
const coordination_promise = new Promise((resolve) => {
resolve_promise = resolve;
});
const entry = {
status: 'loading',
promise: on_load_promise,
promise: coordination_promise, // Followers await THIS promise, not on_load_promise
resolve_promise,
leader_component: component,
leader_data: null,
leader_error: null,
waiting: []
};
this._registry.set(key, entry);
// Return cleanup function to be called after on_load() completes
return () => this._complete_coordination(key, component);
// Return cleanup function that accepts the final data
return (final_data) => this._complete_coordination(key, component, final_data);
}
/**
* Get the coordination promise for a follower component
@@ -1337,39 +1345,68 @@ class Load_Coordinator {
}
/**
* Complete coordination after leader's on_load() finishes
* Distributes data to all waiting followers and cleans up entry
* Stores leader's data, marks entry as completed, and resolves the promise.
* Followers retrieve the data themselves via get_leader_data().
*
* @param key - The coordination key
* @param leader - The leader component
* @param final_data - The final data after on_load and normalization
* @private
*/
static _complete_coordination(key, leader) {
static _complete_coordination(key, leader, final_data) {
const entry = this._registry.get(key);
if (!entry) {
return;
}
// Capture leader's final state
entry.leader_data = leader.data;
// Store the final data (already normalized by _apply_load_result)
// Deep clone to avoid sharing proxy objects between components
try {
entry.leader_data = JSON.parse(JSON.stringify(final_data));
}
catch (error) {
// If data can't be serialized, use direct reference (may have issues)
entry.leader_data = final_data;
}
entry.status = 'completed';
// Distribute data to all waiting followers
for (const follower of entry.waiting) {
try {
// Copy leader's data to follower
follower.data = entry.leader_data;
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Follower ${follower._cid} received data from leader ${leader._cid}`, { key, data: entry.leader_data });
}
}
catch (error) {
console.error(`[Load Coordinator] Failed to distribute data to follower ${follower._cid}:`, error);
}
}
// Clear coordination entry immediately (no caching)
this._registry.delete(key);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Coordination complete for key: ${key}`, {
leader_cid: leader._cid,
followers_count: entry.waiting.length,
registry_size: this._registry.size
});
console.log(`[Load Coordinator] Leader ${leader._cid} completed, data available for ${entry.waiting.length} followers`, { key, data: entry.leader_data });
}
// Resolve the promise - followers waiting on it will now wake up
entry.resolve_promise();
// Note: We do NOT delete the entry here anymore.
// Followers need to retrieve the data after the promise resolves.
// Entry will be cleaned up when last follower retrieves data.
}
/**
* Get leader's data for a follower component
* Called by follower after coordination promise resolves
* Returns the data and cleans up if this is the last follower
*/
static get_leader_data(component) {
const { key } = this.generate_invocation_key(component.component_name(), component.args);
if (!key) {
return null;
}
const entry = this._registry.get(key);
if (!entry || entry.status !== 'completed') {
return null;
}
// Remove this follower from the waiting list
const follower_index = entry.waiting.indexOf(component);
if (follower_index !== -1) {
entry.waiting.splice(follower_index, 1);
}
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Follower ${component._cid} retrieving data from leader ${entry.leader_component._cid}`, { key, remaining_followers: entry.waiting.length });
}
// If this was the last follower, clean up the entry
if (entry.waiting.length === 0) {
this._registry.delete(key);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Coordinator] Coordination complete for key: ${key}`, { registry_size: this._registry.size });
}
}
return entry.leader_data;
}
/**
* Handle leader on_load() error
@@ -2861,7 +2898,7 @@ class Jqhtml_Component {
console.log(`[Cache] Component ${this._cid} (${this.component_name()}) has non-serializable args - load deduplication and caching disabled`, { uncacheable_property });
}
// Execute on_load on detached proxy without deduplication
const result_data = await this._execute_on_load_detached();
const { data: result_data } = await this._execute_on_load_detached();
// Apply result via sequential queue
await this._apply_load_result(result_data, null);
return;
@@ -2880,9 +2917,17 @@ class Jqhtml_Component {
try {
// Wait for leader to complete
await coordination_promise;
// Data has already been copied by coordinator
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Deduplication] Component ${this._cid} received data from leader`, { data: this.data });
// Retrieve leader's data from coordinator
const leader_data = Load_Coordinator.get_leader_data(this);
if (leader_data !== null) {
// Apply leader's data using the same method as leader
// This properly handles freeze/unfreeze and normalization
await this._apply_load_result(leader_data, data_before_load);
if (window.jqhtml?.debug?.verbose) {
console.log(`[Load Deduplication] Component ${this._cid} applied data from leader`, { data: this.data });
}
// _apply_load_result already sets ready_state and triggers 'load'
return;
}
}
catch (error) {
@@ -2891,6 +2936,7 @@ class Jqhtml_Component {
throw error;
}
}
// Fallback: if we couldn't get leader data, just mark as complete
this._ready_state = 2;
this._update_debug_attrs();
this._log_lifecycle('load', 'complete (follower)');
@@ -2902,9 +2948,14 @@ class Jqhtml_Component {
console.log(`[Load Deduplication] Component ${this._cid} (${this.component_name()}) is the leader`, { args: this.args });
}
// Execute on_load on detached proxy with Load_Coordinator registration
const result_data = await this._execute_on_load_detached(true);
const { data: result_data, complete_coordination } = await this._execute_on_load_detached(true);
// Apply result via sequential queue
await this._apply_load_result(result_data, data_before_load);
// Complete coordination AFTER this.data is updated
// This ensures followers receive the correct final data
if (complete_coordination) {
complete_coordination(this.data);
}
}
/**
* Execute on_load() on a fully detached proxy.
@@ -3030,24 +3081,21 @@ class Jqhtml_Component {
}
})();
// If using Load_Coordinator, register as leader
// Note: We store the completion function but DON'T call it here
// It will be called by _load() after _apply_load_result() updates this.data
let complete_coordination = null;
if (use_load_coordinator) {
complete_coordination = Load_Coordinator.register_leader(this, on_load_promise);
}
try {
await on_load_promise;
}
finally {
// Complete coordination if we registered
if (complete_coordination) {
complete_coordination();
}
}
await on_load_promise;
// Note: We don't validate args changes here because external code (like parent
// components calling reload()) is allowed to modify component.args during on_load().
// The read-only proxy only prevents code INSIDE on_load() from modifying args.
// Return the data from the detached context
return detached_context.data;
// Return the data from the detached context AND the completion function
return {
data: detached_context.data,
complete_coordination
};
}
/**
* Apply the result of on_load() to this.data via the sequential queue.
@@ -3464,7 +3512,7 @@ class Jqhtml_Component {
// STEP 2: Call on_load() on detached proxy
// This uses the same detached execution as _load() - on_load runs isolated
// and result is applied via sequential queue
const result_data = await this._execute_on_load_detached(false); // false = don't use Load_Coordinator
const { data: result_data } = await this._execute_on_load_detached(false); // false = don't use Load_Coordinator
// Apply result via sequential queue
// This handles normalization, caching, and setting _is_dynamic
await this._apply_load_result(result_data, data_before_load);
@@ -4826,6 +4874,37 @@ function init_jquery_plugin(jQuery) {
originalText.call(jQuery(this), value);
});
};
// Store original jQuery.fn.on
const originalOn = jQuery.fn.on;
/**
* Override jQuery.fn.on() to warn when attaching events to component root elements
*
* JQHTML components have their own .on() method for lifecycle events.
* Attaching jQuery events to a component's root element usually indicates
* the developer meant to use component.on() instead.
*
* To suppress the warning, pass 'intentional' as any argument.
*/
jQuery.fn.on = function (...args) {
// Check if 'intentional' flag is present in any argument
const intentional = args.some(arg => arg === 'intentional');
// Filter out 'intentional' from args before passing to original .on()
const cleanArgs = intentional ? args.filter(arg => arg !== 'intentional') : args;
// Check first element for Component class and warn if needed
if (!intentional && this.length > 0) {
const firstEl = this.first();
if (firstEl.hasClass('Component')) {
const component = firstEl.data('_component');
const componentName = component?.component_name?.() || 'Component';
console.warn(`[JQHTML] jQuery .on('${cleanArgs[0]}') called on <${componentName}> root element.\n` +
`You may have meant to use component.on() for lifecycle events, or attach to a child element.\n` +
`If attaching jQuery events to the component root is intentional, pass 'intentional' as an argument:\n` +
` $(element).on('${cleanArgs[0]}', 'intentional', handler)`);
}
}
// Call original .on() with cleaned arguments and return result
return originalOn.apply(this, cleanArgs);
};
}
// Try to auto-initialize if global jQuery exists
if (typeof window !== 'undefined' && window.jQuery) {
@@ -4853,7 +4932,7 @@ function init(jQuery) {
}
}
// Version - will be replaced during build with actual version from package.json
const version = '2.3.26';
const version = '2.3.27';
// Default export with all functionality
const jqhtml = {
// Core

2
node_modules/@jqhtml/core/dist/jqhtml-core.esm.js.map generated vendored Normal file → Executable file

File diff suppressed because one or more lines are too long

0
node_modules/@jqhtml/core/dist/jqhtml-debug.esm.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/jqhtml-debug.esm.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/jquery-plugin.d.ts generated vendored Normal file → Executable file
View File

2
node_modules/@jqhtml/core/dist/jquery-plugin.d.ts.map generated vendored Normal file → Executable file
View File

@@ -1 +1 @@
{"version":3,"file":"jquery-plugin.d.ts","sourceRoot":"","sources":["../src/jquery-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAQpE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd;;WAEG;QACH,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAAC;QACrC,SAAS,CAAC,cAAc,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC;QAC9F,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC;QAE/E;;;;;;;WAOG;QACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;KACvC;CACF;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CA0UpD"}
{"version":3,"file":"jquery-plugin.d.ts","sourceRoot":"","sources":["../src/jquery-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAQpE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd;;WAEG;QACH,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAAC;QACrC,SAAS,CAAC,cAAc,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC;QAC9F,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC;QAE/E;;;;;;;WAOG;QACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;KACvC;CACF;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAgXpD"}

0
node_modules/@jqhtml/core/dist/lifecycle-manager.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/lifecycle-manager.d.ts.map generated vendored Normal file → Executable file
View File

19
node_modules/@jqhtml/core/dist/load-coordinator.d.ts generated vendored Normal file → Executable file
View File

@@ -48,9 +48,11 @@ export declare class Load_Coordinator {
static should_execute_on_load(component: Jqhtml_Component): boolean;
/**
* Register a leader component that will execute on_load()
* Creates coordination entry and returns a function to call when on_load() completes
* Creates coordination entry and returns a function to call when data is ready
*
* @returns A function that accepts the final data and completes coordination
*/
static register_leader(component: Jqhtml_Component, on_load_promise: Promise<void>): () => void;
static register_leader(component: Jqhtml_Component, on_load_promise: Promise<void>): (final_data: Record<string, any>) => void;
/**
* Get the coordination promise for a follower component
* Returns a promise that resolves when the leader completes
@@ -58,10 +60,21 @@ export declare class Load_Coordinator {
static get_coordination_promise(component: Jqhtml_Component): Promise<void> | null;
/**
* Complete coordination after leader's on_load() finishes
* Distributes data to all waiting followers and cleans up entry
* Stores leader's data, marks entry as completed, and resolves the promise.
* Followers retrieve the data themselves via get_leader_data().
*
* @param key - The coordination key
* @param leader - The leader component
* @param final_data - The final data after on_load and normalization
* @private
*/
private static _complete_coordination;
/**
* Get leader's data for a follower component
* Called by follower after coordination promise resolves
* Returns the data and cleans up if this is the last follower
*/
static get_leader_data(component: Jqhtml_Component): Record<string, any> | null;
/**
* Handle leader on_load() error
* Propagates error to all followers and cleans up entry

2
node_modules/@jqhtml/core/dist/load-coordinator.d.ts.map generated vendored Normal file → Executable file
View File

@@ -1 +1 @@
{"version":3,"file":"load-coordinator.d.ts","sourceRoot":"","sources":["../src/load-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAWvD,MAAM,WAAW,mBAAmB;IAChC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6C;IAErE;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,mBAAmB;IA0EtF;;;OAGG;IACH,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO;IAoBnE;;;OAGG;IACH,MAAM,CAAC,eAAe,CAClB,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,GAC/B,MAAM,IAAI;IAkBb;;;OAGG;IACH,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAWlF;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA8CrC;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAuC3E;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,GAAG;IAahC;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;CAG3B"}
{"version":3,"file":"load-coordinator.d.ts","sourceRoot":"","sources":["../src/load-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAYvD,MAAM,WAAW,mBAAmB;IAChC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6C;IAErE;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,mBAAmB;IA0EtF;;;OAGG;IACH,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO;IAoBnE;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAClB,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,GAC/B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI;IAyB5C;;;OAGG;IACH,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAWlF;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAgCrC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAyC/E;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAuC3E;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,GAAG;IAahC;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;CAG3B"}

0
node_modules/@jqhtml/core/dist/local-storage.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/local-storage.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/template-renderer.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/core/dist/template-renderer.d.ts.map generated vendored Normal file → Executable file
View File

2
node_modules/@jqhtml/core/package.json generated vendored Normal file → Executable file
View File

@@ -1,6 +1,6 @@
{
"name": "@jqhtml/core",
"version": "2.3.26",
"version": "2.3.27",
"description": "Core runtime library for JQHTML",
"type": "module",
"main": "./dist/index.js",

0
node_modules/@jqhtml/parser/dist/ast.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/ast.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/ast.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/codegen.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/codegen.d.ts.map generated vendored Normal file → Executable file
View File

View File

@@ -1377,7 +1377,7 @@ export class CodeGenerator {
for (const [name, component] of this.components) {
code += `// Component: ${name}\n`;
code += `jqhtml_components.set('${name}', {\n`;
code += ` _jqhtml_version: '2.3.26',\n`; // Version will be replaced during build
code += ` _jqhtml_version: '2.3.27',\n`; // Version will be replaced during build
code += ` name: '${name}',\n`;
code += ` tag: '${component.tagName}',\n`;
code += ` defaultAttributes: ${this.serializeAttributeObject(component.defaultAttributes)},\n`;

0
node_modules/@jqhtml/parser/dist/codegen.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/compiler.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/compiler.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/compiler.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/compiler.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/errors.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/errors.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/errors.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/errors.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/index.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/index.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/index.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/index.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/integration.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/integration.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/integration.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/integration.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/lexer.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/lexer.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/lexer.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/lexer.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/parser.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/parser.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/parser.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/parser.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/runtime.d.ts generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/runtime.d.ts.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/runtime.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/parser/dist/runtime.js.map generated vendored Normal file → Executable file
View File

2
node_modules/@jqhtml/parser/package.json generated vendored Normal file → Executable file
View File

@@ -1,6 +1,6 @@
{
"name": "@jqhtml/parser",
"version": "2.3.26",
"version": "2.3.27",
"description": "JQHTML template parser - converts templates to JavaScript",
"type": "module",
"main": "dist/index.js",

0
node_modules/@jqhtml/ssr/QUICKSTART.md generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/ssr/README.md generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/ssr/SPECIFICATION.md generated vendored Normal file → Executable file
View File

2
node_modules/@jqhtml/ssr/package.json generated vendored Normal file → Executable file
View File

@@ -1,6 +1,6 @@
{
"name": "@jqhtml/ssr",
"version": "2.3.26",
"version": "2.3.27",
"description": "Server-Side Rendering for JQHTML components - renders components to HTML for SEO",
"main": "src/index.js",
"bin": {

0
node_modules/@jqhtml/ssr/src/http-intercept.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/ssr/src/index.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/ssr/src/protocol.js generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/ssr/src/storage.js generated vendored Normal file → Executable file
View File

View File

@@ -1 +1 @@
2.3.26
2.3.27

0
node_modules/@jqhtml/vscode-extension/blade-language-configuration.json generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/vscode-extension/out/blade_language_config.js.map generated vendored Normal file → Executable file
View File

0
node_modules/@jqhtml/vscode-extension/out/blade_spacer.js.map generated vendored Normal file → Executable file
View File

2
node_modules/@jqhtml/vscode-extension/package.json generated vendored Normal file → Executable file
View File

@@ -2,7 +2,7 @@
"name": "@jqhtml/vscode-extension",
"displayName": "JQHTML",
"description": "Syntax highlighting and language support for JQHTML template files",
"version": "2.3.26",
"version": "2.3.27",
"publisher": "jqhtml",
"license": "MIT",
"publishConfig": {

0
node_modules/@jqhtml/vscode-extension/syntaxes/blade-jqhtml.tmLanguage.json generated vendored Normal file → Executable file
View File