coralite 0.29.0 → 0.29.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"coralite.d.ts","sourceRoot":"","sources":["../../lib/coralite.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coralite.d.ts","sourceRoot":"","sources":["../../lib/coralite.js"],"names":[],"mappings":"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"}
package/dist/lib/index.js CHANGED
@@ -9392,9 +9392,9 @@ ScriptManager.prototype.use = async function(plugin) {
9392
9392
  ScriptManager.prototype.getHelpersContent = function() {
9393
9393
  let helpers = "";
9394
9394
  for (const key of Object.keys(this.helpers)) {
9395
- helpers += `"${key}": (() => {
9395
+ helpers += `"${key}": (async () => {
9396
9396
  const phase1 = ${this.helpers[key]};
9397
- const phase2 = phase1({});
9397
+ const phase2 = await phase1({});
9398
9398
  return (localContext) => phase2(localContext);
9399
9399
  })(),`;
9400
9400
  }
@@ -9407,9 +9407,9 @@ ScriptManager.prototype.addHelper = async function(name, method) {
9407
9407
  ScriptManager.prototype.getHelpers = function() {
9408
9408
  let helpers = "";
9409
9409
  for (const key of Object.keys(this.helpers)) {
9410
- helpers += `"${key}": (() => {
9410
+ helpers += `"${key}": (async () => {
9411
9411
  const phase1 = ${this.helpers[key]};
9412
- const phase2 = phase1({});
9412
+ const phase2 = await phase1({});
9413
9413
  return (localContext) => phase2(localContext);
9414
9414
  })(),`;
9415
9415
  }
@@ -9450,10 +9450,11 @@ ScriptManager.prototype.compileAllInstances = async function(instances, mode) {
9450
9450
  ${helperParts}
9451
9451
  };
9452
9452
  `);
9453
- entryCodeParts.push(`const getHelpers = (context) => {
9453
+ entryCodeParts.push(`const getHelpers = async (context) => {
9454
9454
  const helpers = {}
9455
9455
  for (const [key, helper] of Object.entries(coraliteComponentScriptHelpers)) {
9456
- helpers[key] = helper(context)
9456
+ const resolvedHelper = await helper
9457
+ helpers[key] = resolvedHelper(context)
9457
9458
  }
9458
9459
  return helpers
9459
9460
  }
@@ -9533,7 +9534,16 @@ ScriptManager.prototype.compileAllInstances = async function(instances, mode) {
9533
9534
  entryCodeParts.push("const coraliteComponentDefaults = {\n");
9534
9535
  for (const key of processedComponentKeys) {
9535
9536
  if (this.sharedFunctions[key] && this.sharedFunctions[key].defaultValues) {
9536
- entryCodeParts.push(` "${key}": ${serialize(this.sharedFunctions[key].defaultValues)},
9537
+ entryCodeParts.push(` "${key}": (() => {
9538
+ `);
9539
+ entryCodeParts.push(` const defaults = ${serialize(this.sharedFunctions[key].defaultValues)};
9540
+ `);
9541
+ entryCodeParts.push(` return defaults;
9542
+ `);
9543
+ entryCodeParts.push(` })(),
9544
+ `);
9545
+ } else {
9546
+ entryCodeParts.push(` "${key}": {},
9537
9547
  `);
9538
9548
  }
9539
9549
  }
@@ -9554,25 +9564,80 @@ class CoraliteElement extends HTMLElement {
9554
9564
 
9555
9565
  const defaults = coraliteComponentDefaults[componentId] || {};
9556
9566
  this.values = { ...defaults };
9567
+ this._isRendering = false;
9568
+ this._observer = null;
9557
9569
 
9558
9570
  this.attachShadow({ mode: 'open' });
9559
9571
  }
9560
9572
 
9561
- connectedCallback() {
9562
- const template = coraliteComponentTemplates[this.componentId] || '';
9563
- const styles = coraliteComponentStyles[this.componentId];
9564
-
9565
- if (!this.shadowRoot.innerHTML.trim()) {
9573
+ _replaceTokens(template) {
9574
+ return template.replace(/\\{\\{\\s*([\\w.]+)\\s*\\}\\}/g, (match, token) => {
9575
+ let value = this.values;
9576
+ const properties = token.split('.');
9577
+ for (const prop of properties) {
9578
+ if (value && typeof value === 'object') {
9579
+ value = value[prop];
9580
+ } else {
9581
+ value = undefined;
9582
+ break;
9583
+ }
9584
+ }
9585
+
9586
+ if (typeof value === 'function') {
9587
+ value = value(this.values);
9588
+ }
9589
+
9590
+ return value != null ? value : '';
9591
+ });
9592
+ }
9593
+
9594
+ _render() {
9595
+ if (this._isRendering) return;
9596
+ this._isRendering = true;
9597
+
9598
+ Promise.resolve().then(() => {
9599
+ this._isRendering = false;
9600
+ const template = coraliteComponentTemplates[this.componentId] || '';
9601
+ const styles = coraliteComponentStyles[this.componentId];
9602
+
9566
9603
  let content = '';
9567
9604
  if (styles) {
9568
9605
  content += \`<style>\${styles}</style>\`;
9569
9606
  }
9570
- content += template;
9571
- this.shadowRoot.innerHTML = content;
9607
+ content += this._replaceTokens(template);
9608
+
9609
+ this.shadowRoot.innerHTML = content;
9610
+ });
9611
+ }
9612
+
9613
+ connectedCallback() {
9614
+ this._instanceId = crypto.randomUUID();
9615
+
9616
+ // Initial sync of attributes to values
9617
+ for (let i = 0; i < this.attributes.length; i++) {
9618
+ const attr = this.attributes[i];
9619
+ // Convert kebab-case to camelCase
9620
+ const camelName = attr.name.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
9621
+ this.values[camelName] = attr.value;
9622
+ if (camelName !== attr.name) {
9623
+ this.values[attr.name] = attr.value;
9624
+ }
9572
9625
  }
9573
9626
 
9627
+ // Initial render synchronously so it's ready for the script
9628
+ const template = coraliteComponentTemplates[this.componentId] || '';
9629
+ const styles = coraliteComponentStyles[this.componentId];
9630
+
9631
+ let content = '';
9632
+ if (styles) {
9633
+ content += \`<style>\${styles}</style>\`;
9634
+ }
9635
+ content += this._replaceTokens(template);
9636
+
9637
+ this.shadowRoot.innerHTML = content;
9638
+
9574
9639
  const localContext = {
9575
- instanceId: crypto.randomUUID(),
9640
+ instanceId: this._instanceId,
9576
9641
  componentId: this.componentId,
9577
9642
  values: this.values,
9578
9643
  root: this.shadowRoot,
@@ -9590,15 +9655,48 @@ class CoraliteElement extends HTMLElement {
9590
9655
  this.values[\`ref_\${refName}\`] = dynamicId;
9591
9656
  }
9592
9657
 
9593
- const helpers = getHelpers(localContext);
9594
- localContext.helpers = helpers;
9595
-
9596
- const imports = coraliteComponentImports[this.componentId] || {};
9597
- localContext.imports = imports;
9658
+ ;(async () => {
9659
+ const helpers = await getHelpers(localContext);
9660
+ localContext.helpers = helpers;
9661
+
9662
+ const imports = coraliteComponentImports[this.componentId] || {};
9663
+ localContext.imports = imports;
9664
+
9665
+ const userScript = coraliteComponentFunctions[this.componentId];
9666
+ if (userScript) {
9667
+ userScript(localContext);
9668
+ }
9669
+ })();
9598
9670
 
9599
- const userScript = coraliteComponentFunctions[this.componentId];
9600
- if (userScript) {
9601
- userScript(localContext);
9671
+ this._observer = new MutationObserver((mutations) => {
9672
+ let shouldRender = false;
9673
+ for (const mutation of mutations) {
9674
+ if (mutation.type === 'attributes') {
9675
+ const attrName = mutation.attributeName;
9676
+ const camelName = attrName.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
9677
+ const newValue = this.getAttribute(attrName);
9678
+
9679
+ if (this.values[camelName] !== newValue) {
9680
+ this.values[camelName] = newValue;
9681
+ if (camelName !== attrName) {
9682
+ this.values[attrName] = newValue;
9683
+ }
9684
+ shouldRender = true;
9685
+ }
9686
+ }
9687
+ }
9688
+ if (shouldRender) {
9689
+ this._render();
9690
+ }
9691
+ });
9692
+
9693
+ this._observer.observe(this, { attributes: true });
9694
+ }
9695
+
9696
+ disconnectedCallback() {
9697
+ if (this._observer) {
9698
+ this._observer.disconnect();
9699
+ this._observer = null;
9602
9700
  }
9603
9701
  }
9604
9702
  }
@@ -9629,7 +9727,7 @@ for (const componentId of Object.keys(coraliteComponentTemplates)) {
9629
9727
  entryCodeParts.push("context.imports = imports;\n");
9630
9728
  entryCodeParts.push("const setupValues = await globalSetupValuesPromise;\n");
9631
9729
  entryCodeParts.push("context.values = { ...context.values, ...setupValues };\n");
9632
- entryCodeParts.push("const helpers = getHelpers(context);\n");
9730
+ entryCodeParts.push("const helpers = await getHelpers(context);\n");
9633
9731
  entryCodeParts.push("context.helpers = helpers;\n");
9634
9732
  entryCodeParts.push(`
9635
9733
  // Instance: ${instanceId}
@@ -9798,13 +9896,14 @@ for (const componentId of Object.keys(coraliteComponentTemplates)) {
9798
9896
  for (const key in module.helpers) {
9799
9897
  if (Object.hasOwn(module.helpers, key)) {
9800
9898
  const fn = normalizeFunction(module.helpers[key]);
9801
- contents += ` "${key}": (() => {
9899
+ contents += ` "${key}": (async () => {
9802
9900
  const globalContext = {
9803
9901
  imports: pluginImports,
9804
9902
  config: pluginConfig
9805
9903
  };
9806
9904
  const fn = ${fn};
9807
- return fn(globalContext);
9905
+ const phase2 = await fn(globalContext);
9906
+ return (localContext) => phase2(localContext);
9808
9907
  })(),
9809
9908
  `;
9810
9909
  }
@@ -11167,10 +11266,34 @@ Coralite.prototype.createComponentElement = async function({
11167
11266
  scriptResult.__script__.content = "export default function(){}";
11168
11267
  }
11169
11268
  const stylesHTML = module.styles && module.styles.length ? module.styles.join("\n") : "";
11269
+ const templateHTML = this.transform(module.template.children);
11270
+ const componentTokens = {};
11271
+ for (let i = 0; i < module.values.attributes.length; i++) {
11272
+ const item = module.values.attributes[i];
11273
+ for (let j = 0; j < item.tokens.length; j++) {
11274
+ componentTokens[item.tokens[j].name] = true;
11275
+ }
11276
+ }
11277
+ for (let i = 0; i < module.values.textNodes.length; i++) {
11278
+ const item = module.values.textNodes[i];
11279
+ for (let j = 0; j < item.tokens.length; j++) {
11280
+ componentTokens[item.tokens[j].name] = true;
11281
+ }
11282
+ }
11283
+ const componentDefaultValues = scriptResult.__script__.defaultValues || {};
11284
+ if (values) {
11285
+ for (const token of Object.keys(componentTokens)) {
11286
+ if (typeof values[token] === "function") {
11287
+ componentDefaultValues[token] = values[token];
11288
+ }
11289
+ }
11290
+ }
11170
11291
  this._scriptManager.registerComponent({
11171
11292
  id: module.id,
11172
11293
  script: scriptResult.__script__,
11173
11294
  filePath: moduleComponent.path.pathname,
11295
+ template: templateHTML,
11296
+ defaultValues: componentDefaultValues,
11174
11297
  styles: stylesHTML
11175
11298
  });
11176
11299
  if (scriptResult.__script__ && scriptResult.__script__.components) {