Refactor jqhtml integration to use jqhtml.boot() and migrate blade highlighting to jqhtml extension
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -149,13 +149,13 @@ class JqhtmlBladeCompiler
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build HTML attributes string
|
// Build HTML attributes string
|
||||||
// Handle class attribute specially to merge with Component_Init
|
// Handle class attribute specially to merge with _Component_Init
|
||||||
$class_value = 'Component_Init';
|
$class_value = '_Component_Init';
|
||||||
if (isset($html_attrs['class'])) {
|
if (isset($html_attrs['class'])) {
|
||||||
if ($html_attrs['class']['type'] === 'expression') {
|
if ($html_attrs['class']['type'] === 'expression') {
|
||||||
$class_value = "Component_Init ' . {$html_attrs['class']['value']} . '";
|
$class_value = "_Component_Init ' . {$html_attrs['class']['value']} . '";
|
||||||
} else {
|
} else {
|
||||||
$class_value = 'Component_Init ' . $html_attrs['class']['value'];
|
$class_value = '_Component_Init ' . $html_attrs['class']['value'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,13 +229,13 @@ class JqhtmlBladeCompiler
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build HTML attributes string
|
// Build HTML attributes string
|
||||||
// Handle class attribute specially to merge with Component_Init
|
// Handle class attribute specially to merge with _Component_Init
|
||||||
$class_value = 'Component_Init';
|
$class_value = '_Component_Init';
|
||||||
if (isset($html_attrs['class'])) {
|
if (isset($html_attrs['class'])) {
|
||||||
if ($html_attrs['class']['type'] === 'expression') {
|
if ($html_attrs['class']['type'] === 'expression') {
|
||||||
$class_value = "Component_Init ' . {$html_attrs['class']['value']} . '";
|
$class_value = "_Component_Init ' . {$html_attrs['class']['value']} . '";
|
||||||
} else {
|
} else {
|
||||||
$class_value = 'Component_Init ' . $html_attrs['class']['value'];
|
$class_value = '_Component_Init ' . $html_attrs['class']['value'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,55 +1,26 @@
|
|||||||
/**
|
/**
|
||||||
* JQHTML Integration - Component Hydration System
|
* JQHTML Integration - Component Registration and Hydration Bootstrap
|
||||||
*
|
*
|
||||||
* This module bridges server-rendered HTML and client-side jqhtml components.
|
* This module bridges RSpade's manifest system with jqhtml's component runtime.
|
||||||
*
|
|
||||||
* == THE HYDRATION PROBLEM ==
|
|
||||||
*
|
|
||||||
* When PHP/Blade renders a page, jqhtml components appear as placeholder elements:
|
|
||||||
*
|
|
||||||
* Blade source: <User_Card $name="John" />
|
|
||||||
* Rendered HTML: <div class="Component_Init"
|
|
||||||
* data-component-init-name="User_Card"
|
|
||||||
* data-component-args='{"name":"John"}'>
|
|
||||||
* </div>
|
|
||||||
*
|
|
||||||
* These are just div tags - they have no behavior until JavaScript runs.
|
|
||||||
* "Hydration" is the process of finding these placeholders and converting them
|
|
||||||
* into live, interactive jqhtml components.
|
|
||||||
*
|
*
|
||||||
* == TWO-PHASE INITIALIZATION ==
|
* == TWO-PHASE INITIALIZATION ==
|
||||||
*
|
*
|
||||||
* Phase 1: _on_framework_modules_define() - Component Registration
|
* Phase 1: _on_framework_modules_define() - Component Registration
|
||||||
* - Runs early in framework boot, before DOM is processed
|
* - Runs early in framework boot, before DOM is processed
|
||||||
* - Registers all ES6 classes extending Component with jqhtml runtime
|
* - Registers all ES6 classes extending Component with jqhtml runtime
|
||||||
|
* - Tags static methods with cache IDs for jqhtml's caching system
|
||||||
* - After this phase, jqhtml knows: "User_Card" → UserCardClass
|
* - After this phase, jqhtml knows: "User_Card" → UserCardClass
|
||||||
*
|
*
|
||||||
* Phase 2: _on_framework_modules_init() - DOM Hydration
|
* Phase 2: _on_framework_modules_init() - DOM Hydration
|
||||||
* - Runs after templates are loaded
|
* - Calls jqhtml.boot() to hydrate all ._Component_Init placeholders
|
||||||
* - Finds all .Component_Init elements in the DOM
|
|
||||||
* - Extracts component name and args from data attributes
|
|
||||||
* - Calls $element.component(name, args) to hydrate each one
|
|
||||||
* - Recursively processes nested components
|
|
||||||
* - Triggers 'jqhtml_ready' when all components are initialized
|
* - Triggers 'jqhtml_ready' when all components are initialized
|
||||||
*
|
*
|
||||||
* == THE TRANSFORMATION ==
|
|
||||||
*
|
|
||||||
* Before hydration:
|
|
||||||
* <div class="Component_Init" data-component-init-name="User_Card" ...>
|
|
||||||
*
|
|
||||||
* After hydration:
|
|
||||||
* <div class="User_Card"> ← Component_Init removed, component class added
|
|
||||||
* [component template content] ← Template rendered into element
|
|
||||||
* </div>
|
|
||||||
*
|
|
||||||
* The element is now a live component with event handlers, state, and lifecycle.
|
|
||||||
*
|
|
||||||
* == KEY PARTICIPANTS ==
|
* == KEY PARTICIPANTS ==
|
||||||
*
|
*
|
||||||
* JqhtmlBladeCompiler.php - Transforms <Component /> tags into .Component_Init divs
|
* JqhtmlBladeCompiler.php - Transforms <Component /> tags into ._Component_Init divs
|
||||||
* jqhtml runtime - Maintains registry of component names → classes
|
* jqhtml runtime - Maintains registry of component names → classes
|
||||||
* This module - Orchestrates registration and hydration
|
* jqhtml.boot() - Finds and hydrates all ._Component_Init placeholders
|
||||||
* $().component() - jQuery plugin that creates component instances
|
* This module - Orchestrates registration and triggers hydration
|
||||||
*/
|
*/
|
||||||
class Jqhtml_Integration {
|
class Jqhtml_Integration {
|
||||||
/**
|
/**
|
||||||
@@ -120,165 +91,20 @@ class Jqhtml_Integration {
|
|||||||
/**
|
/**
|
||||||
* Phase 2: DOM Hydration
|
* Phase 2: DOM Hydration
|
||||||
*
|
*
|
||||||
* Finds all .Component_Init placeholders and converts them into live components.
|
* Delegates to jqhtml.boot() which finds all ._Component_Init placeholders
|
||||||
|
* and converts them into live components.
|
||||||
*
|
*
|
||||||
* == HYDRATION PROCESS ==
|
* jqhtml.boot() handles:
|
||||||
*
|
* - Finding ._Component_Init elements
|
||||||
* For each .Component_Init element:
|
* - Parsing data-component-init-name / data-component-args
|
||||||
*
|
* - Calling $element.component(name, args)
|
||||||
* 1. EXTRACT: Read data-component-init-name and data-component-args
|
* - Recursive nested component handling
|
||||||
* 2. CLEANUP: Remove data attributes (prevents re-hydration, hides implementation)
|
* - Promise tracking for async components
|
||||||
* 3. CAPTURE: Save innerHTML for slot/content() processing
|
|
||||||
* 4. INSTANTIATE: Call $element.component(name, args)
|
|
||||||
* 5. RECURSE: After render, hydrate any nested .Component_Init elements
|
|
||||||
*
|
|
||||||
* == NESTED COMPONENT HANDLING ==
|
|
||||||
*
|
|
||||||
* Components can contain other components in their Blade output:
|
|
||||||
*
|
|
||||||
* <User_Card> ← Parent hydrates first
|
|
||||||
* <Avatar /> ← Child hydrates after parent renders
|
|
||||||
* </User_Card>
|
|
||||||
*
|
|
||||||
* We skip nested .Component_Init elements on first pass (they're inside a parent
|
|
||||||
* that hasn't rendered yet). After each component renders, we recursively scan
|
|
||||||
* its content for children to hydrate.
|
|
||||||
*
|
|
||||||
* == ASYNC COMPLETION ==
|
|
||||||
*
|
|
||||||
* Hydration is async because components may have on_load() methods that fetch data.
|
|
||||||
* We track all component promises and trigger 'jqhtml_ready' only when every
|
|
||||||
* component (including nested ones) has completed its full lifecycle.
|
|
||||||
*
|
|
||||||
* @param {jQuery} [$scope] Scope to search (defaults to body). Recursive calls pass component.$
|
|
||||||
* @returns {Array<Promise>|undefined} Promises for recursive calls; undefined for top-level
|
|
||||||
*/
|
*/
|
||||||
static _on_framework_modules_init($scope) {
|
static _on_framework_modules_init() {
|
||||||
const is_top_level = !$scope;
|
jqhtml.boot().then(() => {
|
||||||
const promises = [];
|
Rsx.trigger('jqhtml_ready');
|
||||||
const components_needing_init = ($scope || $('body')).find('.Component_Init');
|
|
||||||
|
|
||||||
if (components_needing_init.length > 0) {
|
|
||||||
console_debug('JQHTML_INIT', `Initializing ${components_needing_init.length} DOM components`);
|
|
||||||
}
|
|
||||||
|
|
||||||
components_needing_init.each(function () {
|
|
||||||
const $element = $(this);
|
|
||||||
|
|
||||||
// Guard: Element may have been removed by a parent component's render
|
|
||||||
if (!document.contains($element[0])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Guard: Skip nested components - they'll be processed after their parent renders
|
|
||||||
let parent = $element[0].parentElement;
|
|
||||||
while (parent) {
|
|
||||||
if (parent.classList.contains('Component_Init')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
parent = parent.parentElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────
|
|
||||||
// STEP 1: Extract hydration data from placeholder element
|
|
||||||
// ─────────────────────────────────────────────────────────────────
|
|
||||||
const component_name = $element.attr('data-component-init-name');
|
|
||||||
const args_string = $element.attr('data-component-args');
|
|
||||||
|
|
||||||
let component_args = {};
|
|
||||||
if (args_string) {
|
|
||||||
try {
|
|
||||||
component_args = JSON.parse(args_string);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`[JQHTML Integration] Failed to parse component args for ${component_name}:`, e);
|
|
||||||
component_args = {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────
|
|
||||||
// STEP 2: Remove hydration markers (cleanup)
|
|
||||||
//
|
|
||||||
// These attributes served their purpose. Removing them:
|
|
||||||
// - Prevents accidental re-hydration
|
|
||||||
// - Hides implementation details from DOM inspection
|
|
||||||
// - Prevents other code from depending on this internal mechanism
|
|
||||||
// ─────────────────────────────────────────────────────────────────
|
|
||||||
$element.removeAttr('data-component-init-name');
|
|
||||||
$element.removeAttr('data-component-args');
|
|
||||||
$element.removeData('component-init-name');
|
|
||||||
$element.removeData('component-args');
|
|
||||||
|
|
||||||
if (component_name) {
|
|
||||||
let component_args_filtered = {};
|
|
||||||
for (const [key, value] of Object.entries(component_args)) {
|
|
||||||
if (key.startsWith('data-')) {
|
|
||||||
component_args_filtered[key.substring(5)] = value;
|
|
||||||
} else {
|
|
||||||
component_args_filtered[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// ─────────────────────────────────────────────────────────
|
|
||||||
// STEP 3: Capture innerHTML for slot/content() processing
|
|
||||||
//
|
|
||||||
// Blade content between <Component>...</Component> tags
|
|
||||||
// becomes available to the template via content() function
|
|
||||||
// ─────────────────────────────────────────────────────────
|
|
||||||
component_args_filtered._inner_html = $element.html();
|
|
||||||
$element.empty();
|
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────
|
|
||||||
// STEP 4: Instantiate the component
|
|
||||||
//
|
|
||||||
// Remove .Component_Init first to prevent re-initialization
|
|
||||||
// if this element is somehow scanned again
|
|
||||||
// ─────────────────────────────────────────────────────────
|
|
||||||
$element.removeClass('Component_Init');
|
|
||||||
|
|
||||||
const component_promise = new Promise((resolve) => {
|
|
||||||
// $().component(name, args) creates the component instance,
|
|
||||||
// binds it to the element, and starts the lifecycle
|
|
||||||
let component = $element.component(component_name, component_args_filtered).component();
|
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────
|
|
||||||
// STEP 5: Recurse after render
|
|
||||||
//
|
|
||||||
// Component's template may contain nested .Component_Init
|
|
||||||
// elements. We must wait for render before we can find them.
|
|
||||||
//
|
|
||||||
// Note: If the template changed the tag (e.g., tag="button"),
|
|
||||||
// the original $element may have been replaced. Always use
|
|
||||||
// component.$ to get the current element.
|
|
||||||
// ─────────────────────────────────────────────────────
|
|
||||||
component.on('render', function () {
|
|
||||||
const nested_promises = Jqhtml_Integration._on_framework_modules_init(component.$);
|
|
||||||
promises.push(...nested_promises);
|
|
||||||
resolve();
|
|
||||||
}).$;
|
|
||||||
});
|
|
||||||
|
|
||||||
promises.push(component_promise);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`[JQHTML Integration] Failed to initialize component ${component_name}:`, error);
|
|
||||||
console.error('Error details:', error.stack || error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────────
|
|
||||||
// COMPLETION: Top-level call waits for all components, then signals ready
|
|
||||||
// ─────────────────────────────────────────────────────────────────────
|
|
||||||
if (is_top_level) {
|
|
||||||
(async () => {
|
|
||||||
await Promise.all(promises);
|
|
||||||
Rsx.trigger('jqhtml_ready');
|
|
||||||
})();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Recursive calls return promises for parent to collect
|
|
||||||
return promises;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"blade_client.js","sourceRoot":"","sources":["../src/blade_client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAE1B,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC3C,sDAAsD;IACtD,MAAM,cAAc,GAAa;QAC7B,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,OAAO;QACP,IAAI;QACJ,KAAK;QACL,OAAO;QACP,QAAQ;QACR,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;QACP,QAAQ;QACR,OAAO;QACP,KAAK;KACR,CAAC;IAEF,iEAAiE;IACjE,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE;QAC/C,gBAAgB,EAAE;YACd,qBAAqB,EACjB,wJAAwJ;YAC5J,qBAAqB,EACjB,kDAAkD;SACzD;QACD,WAAW,EACP,gFAAgF;QACpF,YAAY,EAAE;YACV;gBACI,oEAAoE;gBACpE,UAAU,EAAE,IAAI,MAAM,CAClB,UAAU,cAAc,CAAC,IAAI,CACzB,GAAG,CACN,8CAA8C,EAC/C,GAAG,CACN;gBACD,SAAS,EAAE,+BAA+B;gBAC1C,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;aAC9D;YACD;gBACI,qDAAqD;gBACrD,UAAU,EAAE,IAAI,MAAM,CAClB,UAAU,cAAc,CAAC,IAAI,CACzB,GAAG,CACN,sCAAsC,EACvC,GAAG,CACN;gBACD,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;aACvD;SACJ;KACJ,CAAC,CAAC;AACP,CAAC,CAAC;AAvDW,QAAA,0BAA0B,8BAuDrC"}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
||||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
||||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
||||||
}
|
|
||||||
Object.defineProperty(o, k2, desc);
|
|
||||||
}) : (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
o[k2] = m[k];
|
|
||||||
}));
|
|
||||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
||||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
||||||
}) : function(o, v) {
|
|
||||||
o["default"] = v;
|
|
||||||
});
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
||||||
__setModuleDefault(result, mod);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.BladeComponentSemanticTokensProvider = void 0;
|
|
||||||
const vscode = __importStar(require("vscode"));
|
|
||||||
/**
|
|
||||||
* Provides semantic tokens for uppercase component tags in Blade files
|
|
||||||
* Highlights component tag names in light green
|
|
||||||
* Highlights tag="" attribute in orange on jqhtml components
|
|
||||||
*/
|
|
||||||
class BladeComponentSemanticTokensProvider {
|
|
||||||
async provideDocumentSemanticTokens(document) {
|
|
||||||
const tokens_builder = new vscode.SemanticTokensBuilder();
|
|
||||||
if (document.languageId !== 'blade') {
|
|
||||||
return tokens_builder.build();
|
|
||||||
}
|
|
||||||
const text = document.getText();
|
|
||||||
// Match opening tags that start with uppercase letter to find jqhtml components
|
|
||||||
// Matches: <ComponentName ...>, captures the entire tag up to >
|
|
||||||
const component_tag_regex = /<([A-Z][a-zA-Z0-9_]*)([^>]*?)>/g;
|
|
||||||
let component_match;
|
|
||||||
while ((component_match = component_tag_regex.exec(text)) !== null) {
|
|
||||||
const tag_name = component_match[1];
|
|
||||||
const tag_attributes = component_match[2];
|
|
||||||
const tag_start = component_match.index + component_match[0].indexOf(tag_name);
|
|
||||||
const tag_position = document.positionAt(tag_start);
|
|
||||||
// Push token for the component tag name
|
|
||||||
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
|
||||||
tokens_builder.push(tag_position.line, tag_position.character, tag_name.length, 0, 0);
|
|
||||||
// Now look for tag="" attribute within this component's attributes
|
|
||||||
// Matches: tag="..." or tag='...'
|
|
||||||
const tag_attr_regex = /\btag\s*=/g;
|
|
||||||
let attr_match;
|
|
||||||
while ((attr_match = tag_attr_regex.exec(tag_attributes)) !== null) {
|
|
||||||
// Calculate the position of 'tag' within the document
|
|
||||||
const attr_start = component_match.index + component_match[0].indexOf(tag_attributes) + attr_match.index;
|
|
||||||
const attr_position = document.positionAt(attr_start);
|
|
||||||
// Push token for 'tag' attribute name
|
|
||||||
// Token type 1 maps to 'jqhtmlTagAttribute' which we'll define to be orange
|
|
||||||
tokens_builder.push(attr_position.line, attr_position.character, 3, 1, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Also match closing tags that start with uppercase letter
|
|
||||||
// Matches: </ComponentName>
|
|
||||||
const closing_tag_regex = /<\/([A-Z][a-zA-Z0-9_]*)/g;
|
|
||||||
let closing_match;
|
|
||||||
while ((closing_match = closing_tag_regex.exec(text)) !== null) {
|
|
||||||
const tag_name = closing_match[1];
|
|
||||||
const tag_start = closing_match.index + closing_match[0].indexOf(tag_name);
|
|
||||||
const position = document.positionAt(tag_start);
|
|
||||||
// Push token for the tag name
|
|
||||||
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
|
||||||
tokens_builder.push(position.line, position.character, tag_name.length, 0, 0);
|
|
||||||
}
|
|
||||||
return tokens_builder.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.BladeComponentSemanticTokensProvider = BladeComponentSemanticTokensProvider;
|
|
||||||
//# sourceMappingURL=blade_component_provider.js.map
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"blade_component_provider.js","sourceRoot":"","sources":["../src/blade_component_provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC;;;;GAIG;AACH,MAAa,oCAAoC;IAC7C,KAAK,CAAC,6BAA6B,CAAC,QAA6B;QAC7D,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAE1D,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,EAAE;YACjC,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;SACjC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEhC,gFAAgF;QAChF,gEAAgE;QAChE,MAAM,mBAAmB,GAAG,iCAAiC,CAAC;QAC9D,IAAI,eAAe,CAAC;QAEpB,OAAO,CAAC,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAEpD,wCAAwC;YACxC,gGAAgG;YAChG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtF,mEAAmE;YACnE,kCAAkC;YAClC,MAAM,cAAc,GAAG,YAAY,CAAC;YACpC,IAAI,UAAU,CAAC;YAEf,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE;gBAChE,sDAAsD;gBACtD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;gBACzG,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAEtD,sCAAsC;gBACtC,4EAA4E;gBAC5E,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC7E;SACJ;QAED,2DAA2D;QAC3D,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;QACrD,IAAI,aAAa,CAAC;QAElB,OAAO,CAAC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;YAC5D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAEhD,8BAA8B;YAC9B,gGAAgG;YAChG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACjF;QAED,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACJ;AA1DD,oFA0DC"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"blade_spacer.js","sourceRoot":"","sources":["../src/blade_spacer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,qCAAsC;AAEtC,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,QAAQ,GAA2B;IACrC,CAAC,UAAU,CAAC,EAAE,0CAA0C;IACxD,CAAC,aAAa,CAAC,EAAE,8CAA8C;IAC/D,CAAC,WAAW,CAAC,EAAE,oDAAoD;CACtE,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEvC,MAAM,OAAO,GAAG;IACZ,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;CAC1B,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAyB,EAAE,MAAc,EAAmB,EAAE;IAC7E,IAAI;QACA,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;KACxC;IAAC,OAAO,KAAK,EAAE;QACZ,+CAA+C;QAC/C,+CAA+C;QAC/C,2CAA2C;KAC9C;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,GAAwB,EACxB,MAA6C,EACvC,EAAE;IACR,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;QACrB,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;QACrB,OAAO,CAAC,CAAC;KACZ;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9C,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,KAAK,EAC7B,CAAiC,EACjC,MAA0B,EAC5B,EAAE;IACA,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE5B,IACI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC;QAC3C,CAAC,MAAM;QACP,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EACvD;QACE,OAAO;KACV;IAED,IAAI,QAAQ,GAAW,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,GAAmB,EAAE,CAAC;IAChC,IAAI,OAAO,GAAa,EAAE,CAAC;IAE3B,2EAA2E;IAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;IAEnD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACvB,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACtC,OAAO;SACV;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxC;QAED,MAAM,YAAY,GACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAEzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,+DAA+D;YAC/D,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC5D,SAAS;aACZ;YAED,4CAA4C;YAC5C,IAAI,CAAC,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;gBAC5C,SAAS;aACZ;YAED,0CAA0C;YAC1C,IAAI,CAAC,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;gBAC1C,SAAS;aACZ;YAED,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CACvB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CACxD,CAAC;YAEF,IAAI,GAAG,EAAE;gBACL,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM,CAAC,IAAI,CACP,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAC7D,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aACxC;SACJ;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACzC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;KAC9E;AACL,CAAC,CAAC;AAtEW,QAAA,YAAY,gBAsEvB"}
|
|
||||||
@@ -44,11 +44,6 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "",
|
"default": "",
|
||||||
"description": "Set to 'rspade' to enable RSpade framework features"
|
"description": "Set to 'rspade' to enable RSpade framework features"
|
||||||
},
|
|
||||||
"rspade.enableBladeAutoSpacing": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": true,
|
|
||||||
"description": "Automatically add spaces inside Blade tags when typing"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -109,26 +104,19 @@
|
|||||||
"id": "conventionMethod",
|
"id": "conventionMethod",
|
||||||
"superType": "method",
|
"superType": "method",
|
||||||
"description": "Convention method automatically called by RSX framework"
|
"description": "Convention method automatically called by RSX framework"
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "jqhtmlTagAttribute",
|
|
||||||
"superType": "parameter",
|
|
||||||
"description": "The tag attribute on jqhtml components"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"semanticTokenScopes": [
|
"semanticTokenScopes": [
|
||||||
{
|
{
|
||||||
"scopes": {
|
"scopes": {
|
||||||
"conventionMethod": ["entity.name.function.convention.rspade"],
|
"conventionMethod": ["entity.name.function.convention.rspade"]
|
||||||
"jqhtmlTagAttribute": ["entity.other.attribute-name.jqhtml.tag"]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"configurationDefaults": {
|
"configurationDefaults": {
|
||||||
"editor.semanticTokenColorCustomizations": {
|
"editor.semanticTokenColorCustomizations": {
|
||||||
"rules": {
|
"rules": {
|
||||||
"conventionMethod": "#FFA500",
|
"conventionMethod": "#FFA500"
|
||||||
"jqhtmlTagAttribute": "#FFA500"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
import * as vscode from 'vscode';
|
|
||||||
|
|
||||||
export const init_blade_language_config = () => {
|
|
||||||
// HTML empty elements that don't require closing tags
|
|
||||||
const EMPTY_ELEMENTS: string[] = [
|
|
||||||
'area',
|
|
||||||
'base',
|
|
||||||
'br',
|
|
||||||
'col',
|
|
||||||
'embed',
|
|
||||||
'hr',
|
|
||||||
'img',
|
|
||||||
'input',
|
|
||||||
'keygen',
|
|
||||||
'link',
|
|
||||||
'menuitem',
|
|
||||||
'meta',
|
|
||||||
'param',
|
|
||||||
'source',
|
|
||||||
'track',
|
|
||||||
'wbr',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Configure Blade language indentation and auto-closing behavior
|
|
||||||
vscode.languages.setLanguageConfiguration('blade', {
|
|
||||||
indentationRules: {
|
|
||||||
increaseIndentPattern:
|
|
||||||
/<(?!\?|(?:area|base|br|col|frame|hr|html|img|input|link|meta|param)\b|[^>]*\/>)([-_\.A-Za-z0-9]+)(?=\s|>)\b[^>]*>(?!.*<\/\1>)|<!--(?!.*-->)|\{[^}"']*$/,
|
|
||||||
decreaseIndentPattern:
|
|
||||||
/^\s*(<\/(?!html)[-_\.A-Za-z0-9]+\b[^>]*>|-->|\})/,
|
|
||||||
},
|
|
||||||
wordPattern:
|
|
||||||
/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
|
|
||||||
onEnterRules: [
|
|
||||||
{
|
|
||||||
// When pressing Enter between opening and closing tags, auto-indent
|
|
||||||
beforeText: new RegExp(
|
|
||||||
`<(?!(?:${EMPTY_ELEMENTS.join(
|
|
||||||
'|'
|
|
||||||
)}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,
|
|
||||||
'i'
|
|
||||||
),
|
|
||||||
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
|
|
||||||
action: { indentAction: vscode.IndentAction.IndentOutdent },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// When pressing Enter after opening tag, auto-indent
|
|
||||||
beforeText: new RegExp(
|
|
||||||
`<(?!(?:${EMPTY_ELEMENTS.join(
|
|
||||||
'|'
|
|
||||||
)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,
|
|
||||||
'i'
|
|
||||||
),
|
|
||||||
action: { indentAction: vscode.IndentAction.Indent },
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
import * as vscode from 'vscode';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides semantic tokens for uppercase component tags in Blade files
|
|
||||||
* Highlights component tag names in light green
|
|
||||||
* Highlights tag="" attribute in orange on jqhtml components
|
|
||||||
*/
|
|
||||||
export class BladeComponentSemanticTokensProvider implements vscode.DocumentSemanticTokensProvider {
|
|
||||||
async provideDocumentSemanticTokens(document: vscode.TextDocument): Promise<vscode.SemanticTokens> {
|
|
||||||
const tokens_builder = new vscode.SemanticTokensBuilder();
|
|
||||||
|
|
||||||
if (document.languageId !== 'blade') {
|
|
||||||
return tokens_builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
const text = document.getText();
|
|
||||||
|
|
||||||
// Match opening tags that start with uppercase letter to find jqhtml components
|
|
||||||
// Matches: <ComponentName ...>, captures the entire tag up to >
|
|
||||||
const component_tag_regex = /<([A-Z][a-zA-Z0-9_]*)([^>]*?)>/g;
|
|
||||||
let component_match;
|
|
||||||
|
|
||||||
while ((component_match = component_tag_regex.exec(text)) !== null) {
|
|
||||||
const tag_name = component_match[1];
|
|
||||||
const tag_attributes = component_match[2];
|
|
||||||
const tag_start = component_match.index + component_match[0].indexOf(tag_name);
|
|
||||||
const tag_position = document.positionAt(tag_start);
|
|
||||||
|
|
||||||
// Push token for the component tag name
|
|
||||||
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
|
||||||
tokens_builder.push(tag_position.line, tag_position.character, tag_name.length, 0, 0);
|
|
||||||
|
|
||||||
// Now look for tag="" attribute within this component's attributes
|
|
||||||
// Matches: tag="..." or tag='...'
|
|
||||||
const tag_attr_regex = /\btag\s*=/g;
|
|
||||||
let attr_match;
|
|
||||||
|
|
||||||
while ((attr_match = tag_attr_regex.exec(tag_attributes)) !== null) {
|
|
||||||
// Calculate the position of 'tag' within the document
|
|
||||||
const attr_start = component_match.index + component_match[0].indexOf(tag_attributes) + attr_match.index;
|
|
||||||
const attr_position = document.positionAt(attr_start);
|
|
||||||
|
|
||||||
// Push token for 'tag' attribute name
|
|
||||||
// Token type 1 maps to 'jqhtmlTagAttribute' which we'll define to be orange
|
|
||||||
tokens_builder.push(attr_position.line, attr_position.character, 3, 1, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Also match closing tags that start with uppercase letter
|
|
||||||
// Matches: </ComponentName>
|
|
||||||
const closing_tag_regex = /<\/([A-Z][a-zA-Z0-9_]*)/g;
|
|
||||||
let closing_match;
|
|
||||||
|
|
||||||
while ((closing_match = closing_tag_regex.exec(text)) !== null) {
|
|
||||||
const tag_name = closing_match[1];
|
|
||||||
const tag_start = closing_match.index + closing_match[0].indexOf(tag_name);
|
|
||||||
const position = document.positionAt(tag_start);
|
|
||||||
|
|
||||||
// Push token for the tag name
|
|
||||||
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
|
||||||
tokens_builder.push(position.line, position.character, tag_name.length, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tokens_builder.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
import * as vscode from 'vscode';
|
|
||||||
import { get_config } from './config';
|
|
||||||
|
|
||||||
const TAG_DOUBLE = 0;
|
|
||||||
const TAG_UNESCAPED = 1;
|
|
||||||
const TAG_COMMENT = 2;
|
|
||||||
|
|
||||||
const snippets: Record<number, string> = {
|
|
||||||
[TAG_DOUBLE]: '{{ ${1:${TM_SELECTED_TEXT/[{}]//g}} }}$0',
|
|
||||||
[TAG_UNESCAPED]: '{!! ${1:${TM_SELECTED_TEXT/[{} !]//g}} !!}$0',
|
|
||||||
[TAG_COMMENT]: '{{-- ${1:${TM_SELECTED_TEXT/(--)|[{} ]//g}} --}}$0',
|
|
||||||
};
|
|
||||||
|
|
||||||
const triggers = ['{}', '!', '-', '{'];
|
|
||||||
|
|
||||||
const regexes = [
|
|
||||||
/({{(?!\s|-))(.*?)(}})/,
|
|
||||||
/({!!(?!\s))(.*?)?(}?)/,
|
|
||||||
/({{[\s]?--)(.*?)?(}})/,
|
|
||||||
];
|
|
||||||
|
|
||||||
const translate = (position: vscode.Position, offset: number): vscode.Position => {
|
|
||||||
try {
|
|
||||||
return position.translate(0, offset);
|
|
||||||
} catch (error) {
|
|
||||||
// VS Code doesn't like negative numbers passed
|
|
||||||
// to translate (even though it works fine), so
|
|
||||||
// this block prevents debug console errors
|
|
||||||
}
|
|
||||||
|
|
||||||
return position;
|
|
||||||
};
|
|
||||||
|
|
||||||
const chars_for_change = (
|
|
||||||
doc: vscode.TextDocument,
|
|
||||||
change: vscode.TextDocumentContentChangeEvent
|
|
||||||
): number => {
|
|
||||||
if (change.text === '!') {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (change.text !== '-') {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
const start = translate(change.range.start, -2);
|
|
||||||
const end = translate(change.range.start, -1);
|
|
||||||
|
|
||||||
return doc.getText(new vscode.Range(start, end)) === ' ' ? 4 : 3;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const blade_spacer = async (
|
|
||||||
e: vscode.TextDocumentChangeEvent,
|
|
||||||
editor?: vscode.TextEditor
|
|
||||||
) => {
|
|
||||||
const config = get_config();
|
|
||||||
|
|
||||||
if (
|
|
||||||
!config.get('enableBladeAutoSpacing', true) ||
|
|
||||||
!editor ||
|
|
||||||
editor.document.fileName.indexOf('.blade.php') === -1
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let tag_type: number = -1;
|
|
||||||
let ranges: vscode.Range[] = [];
|
|
||||||
let offsets: number[] = [];
|
|
||||||
|
|
||||||
// Changes (per line) come in right-to-left when we need them left-to-right
|
|
||||||
const changes = e.contentChanges.slice().reverse();
|
|
||||||
|
|
||||||
changes.forEach((change) => {
|
|
||||||
if (triggers.indexOf(change.text) === -1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!offsets[change.range.start.line]) {
|
|
||||||
offsets[change.range.start.line] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const start_offset =
|
|
||||||
offsets[change.range.start.line] -
|
|
||||||
chars_for_change(e.document, change);
|
|
||||||
|
|
||||||
const start = translate(change.range.start, start_offset);
|
|
||||||
const line_end = e.document.lineAt(start.line).range.end;
|
|
||||||
|
|
||||||
for (let i = 0; i < regexes.length; i++) {
|
|
||||||
// If we typed a - or a !, don't consider the "double" tag type
|
|
||||||
if (i === TAG_DOUBLE && ['-', '!'].indexOf(change.text) !== -1) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only look at unescaped tags if we need to
|
|
||||||
if (i === TAG_UNESCAPED && change.text !== '!') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only look at comment tags if we need to
|
|
||||||
if (i === TAG_COMMENT && change.text !== '-') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const tag = regexes[i].exec(
|
|
||||||
e.document.getText(new vscode.Range(start, line_end))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (tag) {
|
|
||||||
tag_type = i;
|
|
||||||
ranges.push(
|
|
||||||
new vscode.Range(start, start.translate(0, tag[0].length))
|
|
||||||
);
|
|
||||||
offsets[start.line] += tag[1].length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (ranges.length > 0 && snippets[tag_type]) {
|
|
||||||
editor.insertSnippet(new vscode.SnippetString(snippets[tag_type]), ranges);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -7,14 +7,11 @@ import { RspadeDefinitionProvider } from './definition_provider';
|
|||||||
import { DebugClient } from './debug_client';
|
import { DebugClient } from './debug_client';
|
||||||
import { get_config } from './config';
|
import { get_config } from './config';
|
||||||
import { LaravelCompletionProvider } from './laravel_completion_provider';
|
import { LaravelCompletionProvider } from './laravel_completion_provider';
|
||||||
import { blade_spacer } from './blade_spacer';
|
|
||||||
import { init_blade_language_config } from './blade_client';
|
|
||||||
import { ConventionMethodHoverProvider, ConventionMethodDiagnosticProvider, ConventionMethodDefinitionProvider } from './convention_method_provider';
|
import { ConventionMethodHoverProvider, ConventionMethodDiagnosticProvider, ConventionMethodDefinitionProvider } from './convention_method_provider';
|
||||||
import { CommentFileReferenceDefinitionProvider } from './comment_file_reference_provider';
|
import { CommentFileReferenceDefinitionProvider } from './comment_file_reference_provider';
|
||||||
import { JqhtmlLifecycleHoverProvider, JqhtmlLifecycleDiagnosticProvider } from './jqhtml_lifecycle_provider';
|
import { JqhtmlLifecycleHoverProvider, JqhtmlLifecycleDiagnosticProvider } from './jqhtml_lifecycle_provider';
|
||||||
import { CombinedSemanticTokensProvider } from './combined_semantic_provider';
|
import { CombinedSemanticTokensProvider } from './combined_semantic_provider';
|
||||||
import { PhpAttributeSemanticTokensProvider } from './php_attribute_provider';
|
import { PhpAttributeSemanticTokensProvider } from './php_attribute_provider';
|
||||||
import { BladeComponentSemanticTokensProvider } from './blade_component_provider';
|
|
||||||
import { AutoRenameProvider } from './auto_rename_provider';
|
import { AutoRenameProvider } from './auto_rename_provider';
|
||||||
import { FolderColorProvider } from './folder_color_provider';
|
import { FolderColorProvider } from './folder_color_provider';
|
||||||
import { GitStatusProvider } from './git_status_provider';
|
import { GitStatusProvider } from './git_status_provider';
|
||||||
@@ -255,18 +252,6 @@ export async function activate(context: vscode.ExtensionContext) {
|
|||||||
|
|
||||||
console.log('RSpade formatter registered for PHP files');
|
console.log('RSpade formatter registered for PHP files');
|
||||||
|
|
||||||
// Initialize Blade language configuration (indentation, auto-closing)
|
|
||||||
init_blade_language_config();
|
|
||||||
console.log('Blade language configuration initialized');
|
|
||||||
|
|
||||||
// Register Blade auto-spacing on text change
|
|
||||||
context.subscriptions.push(
|
|
||||||
vscode.workspace.onDidChangeTextDocument((event) => {
|
|
||||||
blade_spacer(event, vscode.window.activeTextEditor);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
console.log('Blade auto-spacing enabled');
|
|
||||||
|
|
||||||
// Register definition provider for JavaScript/TypeScript and PHP/Blade/jqhtml files
|
// Register definition provider for JavaScript/TypeScript and PHP/Blade/jqhtml files
|
||||||
context.subscriptions.push(
|
context.subscriptions.push(
|
||||||
vscode.languages.registerDefinitionProvider(
|
vscode.languages.registerDefinitionProvider(
|
||||||
@@ -372,19 +357,6 @@ export async function activate(context: vscode.ExtensionContext) {
|
|||||||
|
|
||||||
console.log('PHP attribute provider registered for PHP files');
|
console.log('PHP attribute provider registered for PHP files');
|
||||||
|
|
||||||
// Register Blade component provider for uppercase component tags
|
|
||||||
const blade_component_provider = new BladeComponentSemanticTokensProvider();
|
|
||||||
|
|
||||||
context.subscriptions.push(
|
|
||||||
vscode.languages.registerDocumentSemanticTokensProvider(
|
|
||||||
[{ language: 'blade' }, { pattern: '**/*.blade.php' }],
|
|
||||||
blade_component_provider,
|
|
||||||
new vscode.SemanticTokensLegend(['class', 'jqhtmlTagAttribute'])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
console.log('Blade component provider registered for Blade files');
|
|
||||||
|
|
||||||
// Debug client disabled
|
// Debug client disabled
|
||||||
// debug_client = new DebugClient(formatting_provider as any);
|
// debug_client = new DebugClient(formatting_provider as any);
|
||||||
// debug_client.start().catch(error => {
|
// debug_client.start().catch(error => {
|
||||||
|
|||||||
38
node_modules/.package-lock.json
generated
vendored
38
node_modules/.package-lock.json
generated
vendored
@@ -2211,9 +2211,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/core": {
|
"node_modules/@jqhtml/core": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/core/-/core-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/core/-/core-2.3.4.tgz",
|
||||||
"integrity": "sha512-cO5iO9VjHqeOZhdz+WD0rCb+mvS2U6eHMWRrkrTS4F3RmYrUOPk+8KUpeWUXkND4D+JnK9iMmLWY1+WjQHDVFQ==",
|
"integrity": "sha512-RQLviu8NcIxrnd1cUOE8HNPmwWT/kVliwHl91zqYaYw3cXstF2PG9OxbRtiUWAdbOxuqJSLkELrXLG+4cr1o9w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||||
@@ -2237,9 +2237,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/parser": {
|
"node_modules/@jqhtml/parser": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/parser/-/parser-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/parser/-/parser-2.3.4.tgz",
|
||||||
"integrity": "sha512-jEF+HfOMRwkZ9lVWO7+wKMKDXsI51R5g0qq2trqTXAOs2aNnDtrJV9yqY1LWXMdi1h2iV5AJhbkvAZS1p9gzSw==",
|
"integrity": "sha512-jFc7RtmxMdt8ewJmuq6lw74c3dMHqaZ9BXUX3czwtU4w1ZxkLkppEhTmrm+wtQ7/rdK6jsfvL4W++wrXQtoclA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/jest": "^29.5.11",
|
"@types/jest": "^29.5.11",
|
||||||
@@ -2277,21 +2277,21 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/vscode-extension": {
|
"node_modules/@jqhtml/vscode-extension": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/vscode-extension/-/vscode-extension-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/vscode-extension/-/vscode-extension-2.3.4.tgz",
|
||||||
"integrity": "sha512-o5WAF3JMgMjORImpCvS5yCSnduS1iQJOjzNDjHMzFglZIB1lfyzq9VV7n3ykQVLmRUBB3p1tyPUe6R08b+7Txw==",
|
"integrity": "sha512-AU3M2yD4tiGKcfkW2cBtO26yKzdJj5+Af1BBoblnr1zqPzlTyLaZapoLPL/bEpSwnaFB5I3XqKuBj2sKSDE30Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"vscode": "^1.74.0"
|
"vscode": "^1.74.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/webpack-loader": {
|
"node_modules/@jqhtml/webpack-loader": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/webpack-loader/-/webpack-loader-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/webpack-loader/-/webpack-loader-2.3.4.tgz",
|
||||||
"integrity": "sha512-6ucNvup5MJ9w6UCjL6nvKKRHfrCipqC0qLApxeTToQROY/16vZ/YbLj4ZgzsrUfu656bSYlcWG/OBrUfxUZnog==",
|
"integrity": "sha512-QYanMVtRQ6Y5Xuw/AfZFdbSwMWnLBKo53/mpQtOEqdY1+cMCcbt/C3oxz8fJaCzAXWmxOZVqxU7kNxZ1YihRtQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jqhtml/parser": "2.2.222",
|
"@jqhtml/parser": "2.3.4",
|
||||||
"@types/loader-utils": "^2.0.6",
|
"@types/loader-utils": "^2.0.6",
|
||||||
"@types/node": "^20.0.0",
|
"@types/node": "^20.0.0",
|
||||||
"@types/webpack": "^5.28.5",
|
"@types/webpack": "^5.28.5",
|
||||||
@@ -4395,9 +4395,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001756",
|
"version": "1.0.30001757",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz",
|
||||||
"integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==",
|
"integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -5657,9 +5657,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.259",
|
"version": "1.5.260",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz",
|
||||||
"integrity": "sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==",
|
"integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/elliptic": {
|
"node_modules/elliptic": {
|
||||||
|
|||||||
20
node_modules/@jqhtml/core/dist/boot.d.ts
generated
vendored
Normal file
20
node_modules/@jqhtml/core/dist/boot.d.ts
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* JQHTML Boot - Component Hydration System
|
||||||
|
*
|
||||||
|
* Bridges server-rendered HTML and client-side jqhtml components.
|
||||||
|
*
|
||||||
|
* Server output: <div class="_Component_Init" data-component-init-name="User_Card" data-component-args='{"id":1}'></div>
|
||||||
|
* After boot(): <div class="User_Card Component">...rendered template...</div>
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* await jqhtml.boot(); // Hydrate all placeholders, wait for ready
|
||||||
|
* jqhtml.boot($('#container')); // Hydrate within scope
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Hydrate all _Component_Init placeholders within a scope.
|
||||||
|
*
|
||||||
|
* @param scope - jQuery object, HTMLElement, or undefined (defaults to body)
|
||||||
|
* @returns Promise that resolves when all components (including nested) are ready
|
||||||
|
*/
|
||||||
|
export declare function boot(scope?: any): Promise<void[]>;
|
||||||
|
//# sourceMappingURL=boot.d.ts.map
|
||||||
1
node_modules/@jqhtml/core/dist/boot.d.ts.map
generated
vendored
Normal file
1
node_modules/@jqhtml/core/dist/boot.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"boot.d.ts","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAiDjD"}
|
||||||
2
node_modules/@jqhtml/core/dist/component.d.ts.map
generated
vendored
2
node_modules/@jqhtml/core/dist/component.d.ts.map
generated
vendored
@@ -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":"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"}
|
||||||
145
node_modules/@jqhtml/core/dist/index.cjs
generated
vendored
145
node_modules/@jqhtml/core/dist/index.cjs
generated
vendored
@@ -1852,6 +1852,14 @@ class Jqhtml_Component {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
async _wait_for_children_ready() {
|
async _wait_for_children_ready() {
|
||||||
|
// Server-rendered components (created via jqhtml.boot()) may have children
|
||||||
|
// that were hydrated asynchronously during the 'render' event callback.
|
||||||
|
// Those children couldn't register via _find_dom_parent() because they were
|
||||||
|
// created after the parent's lifecycle started. Force DOM traversal fallback
|
||||||
|
// to reliably discover all children, including boot-hydrated ones.
|
||||||
|
if (this.args._inner_html !== undefined) {
|
||||||
|
this._use_dom_fallback = true;
|
||||||
|
}
|
||||||
const children = this._get_dom_children();
|
const children = this._get_dom_children();
|
||||||
if (children.length === 0) {
|
if (children.length === 0) {
|
||||||
return; // No children, nothing to wait for
|
return; // No children, nothing to wait for
|
||||||
@@ -2957,6 +2965,136 @@ function escape_html(str) {
|
|||||||
return div.innerHTML;
|
return div.innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JQHTML Boot - Component Hydration System
|
||||||
|
*
|
||||||
|
* Bridges server-rendered HTML and client-side jqhtml components.
|
||||||
|
*
|
||||||
|
* Server output: <div class="_Component_Init" data-component-init-name="User_Card" data-component-args='{"id":1}'></div>
|
||||||
|
* After boot(): <div class="User_Card Component">...rendered template...</div>
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* await jqhtml.boot(); // Hydrate all placeholders, wait for ready
|
||||||
|
* jqhtml.boot($('#container')); // Hydrate within scope
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Hydrate all _Component_Init placeholders within a scope.
|
||||||
|
*
|
||||||
|
* @param scope - jQuery object, HTMLElement, or undefined (defaults to body)
|
||||||
|
* @returns Promise that resolves when all components (including nested) are ready
|
||||||
|
*/
|
||||||
|
function boot(scope) {
|
||||||
|
const jQ = typeof jQuery !== 'undefined' ? jQuery : $;
|
||||||
|
if (!scope) {
|
||||||
|
scope = jQ('body');
|
||||||
|
}
|
||||||
|
else if (!(scope instanceof jQ)) {
|
||||||
|
scope = jQ(scope);
|
||||||
|
}
|
||||||
|
const readyPromises = [];
|
||||||
|
// Find top-level placeholders only (skip those nested inside other placeholders)
|
||||||
|
scope.find('._Component_Init').each(function () {
|
||||||
|
const $element = jQ(this);
|
||||||
|
// Skip if removed from DOM
|
||||||
|
if (!document.contains($element[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Skip nested placeholders - they'll be hydrated by parent's render callback
|
||||||
|
let parent = $element[0].parentElement;
|
||||||
|
while (parent) {
|
||||||
|
if (parent.classList.contains('_Component_Init')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parent = parent.parentElement;
|
||||||
|
}
|
||||||
|
// Hydrate this placeholder
|
||||||
|
const component = hydrateElement($element);
|
||||||
|
if (!component)
|
||||||
|
return;
|
||||||
|
// On render, recursively hydrate any nested placeholders
|
||||||
|
component.on('render', function () {
|
||||||
|
hydrateNested(component.$, jQ);
|
||||||
|
});
|
||||||
|
// Collect ready promise - parent.ready() waits for all children via _wait_for_children_ready()
|
||||||
|
readyPromises.push(component.ready());
|
||||||
|
});
|
||||||
|
// Fire jqhtml:ready event when all top-level components are ready
|
||||||
|
const result = Promise.all(readyPromises);
|
||||||
|
result.then(() => {
|
||||||
|
document.dispatchEvent(new CustomEvent('jqhtml:ready'));
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Hydrate nested _Component_Init placeholders within a component's DOM.
|
||||||
|
* Called from parent's 'render' event.
|
||||||
|
*/
|
||||||
|
function hydrateNested($scope, jQ) {
|
||||||
|
$scope.find('._Component_Init').each(function () {
|
||||||
|
const $element = jQ(this);
|
||||||
|
if (!document.contains($element[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Skip if nested inside another placeholder
|
||||||
|
let parent = $element[0].parentElement;
|
||||||
|
while (parent && parent !== $scope[0]) {
|
||||||
|
if (parent.classList.contains('_Component_Init')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parent = parent.parentElement;
|
||||||
|
}
|
||||||
|
const component = hydrateElement($element);
|
||||||
|
if (!component)
|
||||||
|
return;
|
||||||
|
// Recursively handle deeper nesting
|
||||||
|
component.on('render', function () {
|
||||||
|
hydrateNested(component.$, jQ);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Hydrate a single _Component_Init element into a live component.
|
||||||
|
*/
|
||||||
|
function hydrateElement($element, jQ) {
|
||||||
|
const componentName = $element.attr('data-component-init-name');
|
||||||
|
if (!componentName)
|
||||||
|
return null;
|
||||||
|
// Parse args
|
||||||
|
const argsString = $element.attr('data-component-args');
|
||||||
|
let args = {};
|
||||||
|
if (argsString) {
|
||||||
|
try {
|
||||||
|
args = JSON.parse(argsString);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.error(`[jqhtml.boot] Failed to parse args for ${componentName}:`, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Strip data- prefix from args if present
|
||||||
|
const filteredArgs = {};
|
||||||
|
for (const [key, value] of Object.entries(args)) {
|
||||||
|
filteredArgs[key.startsWith('data-') ? key.substring(5) : key] = value;
|
||||||
|
}
|
||||||
|
// Capture innerHTML for content() and mark as boot-created
|
||||||
|
filteredArgs._inner_html = $element.html();
|
||||||
|
filteredArgs._component_name = componentName;
|
||||||
|
// Cleanup placeholder
|
||||||
|
$element.removeAttr('data-component-init-name');
|
||||||
|
$element.removeAttr('data-component-args');
|
||||||
|
$element.removeData('component-init-name');
|
||||||
|
$element.removeData('component-args');
|
||||||
|
$element.removeClass('_Component_Init');
|
||||||
|
$element.empty();
|
||||||
|
// Create component
|
||||||
|
try {
|
||||||
|
return $element.component(componentName, filteredArgs).component();
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(`[jqhtml.boot] Failed to create ${componentName}:`, error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JQHTML Debug Overlay
|
* JQHTML Debug Overlay
|
||||||
*
|
*
|
||||||
@@ -4237,7 +4375,7 @@ function init(jQuery) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Version - will be replaced during build with actual version from package.json
|
// Version - will be replaced during build with actual version from package.json
|
||||||
const version = '2.2.222';
|
const version = '2.3.4';
|
||||||
// Default export with all functionality
|
// Default export with all functionality
|
||||||
const jqhtml = {
|
const jqhtml = {
|
||||||
// Core
|
// Core
|
||||||
@@ -4329,7 +4467,9 @@ const jqhtml = {
|
|||||||
// Cache key setter - enables component caching via local storage
|
// Cache key setter - enables component caching via local storage
|
||||||
set_cache_key(cache_key) {
|
set_cache_key(cache_key) {
|
||||||
Jqhtml_Local_Storage.set_cache_key(cache_key);
|
Jqhtml_Local_Storage.set_cache_key(cache_key);
|
||||||
}
|
},
|
||||||
|
// Boot - hydrate server-rendered component placeholders
|
||||||
|
boot
|
||||||
};
|
};
|
||||||
// Auto-register on window for browser environments
|
// Auto-register on window for browser environments
|
||||||
// This is REQUIRED for compiled templates which use window.jqhtml.register_template()
|
// This is REQUIRED for compiled templates which use window.jqhtml.register_template()
|
||||||
@@ -4354,6 +4494,7 @@ exports.Jqhtml_Local_Storage = Jqhtml_Local_Storage;
|
|||||||
exports.LifecycleManager = LifecycleManager;
|
exports.LifecycleManager = LifecycleManager;
|
||||||
exports.Load_Coordinator = Load_Coordinator;
|
exports.Load_Coordinator = Load_Coordinator;
|
||||||
exports.applyDebugDelay = applyDebugDelay;
|
exports.applyDebugDelay = applyDebugDelay;
|
||||||
|
exports.boot = boot;
|
||||||
exports.create_component = create_component;
|
exports.create_component = create_component;
|
||||||
exports.default = jqhtml;
|
exports.default = jqhtml;
|
||||||
exports.devWarn = devWarn;
|
exports.devWarn = devWarn;
|
||||||
|
|||||||
2
node_modules/@jqhtml/core/dist/index.cjs.map
generated
vendored
2
node_modules/@jqhtml/core/dist/index.cjs.map
generated
vendored
File diff suppressed because one or more lines are too long
3
node_modules/@jqhtml/core/dist/index.d.ts
generated
vendored
3
node_modules/@jqhtml/core/dist/index.d.ts
generated
vendored
@@ -11,6 +11,7 @@ export type { ComponentConstructor, TemplateFunction, TemplateDefinition } from
|
|||||||
export { process_instructions, extract_slots } from './instruction-processor.js';
|
export { process_instructions, extract_slots } from './instruction-processor.js';
|
||||||
export type { Instruction, TagInstruction, ComponentInstruction, SlotInstruction } from './instruction-processor.js';
|
export type { Instruction, TagInstruction, ComponentInstruction, SlotInstruction } from './instruction-processor.js';
|
||||||
export { render_template, escape_html } from './template-renderer.js';
|
export { render_template, escape_html } from './template-renderer.js';
|
||||||
|
export { boot } from './boot.js';
|
||||||
export { logLifecycle, applyDebugDelay, logDispatch, logInstruction, logDataChange, isSequentialProcessing, handleComponentError, devWarn } from './debug.js';
|
export { logLifecycle, applyDebugDelay, logDispatch, logInstruction, logDataChange, isSequentialProcessing, handleComponentError, devWarn } from './debug.js';
|
||||||
export { DebugOverlay, showDebugOverlay, hideDebugOverlay } from './debug-overlay.js';
|
export { DebugOverlay, showDebugOverlay, hideDebugOverlay } from './debug-overlay.js';
|
||||||
export type { DebugOverlayOptions } from './debug-overlay.js';
|
export type { DebugOverlayOptions } from './debug-overlay.js';
|
||||||
@@ -23,6 +24,7 @@ import { LifecycleManager } from './lifecycle-manager.js';
|
|||||||
import { register_component, get_component_class, register_template, get_template, get_template_by_class, create_component, has_component, get_component_names, get_registered_templates, list_components } from './component-registry.js';
|
import { register_component, get_component_class, register_template, get_template, get_template_by_class, create_component, has_component, get_component_names, get_registered_templates, list_components } from './component-registry.js';
|
||||||
import { process_instructions, extract_slots } from './instruction-processor.js';
|
import { process_instructions, extract_slots } from './instruction-processor.js';
|
||||||
import { render_template, escape_html } from './template-renderer.js';
|
import { render_template, escape_html } from './template-renderer.js';
|
||||||
|
import { boot } from './boot.js';
|
||||||
import { DebugOverlay } from './debug-overlay.js';
|
import { DebugOverlay } from './debug-overlay.js';
|
||||||
import './jquery-plugin.js';
|
import './jquery-plugin.js';
|
||||||
import { Jqhtml_Local_Storage } from './local-storage.js';
|
import { Jqhtml_Local_Storage } from './local-storage.js';
|
||||||
@@ -86,6 +88,7 @@ declare const jqhtml: {
|
|||||||
_version(): any;
|
_version(): any;
|
||||||
version(): string;
|
version(): string;
|
||||||
set_cache_key(cache_key: string): void;
|
set_cache_key(cache_key: string): void;
|
||||||
|
boot: typeof boot;
|
||||||
};
|
};
|
||||||
export default jqhtml;
|
export default jqhtml;
|
||||||
//# sourceMappingURL=index.d.ts.map
|
//# sourceMappingURL=index.d.ts.map
|
||||||
2
node_modules/@jqhtml/core/dist/index.d.ts.map
generated
vendored
2
node_modules/@jqhtml/core/dist/index.d.ts.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
||||||
146
node_modules/@jqhtml/core/dist/index.js
generated
vendored
146
node_modules/@jqhtml/core/dist/index.js
generated
vendored
@@ -1848,6 +1848,14 @@ class Jqhtml_Component {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
async _wait_for_children_ready() {
|
async _wait_for_children_ready() {
|
||||||
|
// Server-rendered components (created via jqhtml.boot()) may have children
|
||||||
|
// that were hydrated asynchronously during the 'render' event callback.
|
||||||
|
// Those children couldn't register via _find_dom_parent() because they were
|
||||||
|
// created after the parent's lifecycle started. Force DOM traversal fallback
|
||||||
|
// to reliably discover all children, including boot-hydrated ones.
|
||||||
|
if (this.args._inner_html !== undefined) {
|
||||||
|
this._use_dom_fallback = true;
|
||||||
|
}
|
||||||
const children = this._get_dom_children();
|
const children = this._get_dom_children();
|
||||||
if (children.length === 0) {
|
if (children.length === 0) {
|
||||||
return; // No children, nothing to wait for
|
return; // No children, nothing to wait for
|
||||||
@@ -2953,6 +2961,136 @@ function escape_html(str) {
|
|||||||
return div.innerHTML;
|
return div.innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JQHTML Boot - Component Hydration System
|
||||||
|
*
|
||||||
|
* Bridges server-rendered HTML and client-side jqhtml components.
|
||||||
|
*
|
||||||
|
* Server output: <div class="_Component_Init" data-component-init-name="User_Card" data-component-args='{"id":1}'></div>
|
||||||
|
* After boot(): <div class="User_Card Component">...rendered template...</div>
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* await jqhtml.boot(); // Hydrate all placeholders, wait for ready
|
||||||
|
* jqhtml.boot($('#container')); // Hydrate within scope
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Hydrate all _Component_Init placeholders within a scope.
|
||||||
|
*
|
||||||
|
* @param scope - jQuery object, HTMLElement, or undefined (defaults to body)
|
||||||
|
* @returns Promise that resolves when all components (including nested) are ready
|
||||||
|
*/
|
||||||
|
function boot(scope) {
|
||||||
|
const jQ = typeof jQuery !== 'undefined' ? jQuery : $;
|
||||||
|
if (!scope) {
|
||||||
|
scope = jQ('body');
|
||||||
|
}
|
||||||
|
else if (!(scope instanceof jQ)) {
|
||||||
|
scope = jQ(scope);
|
||||||
|
}
|
||||||
|
const readyPromises = [];
|
||||||
|
// Find top-level placeholders only (skip those nested inside other placeholders)
|
||||||
|
scope.find('._Component_Init').each(function () {
|
||||||
|
const $element = jQ(this);
|
||||||
|
// Skip if removed from DOM
|
||||||
|
if (!document.contains($element[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Skip nested placeholders - they'll be hydrated by parent's render callback
|
||||||
|
let parent = $element[0].parentElement;
|
||||||
|
while (parent) {
|
||||||
|
if (parent.classList.contains('_Component_Init')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parent = parent.parentElement;
|
||||||
|
}
|
||||||
|
// Hydrate this placeholder
|
||||||
|
const component = hydrateElement($element);
|
||||||
|
if (!component)
|
||||||
|
return;
|
||||||
|
// On render, recursively hydrate any nested placeholders
|
||||||
|
component.on('render', function () {
|
||||||
|
hydrateNested(component.$, jQ);
|
||||||
|
});
|
||||||
|
// Collect ready promise - parent.ready() waits for all children via _wait_for_children_ready()
|
||||||
|
readyPromises.push(component.ready());
|
||||||
|
});
|
||||||
|
// Fire jqhtml:ready event when all top-level components are ready
|
||||||
|
const result = Promise.all(readyPromises);
|
||||||
|
result.then(() => {
|
||||||
|
document.dispatchEvent(new CustomEvent('jqhtml:ready'));
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Hydrate nested _Component_Init placeholders within a component's DOM.
|
||||||
|
* Called from parent's 'render' event.
|
||||||
|
*/
|
||||||
|
function hydrateNested($scope, jQ) {
|
||||||
|
$scope.find('._Component_Init').each(function () {
|
||||||
|
const $element = jQ(this);
|
||||||
|
if (!document.contains($element[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Skip if nested inside another placeholder
|
||||||
|
let parent = $element[0].parentElement;
|
||||||
|
while (parent && parent !== $scope[0]) {
|
||||||
|
if (parent.classList.contains('_Component_Init')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parent = parent.parentElement;
|
||||||
|
}
|
||||||
|
const component = hydrateElement($element);
|
||||||
|
if (!component)
|
||||||
|
return;
|
||||||
|
// Recursively handle deeper nesting
|
||||||
|
component.on('render', function () {
|
||||||
|
hydrateNested(component.$, jQ);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Hydrate a single _Component_Init element into a live component.
|
||||||
|
*/
|
||||||
|
function hydrateElement($element, jQ) {
|
||||||
|
const componentName = $element.attr('data-component-init-name');
|
||||||
|
if (!componentName)
|
||||||
|
return null;
|
||||||
|
// Parse args
|
||||||
|
const argsString = $element.attr('data-component-args');
|
||||||
|
let args = {};
|
||||||
|
if (argsString) {
|
||||||
|
try {
|
||||||
|
args = JSON.parse(argsString);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.error(`[jqhtml.boot] Failed to parse args for ${componentName}:`, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Strip data- prefix from args if present
|
||||||
|
const filteredArgs = {};
|
||||||
|
for (const [key, value] of Object.entries(args)) {
|
||||||
|
filteredArgs[key.startsWith('data-') ? key.substring(5) : key] = value;
|
||||||
|
}
|
||||||
|
// Capture innerHTML for content() and mark as boot-created
|
||||||
|
filteredArgs._inner_html = $element.html();
|
||||||
|
filteredArgs._component_name = componentName;
|
||||||
|
// Cleanup placeholder
|
||||||
|
$element.removeAttr('data-component-init-name');
|
||||||
|
$element.removeAttr('data-component-args');
|
||||||
|
$element.removeData('component-init-name');
|
||||||
|
$element.removeData('component-args');
|
||||||
|
$element.removeClass('_Component_Init');
|
||||||
|
$element.empty();
|
||||||
|
// Create component
|
||||||
|
try {
|
||||||
|
return $element.component(componentName, filteredArgs).component();
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(`[jqhtml.boot] Failed to create ${componentName}:`, error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JQHTML Debug Overlay
|
* JQHTML Debug Overlay
|
||||||
*
|
*
|
||||||
@@ -4233,7 +4371,7 @@ function init(jQuery) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Version - will be replaced during build with actual version from package.json
|
// Version - will be replaced during build with actual version from package.json
|
||||||
const version = '2.2.222';
|
const version = '2.3.4';
|
||||||
// Default export with all functionality
|
// Default export with all functionality
|
||||||
const jqhtml = {
|
const jqhtml = {
|
||||||
// Core
|
// Core
|
||||||
@@ -4325,7 +4463,9 @@ const jqhtml = {
|
|||||||
// Cache key setter - enables component caching via local storage
|
// Cache key setter - enables component caching via local storage
|
||||||
set_cache_key(cache_key) {
|
set_cache_key(cache_key) {
|
||||||
Jqhtml_Local_Storage.set_cache_key(cache_key);
|
Jqhtml_Local_Storage.set_cache_key(cache_key);
|
||||||
}
|
},
|
||||||
|
// Boot - hydrate server-rendered component placeholders
|
||||||
|
boot
|
||||||
};
|
};
|
||||||
// Auto-register on window for browser environments
|
// Auto-register on window for browser environments
|
||||||
// This is REQUIRED for compiled templates which use window.jqhtml.register_template()
|
// This is REQUIRED for compiled templates which use window.jqhtml.register_template()
|
||||||
@@ -4343,5 +4483,5 @@ if (typeof window !== 'undefined' && !window.jqhtml) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { DebugOverlay, Jqhtml_Component, LifecycleManager as Jqhtml_LifecycleManager, Jqhtml_Local_Storage, LifecycleManager, Load_Coordinator, applyDebugDelay, create_component, jqhtml as default, devWarn, escape_html, extract_slots, get_component_class, get_component_names, get_registered_templates, get_template, get_template_by_class, handleComponentError, has_component, hideDebugOverlay, init, init_jquery_plugin, isSequentialProcessing, list_components, logDataChange, logDispatch, logInstruction, logLifecycle, process_instructions, register_component, register_template, render_template, showDebugOverlay, version };
|
export { DebugOverlay, Jqhtml_Component, LifecycleManager as Jqhtml_LifecycleManager, Jqhtml_Local_Storage, LifecycleManager, Load_Coordinator, applyDebugDelay, boot, create_component, jqhtml as default, devWarn, escape_html, extract_slots, get_component_class, get_component_names, get_registered_templates, get_template, get_template_by_class, handleComponentError, has_component, hideDebugOverlay, init, init_jquery_plugin, isSequentialProcessing, list_components, logDataChange, logDispatch, logInstruction, logLifecycle, process_instructions, register_component, register_template, render_template, showDebugOverlay, version };
|
||||||
//# sourceMappingURL=index.js.map
|
//# sourceMappingURL=index.js.map
|
||||||
|
|||||||
2
node_modules/@jqhtml/core/dist/index.js.map
generated
vendored
2
node_modules/@jqhtml/core/dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
148
node_modules/@jqhtml/core/dist/jqhtml-core.esm.js
generated
vendored
148
node_modules/@jqhtml/core/dist/jqhtml-core.esm.js
generated
vendored
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* JQHTML Core v2.2.222
|
* JQHTML Core v2.3.4
|
||||||
* (c) 2025 JQHTML Team
|
* (c) 2025 JQHTML Team
|
||||||
* Released under the MIT License
|
* Released under the MIT License
|
||||||
*/
|
*/
|
||||||
@@ -1853,6 +1853,14 @@ class Jqhtml_Component {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
async _wait_for_children_ready() {
|
async _wait_for_children_ready() {
|
||||||
|
// Server-rendered components (created via jqhtml.boot()) may have children
|
||||||
|
// that were hydrated asynchronously during the 'render' event callback.
|
||||||
|
// Those children couldn't register via _find_dom_parent() because they were
|
||||||
|
// created after the parent's lifecycle started. Force DOM traversal fallback
|
||||||
|
// to reliably discover all children, including boot-hydrated ones.
|
||||||
|
if (this.args._inner_html !== undefined) {
|
||||||
|
this._use_dom_fallback = true;
|
||||||
|
}
|
||||||
const children = this._get_dom_children();
|
const children = this._get_dom_children();
|
||||||
if (children.length === 0) {
|
if (children.length === 0) {
|
||||||
return; // No children, nothing to wait for
|
return; // No children, nothing to wait for
|
||||||
@@ -2958,6 +2966,136 @@ function escape_html(str) {
|
|||||||
return div.innerHTML;
|
return div.innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JQHTML Boot - Component Hydration System
|
||||||
|
*
|
||||||
|
* Bridges server-rendered HTML and client-side jqhtml components.
|
||||||
|
*
|
||||||
|
* Server output: <div class="_Component_Init" data-component-init-name="User_Card" data-component-args='{"id":1}'></div>
|
||||||
|
* After boot(): <div class="User_Card Component">...rendered template...</div>
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* await jqhtml.boot(); // Hydrate all placeholders, wait for ready
|
||||||
|
* jqhtml.boot($('#container')); // Hydrate within scope
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Hydrate all _Component_Init placeholders within a scope.
|
||||||
|
*
|
||||||
|
* @param scope - jQuery object, HTMLElement, or undefined (defaults to body)
|
||||||
|
* @returns Promise that resolves when all components (including nested) are ready
|
||||||
|
*/
|
||||||
|
function boot(scope) {
|
||||||
|
const jQ = typeof jQuery !== 'undefined' ? jQuery : $;
|
||||||
|
if (!scope) {
|
||||||
|
scope = jQ('body');
|
||||||
|
}
|
||||||
|
else if (!(scope instanceof jQ)) {
|
||||||
|
scope = jQ(scope);
|
||||||
|
}
|
||||||
|
const readyPromises = [];
|
||||||
|
// Find top-level placeholders only (skip those nested inside other placeholders)
|
||||||
|
scope.find('._Component_Init').each(function () {
|
||||||
|
const $element = jQ(this);
|
||||||
|
// Skip if removed from DOM
|
||||||
|
if (!document.contains($element[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Skip nested placeholders - they'll be hydrated by parent's render callback
|
||||||
|
let parent = $element[0].parentElement;
|
||||||
|
while (parent) {
|
||||||
|
if (parent.classList.contains('_Component_Init')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parent = parent.parentElement;
|
||||||
|
}
|
||||||
|
// Hydrate this placeholder
|
||||||
|
const component = hydrateElement($element);
|
||||||
|
if (!component)
|
||||||
|
return;
|
||||||
|
// On render, recursively hydrate any nested placeholders
|
||||||
|
component.on('render', function () {
|
||||||
|
hydrateNested(component.$, jQ);
|
||||||
|
});
|
||||||
|
// Collect ready promise - parent.ready() waits for all children via _wait_for_children_ready()
|
||||||
|
readyPromises.push(component.ready());
|
||||||
|
});
|
||||||
|
// Fire jqhtml:ready event when all top-level components are ready
|
||||||
|
const result = Promise.all(readyPromises);
|
||||||
|
result.then(() => {
|
||||||
|
document.dispatchEvent(new CustomEvent('jqhtml:ready'));
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Hydrate nested _Component_Init placeholders within a component's DOM.
|
||||||
|
* Called from parent's 'render' event.
|
||||||
|
*/
|
||||||
|
function hydrateNested($scope, jQ) {
|
||||||
|
$scope.find('._Component_Init').each(function () {
|
||||||
|
const $element = jQ(this);
|
||||||
|
if (!document.contains($element[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Skip if nested inside another placeholder
|
||||||
|
let parent = $element[0].parentElement;
|
||||||
|
while (parent && parent !== $scope[0]) {
|
||||||
|
if (parent.classList.contains('_Component_Init')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parent = parent.parentElement;
|
||||||
|
}
|
||||||
|
const component = hydrateElement($element);
|
||||||
|
if (!component)
|
||||||
|
return;
|
||||||
|
// Recursively handle deeper nesting
|
||||||
|
component.on('render', function () {
|
||||||
|
hydrateNested(component.$, jQ);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Hydrate a single _Component_Init element into a live component.
|
||||||
|
*/
|
||||||
|
function hydrateElement($element, jQ) {
|
||||||
|
const componentName = $element.attr('data-component-init-name');
|
||||||
|
if (!componentName)
|
||||||
|
return null;
|
||||||
|
// Parse args
|
||||||
|
const argsString = $element.attr('data-component-args');
|
||||||
|
let args = {};
|
||||||
|
if (argsString) {
|
||||||
|
try {
|
||||||
|
args = JSON.parse(argsString);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.error(`[jqhtml.boot] Failed to parse args for ${componentName}:`, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Strip data- prefix from args if present
|
||||||
|
const filteredArgs = {};
|
||||||
|
for (const [key, value] of Object.entries(args)) {
|
||||||
|
filteredArgs[key.startsWith('data-') ? key.substring(5) : key] = value;
|
||||||
|
}
|
||||||
|
// Capture innerHTML for content() and mark as boot-created
|
||||||
|
filteredArgs._inner_html = $element.html();
|
||||||
|
filteredArgs._component_name = componentName;
|
||||||
|
// Cleanup placeholder
|
||||||
|
$element.removeAttr('data-component-init-name');
|
||||||
|
$element.removeAttr('data-component-args');
|
||||||
|
$element.removeData('component-init-name');
|
||||||
|
$element.removeData('component-args');
|
||||||
|
$element.removeClass('_Component_Init');
|
||||||
|
$element.empty();
|
||||||
|
// Create component
|
||||||
|
try {
|
||||||
|
return $element.component(componentName, filteredArgs).component();
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
console.error(`[jqhtml.boot] Failed to create ${componentName}:`, error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JQHTML Debug Overlay
|
* JQHTML Debug Overlay
|
||||||
*
|
*
|
||||||
@@ -4238,7 +4376,7 @@ function init(jQuery) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Version - will be replaced during build with actual version from package.json
|
// Version - will be replaced during build with actual version from package.json
|
||||||
const version = '2.2.222';
|
const version = '2.3.4';
|
||||||
// Default export with all functionality
|
// Default export with all functionality
|
||||||
const jqhtml = {
|
const jqhtml = {
|
||||||
// Core
|
// Core
|
||||||
@@ -4330,7 +4468,9 @@ const jqhtml = {
|
|||||||
// Cache key setter - enables component caching via local storage
|
// Cache key setter - enables component caching via local storage
|
||||||
set_cache_key(cache_key) {
|
set_cache_key(cache_key) {
|
||||||
Jqhtml_Local_Storage.set_cache_key(cache_key);
|
Jqhtml_Local_Storage.set_cache_key(cache_key);
|
||||||
}
|
},
|
||||||
|
// Boot - hydrate server-rendered component placeholders
|
||||||
|
boot
|
||||||
};
|
};
|
||||||
// Auto-register on window for browser environments
|
// Auto-register on window for browser environments
|
||||||
// This is REQUIRED for compiled templates which use window.jqhtml.register_template()
|
// This is REQUIRED for compiled templates which use window.jqhtml.register_template()
|
||||||
@@ -4348,5 +4488,5 @@ if (typeof window !== 'undefined' && !window.jqhtml) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { DebugOverlay, Jqhtml_Component, LifecycleManager as Jqhtml_LifecycleManager, Jqhtml_Local_Storage, LifecycleManager, Load_Coordinator, applyDebugDelay, create_component, jqhtml as default, devWarn, escape_html, extract_slots, get_component_class, get_component_names, get_registered_templates, get_template, get_template_by_class, handleComponentError, has_component, hideDebugOverlay, init, init_jquery_plugin, isSequentialProcessing, list_components, logDataChange, logDispatch, logInstruction, logLifecycle, process_instructions, register_component, register_template, render_template, showDebugOverlay, version };
|
export { DebugOverlay, Jqhtml_Component, LifecycleManager as Jqhtml_LifecycleManager, Jqhtml_Local_Storage, LifecycleManager, Load_Coordinator, applyDebugDelay, boot, create_component, jqhtml as default, devWarn, escape_html, extract_slots, get_component_class, get_component_names, get_registered_templates, get_template, get_template_by_class, handleComponentError, has_component, hideDebugOverlay, init, init_jquery_plugin, isSequentialProcessing, list_components, logDataChange, logDispatch, logInstruction, logLifecycle, process_instructions, register_component, register_template, render_template, showDebugOverlay, version };
|
||||||
//# sourceMappingURL=jqhtml-core.esm.js.map
|
//# sourceMappingURL=jqhtml-core.esm.js.map
|
||||||
|
|||||||
2
node_modules/@jqhtml/core/dist/jqhtml-core.esm.js.map
generated
vendored
2
node_modules/@jqhtml/core/dist/jqhtml-core.esm.js.map
generated
vendored
File diff suppressed because one or more lines are too long
7
node_modules/@jqhtml/core/package.json
generated
vendored
Executable file → Normal file
7
node_modules/@jqhtml/core/package.json
generated
vendored
Executable file → Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@jqhtml/core",
|
"name": "@jqhtml/core",
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"description": "Core runtime library for JQHTML",
|
"description": "Core runtime library for JQHTML",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
@@ -48,11 +48,6 @@
|
|||||||
],
|
],
|
||||||
"author": "JQHTML Team",
|
"author": "JQHTML Team",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/jqhtml/jqhtml.git",
|
|
||||||
"directory": "packages/core"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||||
"@rollup/plugin-replace": "^6.0.2",
|
"@rollup/plugin-replace": "^6.0.2",
|
||||||
|
|||||||
2
node_modules/@jqhtml/parser/dist/codegen.js
generated
vendored
2
node_modules/@jqhtml/parser/dist/codegen.js
generated
vendored
@@ -1348,7 +1348,7 @@ export class CodeGenerator {
|
|||||||
for (const [name, component] of this.components) {
|
for (const [name, component] of this.components) {
|
||||||
code += `// Component: ${name}\n`;
|
code += `// Component: ${name}\n`;
|
||||||
code += `jqhtml_components.set('${name}', {\n`;
|
code += `jqhtml_components.set('${name}', {\n`;
|
||||||
code += ` _jqhtml_version: '2.2.222',\n`; // Version will be replaced during build
|
code += ` _jqhtml_version: '2.3.4',\n`; // Version will be replaced during build
|
||||||
code += ` name: '${name}',\n`;
|
code += ` name: '${name}',\n`;
|
||||||
code += ` tag: '${component.tagName}',\n`;
|
code += ` tag: '${component.tagName}',\n`;
|
||||||
code += ` defaultAttributes: ${this.serializeAttributeObject(component.defaultAttributes)},\n`;
|
code += ` defaultAttributes: ${this.serializeAttributeObject(component.defaultAttributes)},\n`;
|
||||||
|
|||||||
7
node_modules/@jqhtml/parser/package.json
generated
vendored
Executable file → Normal file
7
node_modules/@jqhtml/parser/package.json
generated
vendored
Executable file → Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@jqhtml/parser",
|
"name": "@jqhtml/parser",
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"description": "JQHTML template parser - converts templates to JavaScript",
|
"description": "JQHTML template parser - converts templates to JavaScript",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
@@ -40,11 +40,6 @@
|
|||||||
],
|
],
|
||||||
"author": "JQHTML Team",
|
"author": "JQHTML Team",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/jqhtml/jqhtml.git",
|
|
||||||
"directory": "packages/parser"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/jest": "^29.5.11",
|
"@types/jest": "^29.5.11",
|
||||||
"@types/jquery": "^3.5.32",
|
"@types/jquery": "^3.5.32",
|
||||||
|
|||||||
2
node_modules/@jqhtml/vscode-extension/.version
generated
vendored
2
node_modules/@jqhtml/vscode-extension/.version
generated
vendored
@@ -1 +1 @@
|
|||||||
2.2.222
|
2.3.4
|
||||||
|
|||||||
2
app/RSpade/resource/vscode_extension/language-configuration.json → node_modules/@jqhtml/vscode-extension/blade-language-configuration.json
generated
vendored
Executable file → Normal file
2
app/RSpade/resource/vscode_extension/language-configuration.json → node_modules/@jqhtml/vscode-extension/blade-language-configuration.json
generated
vendored
Executable file → Normal file
@@ -24,4 +24,4 @@
|
|||||||
["\"", "\""],
|
["\"", "\""],
|
||||||
["'", "'"]
|
["'", "'"]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
BIN
node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.2.222.vsix → node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.3.4.vsix
generated
vendored
Executable file → Normal file
BIN
node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.2.222.vsix → node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.3.4.vsix
generated
vendored
Executable file → Normal file
Binary file not shown.
109
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js
generated
vendored
Normal file
109
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js
generated
vendored
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || (function () {
|
||||||
|
var ownKeys = function(o) {
|
||||||
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||||
|
var ar = [];
|
||||||
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||||
|
return ar;
|
||||||
|
};
|
||||||
|
return ownKeys(o);
|
||||||
|
};
|
||||||
|
return function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.BladeComponentSemanticTokensProvider = void 0;
|
||||||
|
const vscode = __importStar(require("vscode"));
|
||||||
|
/**
|
||||||
|
* Provides semantic tokens for uppercase component tags in Blade files
|
||||||
|
*
|
||||||
|
* This provider highlights:
|
||||||
|
* - Component tag names in cyan/turquoise (using 'class' token type)
|
||||||
|
* - The tag="" attribute on jqhtml components in orange (using 'jqhtmlTagAttribute' token type)
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* Register with vscode.languages.registerDocumentSemanticTokensProvider()
|
||||||
|
* using SemanticTokensLegend(['class', 'jqhtmlTagAttribute'])
|
||||||
|
*/
|
||||||
|
class BladeComponentSemanticTokensProvider {
|
||||||
|
provideDocumentSemanticTokens(document) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const tokens_builder = new vscode.SemanticTokensBuilder();
|
||||||
|
// Only process Blade files
|
||||||
|
if (document.languageId !== 'blade') {
|
||||||
|
return tokens_builder.build();
|
||||||
|
}
|
||||||
|
const text = document.getText();
|
||||||
|
// Match opening tags that start with uppercase letter to find jqhtml components
|
||||||
|
// Matches: <ComponentName ...>, captures the entire tag up to >
|
||||||
|
const component_tag_regex = /<([A-Z][a-zA-Z0-9_]*)([^>]*?)>/g;
|
||||||
|
let component_match;
|
||||||
|
while ((component_match = component_tag_regex.exec(text)) !== null) {
|
||||||
|
const tag_name = component_match[1];
|
||||||
|
const tag_attributes = component_match[2];
|
||||||
|
const tag_start = component_match.index + component_match[0].indexOf(tag_name);
|
||||||
|
const tag_position = document.positionAt(tag_start);
|
||||||
|
// Push token for the component tag name
|
||||||
|
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
||||||
|
tokens_builder.push(tag_position.line, tag_position.character, tag_name.length, 0, 0);
|
||||||
|
// Now look for tag="" attribute within this component's attributes
|
||||||
|
// Matches: tag="..." or tag='...'
|
||||||
|
const tag_attr_regex = /\btag\s*=/g;
|
||||||
|
let attr_match;
|
||||||
|
while ((attr_match = tag_attr_regex.exec(tag_attributes)) !== null) {
|
||||||
|
// Calculate the position of 'tag' within the document
|
||||||
|
const attr_start = component_match.index + component_match[0].indexOf(tag_attributes) + attr_match.index;
|
||||||
|
const attr_position = document.positionAt(attr_start);
|
||||||
|
// Push token for 'tag' attribute name
|
||||||
|
// Token type 1 maps to 'jqhtmlTagAttribute' which we'll define to be orange
|
||||||
|
tokens_builder.push(attr_position.line, attr_position.character, 3, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Also match closing tags that start with uppercase letter
|
||||||
|
// Matches: </ComponentName>
|
||||||
|
const closing_tag_regex = /<\/([A-Z][a-zA-Z0-9_]*)/g;
|
||||||
|
let closing_match;
|
||||||
|
while ((closing_match = closing_tag_regex.exec(text)) !== null) {
|
||||||
|
const tag_name = closing_match[1];
|
||||||
|
const tag_start = closing_match.index + closing_match[0].indexOf(tag_name);
|
||||||
|
const position = document.positionAt(tag_start);
|
||||||
|
// Push token for the tag name
|
||||||
|
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
||||||
|
tokens_builder.push(position.line, position.character, tag_name.length, 0, 0);
|
||||||
|
}
|
||||||
|
return tokens_builder.build();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.BladeComponentSemanticTokensProvider = BladeComponentSemanticTokensProvider;
|
||||||
|
//# sourceMappingURL=blade_component_provider.js.map
|
||||||
1
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js.map
generated
vendored
Normal file
1
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"blade_component_provider.js","sourceRoot":"","sources":["../src/blade_component_provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC;;;;;;;;;;GAUG;AACH,MAAa,oCAAoC;IACvC,6BAA6B,CAAC,QAA6B;;YAC7D,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAE1D,2BAA2B;YAC3B,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBAClC,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEhC,gFAAgF;YAChF,gEAAgE;YAChE,MAAM,mBAAmB,GAAG,iCAAiC,CAAC;YAC9D,IAAI,eAAe,CAAC;YAEpB,OAAO,CAAC,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/E,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAEpD,wCAAwC;gBACxC,gGAAgG;gBAChG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEtF,mEAAmE;gBACnE,kCAAkC;gBAClC,MAAM,cAAc,GAAG,YAAY,CAAC;gBACpC,IAAI,UAAU,CAAC;gBAEf,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACjE,sDAAsD;oBACtD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;oBACzG,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAEtD,sCAAsC;oBACtC,4EAA4E;oBAC5E,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9E,CAAC;YACL,CAAC;YAED,2DAA2D;YAC3D,4BAA4B;YAC5B,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;YACrD,IAAI,aAAa,CAAC;YAElB,OAAO,CAAC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAEhD,8BAA8B;gBAC9B,gGAAgG;gBAChG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;YAED,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;KAAA;CACJ;AA3DD,oFA2DC"}
|
||||||
40
app/RSpade/resource/vscode_extension/out/blade_client.js → node_modules/@jqhtml/vscode-extension/out/blade_language_config.js
generated
vendored
Executable file → Normal file
40
app/RSpade/resource/vscode_extension/out/blade_client.js → node_modules/@jqhtml/vscode-extension/out/blade_language_config.js
generated
vendored
Executable file → Normal file
@@ -15,16 +15,36 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|||||||
}) : function(o, v) {
|
}) : function(o, v) {
|
||||||
o["default"] = v;
|
o["default"] = v;
|
||||||
});
|
});
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
var __importStar = (this && this.__importStar) || (function () {
|
||||||
if (mod && mod.__esModule) return mod;
|
var ownKeys = function(o) {
|
||||||
var result = {};
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
var ar = [];
|
||||||
__setModuleDefault(result, mod);
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||||
return result;
|
return ar;
|
||||||
};
|
};
|
||||||
|
return ownKeys(o);
|
||||||
|
};
|
||||||
|
return function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
})();
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.init_blade_language_config = void 0;
|
exports.init_blade_language_config = void 0;
|
||||||
const vscode = __importStar(require("vscode"));
|
const vscode = __importStar(require("vscode"));
|
||||||
|
/**
|
||||||
|
* Initialize Blade language configuration
|
||||||
|
*
|
||||||
|
* Sets up:
|
||||||
|
* - Indentation rules for Blade templates
|
||||||
|
* - Auto-indent behavior when pressing Enter between tags
|
||||||
|
* - Word pattern for Blade files
|
||||||
|
*
|
||||||
|
* Call this once during extension activation.
|
||||||
|
*/
|
||||||
const init_blade_language_config = () => {
|
const init_blade_language_config = () => {
|
||||||
// HTML empty elements that don't require closing tags
|
// HTML empty elements that don't require closing tags
|
||||||
const EMPTY_ELEMENTS = [
|
const EMPTY_ELEMENTS = [
|
||||||
@@ -48,19 +68,23 @@ const init_blade_language_config = () => {
|
|||||||
// Configure Blade language indentation and auto-closing behavior
|
// Configure Blade language indentation and auto-closing behavior
|
||||||
vscode.languages.setLanguageConfiguration('blade', {
|
vscode.languages.setLanguageConfiguration('blade', {
|
||||||
indentationRules: {
|
indentationRules: {
|
||||||
|
// Increase indent after opening tag (except void elements and self-closing)
|
||||||
increaseIndentPattern: /<(?!\?|(?:area|base|br|col|frame|hr|html|img|input|link|meta|param)\b|[^>]*\/>)([-_\.A-Za-z0-9]+)(?=\s|>)\b[^>]*>(?!.*<\/\1>)|<!--(?!.*-->)|\{[^}"']*$/,
|
increaseIndentPattern: /<(?!\?|(?:area|base|br|col|frame|hr|html|img|input|link|meta|param)\b|[^>]*\/>)([-_\.A-Za-z0-9]+)(?=\s|>)\b[^>]*>(?!.*<\/\1>)|<!--(?!.*-->)|\{[^}"']*$/,
|
||||||
|
// Decrease indent on closing tag
|
||||||
decreaseIndentPattern: /^\s*(<\/(?!html)[-_\.A-Za-z0-9]+\b[^>]*>|-->|\})/,
|
decreaseIndentPattern: /^\s*(<\/(?!html)[-_\.A-Za-z0-9]+\b[^>]*>|-->|\})/,
|
||||||
},
|
},
|
||||||
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
|
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
|
||||||
onEnterRules: [
|
onEnterRules: [
|
||||||
{
|
{
|
||||||
// When pressing Enter between opening and closing tags, auto-indent
|
// When pressing Enter between opening and closing tags, auto-indent
|
||||||
|
// e.g., <div>|</div> -> <div>\n |\n</div>
|
||||||
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
||||||
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
|
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
|
||||||
action: { indentAction: vscode.IndentAction.IndentOutdent },
|
action: { indentAction: vscode.IndentAction.IndentOutdent },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// When pressing Enter after opening tag, auto-indent
|
// When pressing Enter after opening tag, auto-indent
|
||||||
|
// e.g., <div>| -> <div>\n |
|
||||||
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
||||||
action: { indentAction: vscode.IndentAction.Indent },
|
action: { indentAction: vscode.IndentAction.Indent },
|
||||||
},
|
},
|
||||||
@@ -68,4 +92,4 @@ const init_blade_language_config = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
exports.init_blade_language_config = init_blade_language_config;
|
exports.init_blade_language_config = init_blade_language_config;
|
||||||
//# sourceMappingURL=blade_client.js.map
|
//# sourceMappingURL=blade_language_config.js.map
|
||||||
1
node_modules/@jqhtml/vscode-extension/out/blade_language_config.js.map
generated
vendored
Normal file
1
node_modules/@jqhtml/vscode-extension/out/blade_language_config.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"blade_language_config.js","sourceRoot":"","sources":["../src/blade_language_config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC;;;;;;;;;GASG;AACI,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC3C,sDAAsD;IACtD,MAAM,cAAc,GAAa;QAC7B,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,OAAO;QACP,IAAI;QACJ,KAAK;QACL,OAAO;QACP,QAAQ;QACR,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;QACP,QAAQ;QACR,OAAO;QACP,KAAK;KACR,CAAC;IAEF,iEAAiE;IACjE,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE;QAC/C,gBAAgB,EAAE;YACd,4EAA4E;YAC5E,qBAAqB,EACjB,wJAAwJ;YAC5J,iCAAiC;YACjC,qBAAqB,EACjB,kDAAkD;SACzD;QACD,WAAW,EACP,gFAAgF;QACpF,YAAY,EAAE;YACV;gBACI,oEAAoE;gBACpE,2CAA2C;gBAC3C,UAAU,EAAE,IAAI,MAAM,CAClB,UAAU,cAAc,CAAC,IAAI,CACzB,GAAG,CACN,8CAA8C,EAC/C,GAAG,CACN;gBACD,SAAS,EAAE,+BAA+B;gBAC1C,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;aAC9D;YACD;gBACI,qDAAqD;gBACrD,6BAA6B;gBAC7B,UAAU,EAAE,IAAI,MAAM,CAClB,UAAU,cAAc,CAAC,IAAI,CACzB,GAAG,CACN,sCAAsC,EACvC,GAAG,CACN;gBACD,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;aACvD;SACJ;KACJ,CAAC,CAAC;AACP,CAAC,CAAC;AA3DW,QAAA,0BAA0B,8BA2DrC"}
|
||||||
60
app/RSpade/resource/vscode_extension/out/blade_spacer.js → node_modules/@jqhtml/vscode-extension/out/blade_spacer.js
generated
vendored
Executable file → Normal file
60
app/RSpade/resource/vscode_extension/out/blade_spacer.js → node_modules/@jqhtml/vscode-extension/out/blade_spacer.js
generated
vendored
Executable file → Normal file
@@ -15,17 +15,47 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|||||||
}) : function(o, v) {
|
}) : function(o, v) {
|
||||||
o["default"] = v;
|
o["default"] = v;
|
||||||
});
|
});
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
var __importStar = (this && this.__importStar) || (function () {
|
||||||
if (mod && mod.__esModule) return mod;
|
var ownKeys = function(o) {
|
||||||
var result = {};
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
var ar = [];
|
||||||
__setModuleDefault(result, mod);
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||||
return result;
|
return ar;
|
||||||
|
};
|
||||||
|
return ownKeys(o);
|
||||||
|
};
|
||||||
|
return function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.blade_spacer = void 0;
|
exports.blade_spacer = void 0;
|
||||||
const vscode = __importStar(require("vscode"));
|
const vscode = __importStar(require("vscode"));
|
||||||
const config_1 = require("./config");
|
/**
|
||||||
|
* Blade Auto-Spacing Provider
|
||||||
|
*
|
||||||
|
* Automatically adds spaces inside Blade tags when typing:
|
||||||
|
* {{ -> {{ | }} (cursor at |)
|
||||||
|
* {!! -> {!! | !!}
|
||||||
|
* {{-- -> {{-- | --}}
|
||||||
|
*
|
||||||
|
* Configuration:
|
||||||
|
* Set 'jqhtml.enableBladeAutoSpacing' to false to disable
|
||||||
|
* (or modify the config key below to match your extension's namespace)
|
||||||
|
*/
|
||||||
const TAG_DOUBLE = 0;
|
const TAG_DOUBLE = 0;
|
||||||
const TAG_UNESCAPED = 1;
|
const TAG_UNESCAPED = 1;
|
||||||
const TAG_COMMENT = 2;
|
const TAG_COMMENT = 2;
|
||||||
@@ -62,9 +92,17 @@ const chars_for_change = (doc, change) => {
|
|||||||
const end = translate(change.range.start, -1);
|
const end = translate(change.range.start, -1);
|
||||||
return doc.getText(new vscode.Range(start, end)) === ' ' ? 4 : 3;
|
return doc.getText(new vscode.Range(start, end)) === ' ' ? 4 : 3;
|
||||||
};
|
};
|
||||||
const blade_spacer = async (e, editor) => {
|
/**
|
||||||
const config = (0, config_1.get_config)();
|
* Main entry point - call this from onDidChangeTextDocument
|
||||||
if (!config.get('enableBladeAutoSpacing', true) ||
|
*
|
||||||
|
* @param e - The text document change event
|
||||||
|
* @param editor - The active text editor (optional)
|
||||||
|
* @param config_enabled - Whether auto-spacing is enabled (default: true)
|
||||||
|
* Pass your own config check here, e.g.:
|
||||||
|
* vscode.workspace.getConfiguration('jqhtml').get('enableBladeAutoSpacing', true)
|
||||||
|
*/
|
||||||
|
const blade_spacer = (e_1, editor_1, ...args_1) => __awaiter(void 0, [e_1, editor_1, ...args_1], void 0, function* (e, editor, config_enabled = true) {
|
||||||
|
if (!config_enabled ||
|
||||||
!editor ||
|
!editor ||
|
||||||
editor.document.fileName.indexOf('.blade.php') === -1) {
|
editor.document.fileName.indexOf('.blade.php') === -1) {
|
||||||
return;
|
return;
|
||||||
@@ -109,6 +147,6 @@ const blade_spacer = async (e, editor) => {
|
|||||||
if (ranges.length > 0 && snippets[tag_type]) {
|
if (ranges.length > 0 && snippets[tag_type]) {
|
||||||
editor.insertSnippet(new vscode.SnippetString(snippets[tag_type]), ranges);
|
editor.insertSnippet(new vscode.SnippetString(snippets[tag_type]), ranges);
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
exports.blade_spacer = blade_spacer;
|
exports.blade_spacer = blade_spacer;
|
||||||
//# sourceMappingURL=blade_spacer.js.map
|
//# sourceMappingURL=blade_spacer.js.map
|
||||||
1
node_modules/@jqhtml/vscode-extension/out/blade_spacer.js.map
generated
vendored
Normal file
1
node_modules/@jqhtml/vscode-extension/out/blade_spacer.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"blade_spacer.js","sourceRoot":"","sources":["../src/blade_spacer.ts"],"names":[],"mappings":"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"}
|
||||||
29
node_modules/@jqhtml/vscode-extension/out/extension.js
generated
vendored
29
node_modules/@jqhtml/vscode-extension/out/extension.js
generated
vendored
@@ -39,6 +39,9 @@ const vscode = __importStar(require("vscode"));
|
|||||||
const formatter_1 = require("./formatter");
|
const formatter_1 = require("./formatter");
|
||||||
const componentIndex_1 = require("./componentIndex");
|
const componentIndex_1 = require("./componentIndex");
|
||||||
const definitionProvider_1 = require("./definitionProvider");
|
const definitionProvider_1 = require("./definitionProvider");
|
||||||
|
const blade_component_provider_1 = require("./blade_component_provider");
|
||||||
|
const blade_spacer_1 = require("./blade_spacer");
|
||||||
|
const blade_language_config_1 = require("./blade_language_config");
|
||||||
function activate(context) {
|
function activate(context) {
|
||||||
console.log('JQHTML extension activated');
|
console.log('JQHTML extension activated');
|
||||||
// Initialize component index
|
// Initialize component index
|
||||||
@@ -133,6 +136,32 @@ function activate(context) {
|
|||||||
if (config.get('formatOnSave')) {
|
if (config.get('formatOnSave')) {
|
||||||
console.log('JQHTML: Format on save is enabled');
|
console.log('JQHTML: Format on save is enabled');
|
||||||
}
|
}
|
||||||
|
// =========================================================================
|
||||||
|
// BLADE SUPPORT (Optional - controlled by jqhtml.enableBladeSupport setting)
|
||||||
|
// =========================================================================
|
||||||
|
const jqhtmlConfig = vscode.workspace.getConfiguration('jqhtml');
|
||||||
|
const bladeSupport = jqhtmlConfig.get('enableBladeSupport', true);
|
||||||
|
if (bladeSupport) {
|
||||||
|
// Register Blade component semantic tokens provider
|
||||||
|
// Highlights component tag names and tag="" attributes in .blade.php files
|
||||||
|
const bladeComponentProvider = new blade_component_provider_1.BladeComponentSemanticTokensProvider();
|
||||||
|
context.subscriptions.push(vscode.languages.registerDocumentSemanticTokensProvider([{ language: 'blade' }, { pattern: '**/*.blade.php' }], bladeComponentProvider, new vscode.SemanticTokensLegend(['class', 'jqhtmlTagAttribute'])));
|
||||||
|
console.log('JQHTML: Blade component highlighting registered');
|
||||||
|
// Register Blade auto-spacing ({{ -> {{ | }})
|
||||||
|
const getAutoSpacingEnabled = () => {
|
||||||
|
return vscode.workspace.getConfiguration('jqhtml').get('enableBladeAutoSpacing', true);
|
||||||
|
};
|
||||||
|
context.subscriptions.push(vscode.workspace.onDidChangeTextDocument((event) => {
|
||||||
|
(0, blade_spacer_1.blade_spacer)(event, vscode.window.activeTextEditor, getAutoSpacingEnabled());
|
||||||
|
}));
|
||||||
|
console.log('JQHTML: Blade auto-spacing registered');
|
||||||
|
// Initialize Blade language configuration (indentation rules)
|
||||||
|
(0, blade_language_config_1.init_blade_language_config)();
|
||||||
|
console.log('JQHTML: Blade language configuration initialized');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('JQHTML: Blade support disabled via settings');
|
||||||
|
}
|
||||||
console.log('JQHTML: All features registered (formatter, auto-close, goto definition, hover)');
|
console.log('JQHTML: All features registered (formatter, auto-close, goto definition, hover)');
|
||||||
// Return public API for other extensions
|
// Return public API for other extensions
|
||||||
return {
|
return {
|
||||||
|
|||||||
2
node_modules/@jqhtml/vscode-extension/out/extension.js.map
generated
vendored
2
node_modules/@jqhtml/vscode-extension/out/extension.js.map
generated
vendored
File diff suppressed because one or more lines are too long
51
node_modules/@jqhtml/vscode-extension/package.json
generated
vendored
Executable file → Normal file
51
node_modules/@jqhtml/vscode-extension/package.json
generated
vendored
Executable file → Normal file
@@ -2,7 +2,7 @@
|
|||||||
"name": "@jqhtml/vscode-extension",
|
"name": "@jqhtml/vscode-extension",
|
||||||
"displayName": "JQHTML",
|
"displayName": "JQHTML",
|
||||||
"description": "Syntax highlighting and language support for JQHTML template files",
|
"description": "Syntax highlighting and language support for JQHTML template files",
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"publisher": "jqhtml",
|
"publisher": "jqhtml",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
"snippets",
|
"snippets",
|
||||||
"images",
|
"images",
|
||||||
"language-configuration.json",
|
"language-configuration.json",
|
||||||
|
"blade-language-configuration.json",
|
||||||
".version",
|
".version",
|
||||||
"README.md",
|
"README.md",
|
||||||
"LLM_REFERENCE.md",
|
"LLM_REFERENCE.md",
|
||||||
@@ -68,6 +69,10 @@
|
|||||||
"light": "./images/jqhtml-icon.svg",
|
"light": "./images/jqhtml-icon.svg",
|
||||||
"dark": "./images/jqhtml-icon.svg"
|
"dark": "./images/jqhtml-icon.svg"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "blade",
|
||||||
|
"configuration": "./blade-language-configuration.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"grammars": [
|
"grammars": [
|
||||||
@@ -75,6 +80,14 @@
|
|||||||
"language": "jqhtml",
|
"language": "jqhtml",
|
||||||
"scopeName": "source.jqhtml",
|
"scopeName": "source.jqhtml",
|
||||||
"path": "./syntaxes/jqhtml.tmLanguage.json"
|
"path": "./syntaxes/jqhtml.tmLanguage.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scopeName": "source.jqhtml.blade-injection",
|
||||||
|
"path": "./syntaxes/blade-jqhtml.tmLanguage.json",
|
||||||
|
"injectTo": [
|
||||||
|
"text.blade",
|
||||||
|
"text.html.php"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"snippets": [
|
"snippets": [
|
||||||
@@ -93,6 +106,42 @@
|
|||||||
},
|
},
|
||||||
"editor.bracketPairColorization.enabled": false,
|
"editor.bracketPairColorization.enabled": false,
|
||||||
"editor.guides.bracketPairs": false
|
"editor.guides.bracketPairs": false
|
||||||
|
},
|
||||||
|
"editor.semanticTokenColorCustomizations": {
|
||||||
|
"rules": {
|
||||||
|
"jqhtmlTagAttribute": "#FFA500"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"semanticTokenTypes": [
|
||||||
|
{
|
||||||
|
"id": "jqhtmlTagAttribute",
|
||||||
|
"superType": "parameter",
|
||||||
|
"description": "The tag attribute on jqhtml components"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"semanticTokenScopes": [
|
||||||
|
{
|
||||||
|
"scopes": {
|
||||||
|
"jqhtmlTagAttribute": [
|
||||||
|
"entity.other.attribute-name.jqhtml.tag"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration": {
|
||||||
|
"title": "JQHTML",
|
||||||
|
"properties": {
|
||||||
|
"jqhtml.enableBladeSupport": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Enable JQHTML component highlighting in Laravel Blade (.blade.php) files"
|
||||||
|
},
|
||||||
|
"jqhtml.enableBladeAutoSpacing": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Automatically add spaces inside Blade tags when typing ({{ -> {{ | }})"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
4
app/RSpade/resource/vscode_extension/syntaxes/blade-jqhtml.tmLanguage.json → node_modules/@jqhtml/vscode-extension/syntaxes/blade-jqhtml.tmLanguage.json
generated
vendored
Executable file → Normal file
4
app/RSpade/resource/vscode_extension/syntaxes/blade-jqhtml.tmLanguage.json → node_modules/@jqhtml/vscode-extension/syntaxes/blade-jqhtml.tmLanguage.json
generated
vendored
Executable file → Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Blade JQHTML Components",
|
"name": "Blade JQHTML Components",
|
||||||
"scopeName": "source.jqhtml.injection",
|
"scopeName": "source.jqhtml.blade-injection",
|
||||||
"injectionSelector": "L:text.blade, L:text.html.php",
|
"injectionSelector": "L:text.blade, L:text.html.php",
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
@@ -17,4 +17,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
4
node_modules/@jqhtml/webpack-loader/package.json
generated
vendored
Executable file → Normal file
4
node_modules/@jqhtml/webpack-loader/package.json
generated
vendored
Executable file → Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@jqhtml/webpack-loader",
|
"name": "@jqhtml/webpack-loader",
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"description": "Webpack loader for JQHTML templates",
|
"description": "Webpack loader for JQHTML templates",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
"template"
|
"template"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jqhtml/parser": "2.2.222",
|
"@jqhtml/parser": "2.3.4",
|
||||||
"@types/loader-utils": "^2.0.6",
|
"@types/loader-utils": "^2.0.6",
|
||||||
"@types/node": "^20.0.0",
|
"@types/node": "^20.0.0",
|
||||||
"@types/webpack": "^5.28.5",
|
"@types/webpack": "^5.28.5",
|
||||||
|
|||||||
0
node_modules/caniuse-lite/LICENSE
generated
vendored
Executable file → Normal file
0
node_modules/caniuse-lite/LICENSE
generated
vendored
Executable file → Normal file
0
node_modules/caniuse-lite/README.md
generated
vendored
Executable file → Normal file
0
node_modules/caniuse-lite/README.md
generated
vendored
Executable file → Normal file
2
node_modules/caniuse-lite/data/agents.js
generated
vendored
2
node_modules/caniuse-lite/data/agents.js
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/caniuse-lite/data/features/css-if.js
generated
vendored
2
node_modules/caniuse-lite/data/features/css-if.js
generated
vendored
@@ -1 +1 @@
|
|||||||
module.exports={A:{A:{"2":"K D E F A B wC"},B:{"1":"UB VB WB XB YB I","2":"0 1 2 3 4 5 C L M G N O P Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},C:{"2":"0 1 2 3 4 5 6 7 8 9 xC TC J ZB K D E F A B C L M G N O P aB AB BB CB DB EB FB bB cB dB eB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B UC 4B VC 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC Q H R WC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB I XC MC YC yC zC 0C 1C 2C"},D:{"1":"UB VB WB XB YB I XC MC YC","2":"0 1 2 3 4 5 6 7 8 9 J ZB K D E F A B C L M G N O P aB AB BB CB DB EB FB bB cB dB eB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B UC 4B VC 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},E:{"2":"J ZB K D E F A B C L M G 3C ZC 4C 5C 6C 7C aC NC OC 8C 9C AD bC cC PC BD QC dC eC fC gC hC CD RC iC jC kC lC mC DD SC nC oC pC qC rC sC tC ED FD"},F:{"1":"4 5","2":"0 1 2 3 6 7 8 9 F B C G N O P aB AB BB CB DB EB FB bB cB dB eB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC Q H R WC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GD HD ID JD NC uC KD OC"},G:{"2":"E ZC LD vC MD ND OD PD QD RD SD TD UD VD WD XD YD ZD aD bD cD dD eD bC cC PC fD QC dC eC fC gC hC gD RC iC jC kC lC mC hD SC nC oC pC qC rC sC tC"},H:{"2":"iD"},I:{"1":"I","2":"TC J jD kD lD mD vC nD oD"},J:{"2":"D A"},K:{"2":"A B C H NC uC OC"},L:{"1":"I"},M:{"2":"MC"},N:{"2":"A B"},O:{"2":"PC"},P:{"2":"6 7 8 9 J AB BB CB DB EB FB pD qD rD sD tD aC uD vD wD xD yD QC RC SC zD"},Q:{"2":"0D"},R:{"2":"1D"},S:{"2":"2D 3D"}},B:5,C:"CSS if() function",D:true};
|
module.exports={A:{A:{"2":"K D E F A B wC"},B:{"1":"UB VB WB XB YB I","2":"0 1 2 3 4 5 C L M G N O P Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},C:{"2":"0 1 2 3 4 5 6 7 8 9 xC TC J ZB K D E F A B C L M G N O P aB AB BB CB DB EB FB bB cB dB eB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B UC 4B VC 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC Q H R WC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB I XC MC YC yC zC 0C 1C 2C"},D:{"1":"UB VB WB XB YB I XC MC YC","2":"0 1 2 3 4 5 6 7 8 9 J ZB K D E F A B C L M G N O P aB AB BB CB DB EB FB bB cB dB eB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B UC 4B VC 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC Q H R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GB HB IB JB KB LB MB NB OB PB QB RB SB TB"},E:{"2":"J ZB K D E F A B C L M G 3C ZC 4C 5C 6C 7C aC NC OC 8C 9C AD bC cC PC BD QC dC eC fC gC hC CD RC iC jC kC lC mC DD SC nC oC pC qC rC sC tC ED FD"},F:{"1":"4","2":"0 1 2 3 5 6 7 8 9 F B C G N O P aB AB BB CB DB EB FB bB cB dB eB fB gB hB iB jB kB lB mB nB oB pB qB rB sB tB uB vB wB xB yB zB 0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AC BC CC DC EC FC GC HC IC JC KC LC Q H R WC S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z GD HD ID JD NC uC KD OC"},G:{"2":"E ZC LD vC MD ND OD PD QD RD SD TD UD VD WD XD YD ZD aD bD cD dD eD bC cC PC fD QC dC eC fC gC hC gD RC iC jC kC lC mC hD SC nC oC pC qC rC sC tC"},H:{"2":"iD"},I:{"1":"I","2":"TC J jD kD lD mD vC nD oD"},J:{"2":"D A"},K:{"2":"A B C H NC uC OC"},L:{"1":"I"},M:{"2":"MC"},N:{"2":"A B"},O:{"2":"PC"},P:{"2":"6 7 8 9 J AB BB CB DB EB FB pD qD rD sD tD aC uD vD wD xD yD QC RC SC zD"},Q:{"2":"0D"},R:{"2":"1D"},S:{"2":"2D 3D"}},B:5,C:"CSS if() function",D:true};
|
||||||
|
|||||||
2
node_modules/caniuse-lite/package.json
generated
vendored
Executable file → Normal file
2
node_modules/caniuse-lite/package.json
generated
vendored
Executable file → Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "caniuse-lite",
|
"name": "caniuse-lite",
|
||||||
"version": "1.0.30001756",
|
"version": "1.0.30001757",
|
||||||
"description": "A smaller version of caniuse-db, with only the essentials!",
|
"description": "A smaller version of caniuse-db, with only the essentials!",
|
||||||
"main": "dist/unpacker/index.js",
|
"main": "dist/unpacker/index.js",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
0
node_modules/electron-to-chromium/LICENSE
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/LICENSE
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/README.md
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/README.md
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/chromium-versions.js
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/chromium-versions.js
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/chromium-versions.json
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/chromium-versions.json
generated
vendored
Executable file → Normal file
3
node_modules/electron-to-chromium/full-chromium-versions.js
generated
vendored
Executable file → Normal file
3
node_modules/electron-to-chromium/full-chromium-versions.js
generated
vendored
Executable file → Normal file
@@ -2610,6 +2610,7 @@ module.exports = {
|
|||||||
"144.0.7526.0": [
|
"144.0.7526.0": [
|
||||||
"40.0.0-alpha.5",
|
"40.0.0-alpha.5",
|
||||||
"40.0.0-alpha.6",
|
"40.0.0-alpha.6",
|
||||||
"40.0.0-alpha.7"
|
"40.0.0-alpha.7",
|
||||||
|
"40.0.0-alpha.8"
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
2
node_modules/electron-to-chromium/full-chromium-versions.json
generated
vendored
Executable file → Normal file
2
node_modules/electron-to-chromium/full-chromium-versions.json
generated
vendored
Executable file → Normal file
File diff suppressed because one or more lines are too long
3
node_modules/electron-to-chromium/full-versions.js
generated
vendored
Executable file → Normal file
3
node_modules/electron-to-chromium/full-versions.js
generated
vendored
Executable file → Normal file
@@ -1671,5 +1671,6 @@ module.exports = {
|
|||||||
"40.0.0-alpha.4": "144.0.7506.0",
|
"40.0.0-alpha.4": "144.0.7506.0",
|
||||||
"40.0.0-alpha.5": "144.0.7526.0",
|
"40.0.0-alpha.5": "144.0.7526.0",
|
||||||
"40.0.0-alpha.6": "144.0.7526.0",
|
"40.0.0-alpha.6": "144.0.7526.0",
|
||||||
"40.0.0-alpha.7": "144.0.7526.0"
|
"40.0.0-alpha.7": "144.0.7526.0",
|
||||||
|
"40.0.0-alpha.8": "144.0.7526.0"
|
||||||
};
|
};
|
||||||
2
node_modules/electron-to-chromium/full-versions.json
generated
vendored
Executable file → Normal file
2
node_modules/electron-to-chromium/full-versions.json
generated
vendored
Executable file → Normal file
File diff suppressed because one or more lines are too long
0
node_modules/electron-to-chromium/index.js
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/index.js
generated
vendored
Executable file → Normal file
2
node_modules/electron-to-chromium/package.json
generated
vendored
Executable file → Normal file
2
node_modules/electron-to-chromium/package.json
generated
vendored
Executable file → Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "electron-to-chromium",
|
"name": "electron-to-chromium",
|
||||||
"version": "1.5.259",
|
"version": "1.5.260",
|
||||||
"description": "Provides a list of electron-to-chromium version mappings",
|
"description": "Provides a list of electron-to-chromium version mappings",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
0
node_modules/electron-to-chromium/versions.js
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/versions.js
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/versions.json
generated
vendored
Executable file → Normal file
0
node_modules/electron-to-chromium/versions.json
generated
vendored
Executable file → Normal file
38
package-lock.json
generated
38
package-lock.json
generated
@@ -2658,9 +2658,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/core": {
|
"node_modules/@jqhtml/core": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/core/-/core-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/core/-/core-2.3.4.tgz",
|
||||||
"integrity": "sha512-cO5iO9VjHqeOZhdz+WD0rCb+mvS2U6eHMWRrkrTS4F3RmYrUOPk+8KUpeWUXkND4D+JnK9iMmLWY1+WjQHDVFQ==",
|
"integrity": "sha512-RQLviu8NcIxrnd1cUOE8HNPmwWT/kVliwHl91zqYaYw3cXstF2PG9OxbRtiUWAdbOxuqJSLkELrXLG+4cr1o9w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||||
@@ -2684,9 +2684,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/parser": {
|
"node_modules/@jqhtml/parser": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/parser/-/parser-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/parser/-/parser-2.3.4.tgz",
|
||||||
"integrity": "sha512-jEF+HfOMRwkZ9lVWO7+wKMKDXsI51R5g0qq2trqTXAOs2aNnDtrJV9yqY1LWXMdi1h2iV5AJhbkvAZS1p9gzSw==",
|
"integrity": "sha512-jFc7RtmxMdt8ewJmuq6lw74c3dMHqaZ9BXUX3czwtU4w1ZxkLkppEhTmrm+wtQ7/rdK6jsfvL4W++wrXQtoclA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/jest": "^29.5.11",
|
"@types/jest": "^29.5.11",
|
||||||
@@ -2724,21 +2724,21 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/vscode-extension": {
|
"node_modules/@jqhtml/vscode-extension": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/vscode-extension/-/vscode-extension-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/vscode-extension/-/vscode-extension-2.3.4.tgz",
|
||||||
"integrity": "sha512-o5WAF3JMgMjORImpCvS5yCSnduS1iQJOjzNDjHMzFglZIB1lfyzq9VV7n3ykQVLmRUBB3p1tyPUe6R08b+7Txw==",
|
"integrity": "sha512-AU3M2yD4tiGKcfkW2cBtO26yKzdJj5+Af1BBoblnr1zqPzlTyLaZapoLPL/bEpSwnaFB5I3XqKuBj2sKSDE30Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"vscode": "^1.74.0"
|
"vscode": "^1.74.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jqhtml/webpack-loader": {
|
"node_modules/@jqhtml/webpack-loader": {
|
||||||
"version": "2.2.222",
|
"version": "2.3.4",
|
||||||
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/webpack-loader/-/webpack-loader-2.2.222.tgz",
|
"resolved": "http://privatenpm.hanson.xyz/@jqhtml/webpack-loader/-/webpack-loader-2.3.4.tgz",
|
||||||
"integrity": "sha512-6ucNvup5MJ9w6UCjL6nvKKRHfrCipqC0qLApxeTToQROY/16vZ/YbLj4ZgzsrUfu656bSYlcWG/OBrUfxUZnog==",
|
"integrity": "sha512-QYanMVtRQ6Y5Xuw/AfZFdbSwMWnLBKo53/mpQtOEqdY1+cMCcbt/C3oxz8fJaCzAXWmxOZVqxU7kNxZ1YihRtQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jqhtml/parser": "2.2.222",
|
"@jqhtml/parser": "2.3.4",
|
||||||
"@types/loader-utils": "^2.0.6",
|
"@types/loader-utils": "^2.0.6",
|
||||||
"@types/node": "^20.0.0",
|
"@types/node": "^20.0.0",
|
||||||
"@types/webpack": "^5.28.5",
|
"@types/webpack": "^5.28.5",
|
||||||
@@ -5355,9 +5355,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001756",
|
"version": "1.0.30001757",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz",
|
||||||
"integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==",
|
"integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -6617,9 +6617,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.259",
|
"version": "1.5.260",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz",
|
||||||
"integrity": "sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==",
|
"integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/elliptic": {
|
"node_modules/elliptic": {
|
||||||
|
|||||||
Reference in New Issue
Block a user