rip-lang 3.13.70 → 3.13.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
 
11
11
  <p align="center">
12
- <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-3.13.70-blue.svg" alt="Version"></a>
12
+ <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-3.13.71-blue.svg" alt="Version"></a>
13
13
  <a href="#zero-dependencies"><img src="https://img.shields.io/badge/dependencies-ZERO-brightgreen.svg" alt="Dependencies"></a>
14
14
  <a href="#"><img src="https://img.shields.io/badge/tests-1%2C436%2F1%2C436-brightgreen.svg" alt="Tests"></a>
15
15
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a>
package/docs/dist/rip.js CHANGED
@@ -4793,9 +4793,11 @@ ${blockFactoriesCode}return ${lines.join(`
4793
4793
  const elVar = this.newElementVar("el");
4794
4794
  const { propsCode, reactiveProps, eventBindings, childrenSetupLines } = this.buildComponentProps(args);
4795
4795
  const s = this._self;
4796
+ this._createLines.push(`{ const __prev = __pushComponent(${s}); try {`);
4796
4797
  this._createLines.push(`${instVar} = new ${componentName}(${propsCode});`);
4797
4798
  this._createLines.push(`${elVar} = ${instVar}._root = ${instVar}._create();`);
4798
4799
  this._createLines.push(`(${s}._children || (${s}._children = [])).push(${instVar});`);
4800
+ this._createLines.push(`} finally { __popComponent(__prev); } }`);
4799
4801
  for (const { event, value } of eventBindings) {
4800
4802
  const handlerCode = this.generateInComponent(value, "value");
4801
4803
  this._createLines.push(`${elVar}.addEventListener('${event}', (e) => __batch(() => (${handlerCode})(e)));`);
@@ -8749,8 +8751,8 @@ globalThis.zip ??= (...a) => a[0].map((_, i) => a.map(b => b[i]));
8749
8751
  return new CodeGenerator({}).getComponentRuntime();
8750
8752
  }
8751
8753
  // src/browser.js
8752
- var VERSION = "3.13.68";
8753
- var BUILD_DATE = "2026-03-02@06:03:38GMT";
8754
+ var VERSION = "3.13.70";
8755
+ var BUILD_DATE = "2026-03-02@08:04:50GMT";
8754
8756
  if (typeof globalThis !== "undefined") {
8755
8757
  if (!globalThis.__rip)
8756
8758
  new Function(getReactiveRuntime())();
@@ -21,7 +21,7 @@ ${C}return ${T.join(`
21
21
  `)},u.generateInComponent=function(A,_){if(typeof A==="string"&&this.reactiveMembers&&this.reactiveMembers.has(A))return`${this._self}.${A}.value`;if(typeof A==="string"&&this.componentMembers&&this.componentMembers.has(A))return`${this._self}.${A}`;if(Array.isArray(A)&&this.reactiveMembers){let Z=this.transformComponentMembers(A);return this.generate(Z,_)}return this.generate(A,_)},u.generateRender=function(A,_,Z,R){throw Error("render blocks can only be used inside a component")},u.generateOffer=function(A,_,Z,R){throw Error("offer can only be used inside a component")},u.generateAccept=function(A,_,Z,R){throw Error("accept can only be used inside a component")},u.buildRender=function(A){this._elementCount=0,this._textCount=0,this._blockCount=0,this._createLines=[],this._setupLines=[],this._blockFactories=[],this._loopVarStack=[],this._factoryMode=!1,this._factoryVars=null,this._fragChildren=new Map,this._pendingAutoWire=!1,this._autoWireEl=null,this._autoWireExplicit=null;let _=this.is(A,"block")?A.slice(1):[A],Z;if(_.length===0)Z="null";else if(_.length===1)this._pendingAutoWire=!!this._autoEventHandlers,Z=this.generateNode(_[0]),this._pendingAutoWire=!1;else{Z=this.newElementVar("frag"),this._createLines.push(`${Z} = document.createDocumentFragment();`);let R=[];for(let Q of _){let z=this.generateNode(Q);this._createLines.push(`${Z}.appendChild(${z});`),R.push(z)}this._fragChildren.set(Z,R)}return{createLines:this._createLines,setupLines:this._setupLines,blockFactories:this._blockFactories,rootVar:Z}},u.newBlockVar=function(){return`create_block_${this._blockCount++}`},u.newElementVar=function(A="el"){let _=`_${A}${this._elementCount++}`;if(this._factoryVars)this._factoryVars.add(_);return this._factoryMode?_:`this.${_}`},u.newTextVar=function(){let A=`_t${this._textCount++}`;if(this._factoryVars)this._factoryVars.add(A);return this._factoryMode?A:`this.${A}`},Object.defineProperty(u,"_self",{get(){return this._factoryMode?"ctx":"this"}}),u._pushEffect=function(A){if(this._factoryMode)this._setupLines.push(`disposers.push(__effect(() => { ${A} }));`);else this._setupLines.push(`__effect(() => { ${A} });`)},u.generateNode=function(A){if(typeof A==="string"||A instanceof String){let J=A.valueOf();if(J.startsWith('"')||J.startsWith("'")||J.startsWith("`")){let K=this.newTextVar();return this._createLines.push(`${K} = document.createTextNode(${J});`),K}if(this.reactiveMembers&&this.reactiveMembers.has(J)){let K=this.newTextVar();return this._createLines.push(`${K} = document.createTextNode('');`),this._pushEffect(`${K}.data = ${this._self}.${J}.value;`),K}if(J==="slot"&&this.componentMembers){let K=this._self,q=this.newElementVar("slot");return this._createLines.push(`${q} = ${K}.children instanceof Node ? ${K}.children : (${K}.children != null ? document.createTextNode(String(${K}.children)) : document.createComment(''));`),q}let[D,M]=J.split("#"),X=this.newElementVar(),w=D||"div";if(w1.has(w)||this._svgDepth>0)this._createLines.push(`${X} = document.createElementNS('http://www.w3.org/2000/svg', '${w}');`);else this._createLines.push(`${X} = document.createElement('${w}');`);if(M)this._createLines.push(`${X}.id = '${M}';`);return X}if(!Array.isArray(A)){let J=this.newElementVar("c");return this._createLines.push(`${J} = document.createComment('unknown');`),J}let[_,...Z]=A,R=typeof _==="string"?_:_ instanceof String?_.valueOf():null;if(R&&this.isComponent(R))return this.generateChildComponent(R,Z);if(R==="slot"&&this.componentMembers){let J=this._self,D=this.newElementVar("slot");return this._createLines.push(`${D} = ${J}.children instanceof Node ? ${J}.children : (${J}.children != null ? document.createTextNode(String(${J}.children)) : document.createComment(''));`),D}if(R&&this.isHtmlTag(R)&&!F(_,"text")){let[J,D]=R.split("#");return this.generateTag(J||"div",[],Z,D)}if(R==="."){let[,J,D]=A;if(J==="this"&&typeof D==="string"){let P=this._self;if(this.reactiveMembers&&this.reactiveMembers.has(D)){let H=this.newTextVar();return this._createLines.push(`${H} = document.createTextNode('');`),this._pushEffect(`${H}.data = ${P}.${D}.value;`),H}let G=this.newElementVar("slot");return this._createLines.push(`${G} = ${P}.${D} instanceof Node ? ${P}.${D} : (${P}.${D} != null ? document.createTextNode(String(${P}.${D})) : document.createComment(''));`),G}let{tag:M,classes:X,id:w,base:K}=this.collectTemplateClasses(A);if(!F(K,"text")&&M&&this.isHtmlTag(M))return this.generateTag(M,X,[],w);let q=this.newTextVar(),O=this.generateInComponent(A,"value");return this._createLines.push(`${q} = document.createTextNode(String(${O}));`),q}if(Array.isArray(_)){if(Array.isArray(_[0])&&_[0][0]==="."&&(_[0][2]==="__clsx"||_[0][2]instanceof String&&_[0][2].valueOf()==="__clsx")){let X=typeof _[0][1]==="string"?_[0][1]:_[0][1].valueOf(),w=_.slice(1);return this.generateDynamicTag(X,w,Z)}let{tag:J,classes:D,id:M}=this.collectTemplateClasses(_);if(J&&this.isHtmlTag(J)){if(D.length===1&&D[0]==="__clsx")return this.generateDynamicTag(J,Z,[]);return this.generateTag(J,D,Z,M)}}if(R==="->"||R==="=>")return this.generateTemplateBlock(Z[1]);if(R==="if")return this.generateConditional(A);if(R==="for"||R==="for-in"||R==="for-of"||R==="for-as")return this.generateTemplateLoop(A);let Q=this.newTextVar(),z=this.generateInComponent(A,"value");if(this.hasReactiveDeps(A))this._createLines.push(`${Q} = document.createTextNode('');`),this._pushEffect(`${Q}.data = ${z};`);else this._createLines.push(`${Q} = document.createTextNode(String(${z}));`);return Q},u.appendChildren=function(A,_){for(let Z of _)if(this.is(Z,"->")||this.is(Z,"=>")){let R=Z[2];if(this.is(R,"block"))for(let Q of R.slice(1))if(this.is(Q,"object"))this.generateAttributes(A,Q);else{let z=this.generateNode(Q);this._createLines.push(`${A}.appendChild(${z});`)}else if(R){let Q=this.generateNode(R);this._createLines.push(`${A}.appendChild(${Q});`)}}else if(this.is(Z,"object"))this.generateAttributes(A,Z);else if(typeof Z==="string"||Z instanceof String){let R=Z.valueOf(),Q=R.split(/[#.]/)[0];if(this.isHtmlTag(Q||"div")||this.isComponent(Q)){let z=this.generateNode(Z);this._createLines.push(`${A}.appendChild(${z});`)}else{let z=this.newTextVar();if(R.startsWith('"')||R.startsWith("'")||R.startsWith("`"))this._createLines.push(`${z} = document.createTextNode(${R});`);else if(this.reactiveMembers&&this.reactiveMembers.has(R))this._createLines.push(`${z} = document.createTextNode('');`),this._pushEffect(`${z}.data = ${this._self}.${R}.value;`);else if(this.componentMembers&&this.componentMembers.has(R))this._createLines.push(`${z} = document.createTextNode(String(${this._self}.${R}));`);else this._createLines.push(`${z} = document.createTextNode(${this.generateInComponent(Z,"value")});`);this._createLines.push(`${A}.appendChild(${z});`)}}else if(Z){let R=this.generateNode(Z);this._createLines.push(`${A}.appendChild(${R});`)}},u._claimAutoWire=function(A){if(!this._pendingAutoWire||!this._autoEventHandlers?.size)return!1;return this._pendingAutoWire=!1,this._autoWireEl=A,this._autoWireExplicit=new Set,!0},u._emitAutoWire=function(A,_){if(!_)return;for(let[Z,R]of this._autoEventHandlers)if(!this._autoWireExplicit.has(Z))this._createLines.push(`${A}.addEventListener('${Z}', (e) => __batch(() => ${this._self}.${R}(e)));`);this._autoWireEl=null,this._autoWireExplicit=null},u.generateTag=function(A,_,Z,R){let Q=this.newElementVar(),z=w1.has(A)||this._svgDepth>0;if(z)this._createLines.push(`${Q} = document.createElementNS('http://www.w3.org/2000/svg', '${A}');`);else this._createLines.push(`${Q} = document.createElement('${A}');`);if(R)this._createLines.push(`${Q}.id = '${R}';`);let J=this._claimAutoWire(Q),D=this._pendingClassArgs,M=this._pendingClassEl;if(_.length>0)this._pendingClassArgs=[`'${_.join(" ")}'`],this._pendingClassEl=Q;if(A==="svg")this._svgDepth=(this._svgDepth||0)+1;if(this.appendChildren(Q,Z),A==="svg")this._svgDepth--;if(_.length>0){if(this._pendingClassArgs.length===1)if(z)this._createLines.push(`${Q}.setAttribute('class', '${_.join(" ")}');`);else this._createLines.push(`${Q}.className = '${_.join(" ")}';`);else{let X=this._pendingClassArgs.join(", ");if(z)this._pushEffect(`${Q}.setAttribute('class', __clsx(${X}));`);else this._pushEffect(`${Q}.className = __clsx(${X});`)}this._pendingClassArgs=D,this._pendingClassEl=M}return this._emitAutoWire(Q,J),Q},u.generateDynamicTag=function(A,_,Z){let R=this.newElementVar();if(w1.has(A)||this._svgDepth>0)this._createLines.push(`${R} = document.createElementNS('http://www.w3.org/2000/svg', '${A}');`);else this._createLines.push(`${R} = document.createElement('${A}');`);let Q=this._claimAutoWire(R),z=_.map((M)=>this.generateInComponent(M,"value")),J=this._pendingClassArgs,D=this._pendingClassEl;if(this._pendingClassArgs=z,this._pendingClassEl=R,A==="svg")this._svgDepth=(this._svgDepth||0)+1;if(this.appendChildren(R,Z),A==="svg")this._svgDepth--;if(this._pendingClassArgs.length>0){let M=this._pendingClassArgs.join(", ");if(w1.has(A)||this._svgDepth>0)this._pushEffect(`${R}.setAttribute('class', __clsx(${M}));`);else this._pushEffect(`${R}.className = __clsx(${M});`)}return this._pendingClassArgs=J,this._pendingClassEl=D,this._emitAutoWire(R,Q),R},u.generateAttributes=function(A,_){let Z=v3(_.slice(1));for(let R=1;R<_.length;R++){let[Q,z]=_[R];if(this.is(Q,".")&&Q[1]==="this"){let J=Q[2];if(this._autoWireExplicit&&this._autoWireEl===A)this._autoWireExplicit.add(J);if(typeof z==="string"&&this.componentMembers?.has(z))this._createLines.push(`${A}.addEventListener('${J}', (e) => __batch(() => ${this._self}.${z}(e)));`);else{let D=this.generateInComponent(z,"value");this._createLines.push(`${A}.addEventListener('${J}', (e) => __batch(() => (${D})(e)));`)}continue}if(typeof Q==="string"||Q instanceof String){if(Q.startsWith('"')&&Q.endsWith('"'))Q=Q.slice(1,-1);if(Q==="class"||Q==="className"){let D=this.generateInComponent(z,"value");if(this._pendingClassArgs&&this._pendingClassEl===A)this._pendingClassArgs.push(D);else if(this.hasReactiveDeps(z))if(this._svgDepth>0)this._pushEffect(`${A}.setAttribute('class', __clsx(${D}));`);else this._pushEffect(`${A}.className = __clsx(${D});`);else if(this._svgDepth>0)this._createLines.push(`${A}.setAttribute('class', ${D});`);else this._createLines.push(`${A}.className = ${D};`);continue}if(Q==="__transition__"){let D=String(z).replace(/^["']|["']$/g,"");this._createLines.push(`this._t = "${D}";`);continue}if(Q==="ref"){let D=String(z).replace(/^["']|["']$/g,"");this._createLines.push(`${this._self}.${D} = ${A};`);continue}if(Q.startsWith("__bind_")&&Q.endsWith("__")){let D=Q.slice(7,-2),M=this.generateInComponent(z,"value"),X,w;if(D==="checked")X="change",w="e.target.checked";else X="input",w=Z==="number"||Z==="range"?"e.target.valueAsNumber":"e.target.value";this._pushEffect(`${A}.${D} = ${M};`);let K=`${M} = ${w}`,q=!this.isSimpleAssignable(z)&&this.findRootReactiveMember(z);if(q)K+=`; ${this._self}.${q}.touch?.()`;this._createLines.push(`${A}.addEventListener('${X}', (e) => { ${K}; });`);continue}let J=this.generateInComponent(z,"value");if((Q==="value"||Q==="checked")&&this.hasReactiveDeps(z)){this._pushEffect(`${A}.${Q} = ${J};`);continue}if(Q==="innerHTML"||Q==="textContent"||Q==="innerText")if(this.hasReactiveDeps(z))this._pushEffect(`${A}.${Q} = ${J};`);else this._createLines.push(`${A}.${Q} = ${J};`);else if(g3.has(Q))if(this.hasReactiveDeps(z))this._pushEffect(`${A}.toggleAttribute('${Q}', !!${J});`);else this._createLines.push(`if (${J}) ${A}.setAttribute('${Q}', '');`);else if(this.hasReactiveDeps(z))if(Array.isArray(z)&&z[0]==="presence")this._pushEffect(`{ const __v = ${J}; __v == null ? ${A}.removeAttribute('${Q}') : ${A}.setAttribute('${Q}', __v); }`);else this._pushEffect(`${A}.setAttribute('${Q}', ${J});`);else if(Array.isArray(z)&&z[0]==="presence")this._createLines.push(`{ const __v = ${J}; if (__v != null) ${A}.setAttribute('${Q}', __v); }`);else this._createLines.push(`${A}.setAttribute('${Q}', ${J});`)}}},u.generateTemplateBlock=function(A){if(!Array.isArray(A)||A[0]!=="block")return this.generateNode(A);let _=A.slice(1);if(_.length===0){let Q=this.newElementVar("empty");return this._createLines.push(`${Q} = document.createComment('');`),Q}if(_.length===1)return this.generateNode(_[0]);let Z=this.newElementVar("frag");this._createLines.push(`${Z} = document.createDocumentFragment();`);let R=[];for(let Q of _){let z=this.generateNode(Q);this._createLines.push(`${Z}.appendChild(${z});`),R.push(z)}return this._fragChildren.set(Z,R),Z},u.generateConditional=function(A){this._pendingAutoWire=!1;let[,_,Z,R]=A,Q=this.newElementVar("anchor");this._createLines.push(`${Q} = document.createComment('if');`);let z=this.generateInComponent(_,"value"),J=this._loopVarStack.map((O)=>`${O.itemVar}, ${O.indexVar}`).join(", "),D=J?`, ${J}`:"",M=this.newBlockVar();this.generateConditionBranch(M,Z);let X=null;if(R)X=this.newBlockVar(),this.generateConditionBranch(X,R);let w=[];w.push(`// Conditional: ${M}${X?" / "+X:""}`),w.push("{"),w.push(` const anchor = ${Q};`),w.push(" let currentBlock = null;"),w.push(" let showing = null;");let K=this._factoryMode?"disposers.push(__effect(() => {":"__effect(() => {",q=this._factoryMode?"}));":"});";if(w.push(` ${K}`),w.push(` const show = !!(${z});`),w.push(` const want = show ? 'then' : ${R?"'else'":"null"};`),w.push(" if (want === showing) return;"),w.push(""),w.push(" if (currentBlock) {"),w.push(" const leaving = currentBlock;"),w.push(" if (leaving._t) { __transition(leaving._first, leaving._t, 'leave', () => leaving.d(true)); }"),w.push(" else { leaving.d(true); }"),w.push(" currentBlock = null;"),w.push(" }"),w.push(" showing = want;"),w.push(""),w.push(" if (want === 'then') {"),w.push(` currentBlock = ${M}(${this._self}${D});`),w.push(" currentBlock.c();"),w.push(" if (anchor.parentNode) currentBlock.m(anchor.parentNode, anchor.nextSibling);"),w.push(` currentBlock.p(${this._self}${D});`),w.push(" if (currentBlock._t) __transition(currentBlock._first, currentBlock._t, 'enter');"),w.push(" }"),R)w.push(" if (want === 'else') {"),w.push(` currentBlock = ${X}(${this._self}${D});`),w.push(" currentBlock.c();"),w.push(" if (anchor.parentNode) currentBlock.m(anchor.parentNode, anchor.nextSibling);"),w.push(` currentBlock.p(${this._self}${D});`),w.push(" if (currentBlock._t) __transition(currentBlock._first, currentBlock._t, 'enter');"),w.push(" }");return w.push(` ${q}`),w.push("}"),this._setupLines.push(w.join(`
22
22
  `)),Q},u.generateConditionBranch=function(A,_){let Z=[this._createLines,this._setupLines,this._factoryMode,this._factoryVars];this._createLines=[],this._setupLines=[],this._factoryMode=!0,this._factoryVars=new Set;let R=this.generateTemplateBlock(_),Q=this._createLines,z=this._setupLines,J=this._factoryVars;[this._createLines,this._setupLines,this._factoryMode,this._factoryVars]=Z;let D=this._loopVarStack.map((X)=>`${X.itemVar}, ${X.indexVar}`).join(", "),M=D?`, ${D}`:"";this.emitBlockFactory(A,`ctx${M}`,R,Q,z,J)},u.emitBlockFactory=function(A,_,Z,R,Q,z,J){let D=[];if(D.push(`function ${A}(${_}) {`),z.size>0)D.push(` let ${[...z].join(", ")};`);let M=Q.length>0;if(M)D.push(" let disposers = [];");if(D.push(" return {"),J)D.push(" _s: true,");let X=this._fragChildren.get(Z),w=X?X[0]:Z;D.push(" c() {");for(let K of R)D.push(` ${K}`);if(D.push(` this._first = ${w};`),D.push(" },"),D.push(" m(target, anchor) {"),X)for(let K of X)D.push(` if (target) target.insertBefore(${K}, anchor);`);else D.push(` if (target) target.insertBefore(${Z}, anchor);`);if(D.push(" },"),D.push(` p(${_}) {`),M){D.push(" disposers.forEach(d => d());"),D.push(" disposers = [];");for(let K of Q)D.push(` ${K}`)}if(D.push(" },"),D.push(" d(detaching) {"),M)D.push(" disposers.forEach(d => d());");if(X)for(let K of X)D.push(` if (detaching && ${K}) ${K}.remove();`);else D.push(` if (detaching && ${Z}) ${Z}.remove();`);D.push(" }"),D.push(" };"),D.push("}"),this._blockFactories.push(D.join(`
23
23
  `))},u.generateTemplateLoop=function(A){this._pendingAutoWire=!1;let[_,Z,R,Q,z,J]=A,D=this.newBlockVar(),M=this.newElementVar("anchor");this._createLines.push(`${M} = document.createComment('for');`);let X=Array.isArray(Z)?Z:[Z],w=X[0],K=X[1]||null;if(!K){let c=new Set(this._loopVarStack.flatMap((v)=>[v.itemVar,v.indexVar]));c.add(w);for(let v of["i","j","k","l","m","n"])if(!c.has(v)){K=v;break}K=K||`_i${this._loopVarStack.length}`}let q=this.generateInComponent(R,"value"),O=w;if(this.is(J,"block")&&J.length>1){let c=J[1];if(Array.isArray(c))for(let v of c){if(this.is(v,"object"))for(let k=1;k<v.length;k++){let[o,F1]=v[k];if(o==="key"){O=this.generate(F1,"value");break}}if(O!==w)break}}let P=[this._createLines,this._setupLines,this._factoryMode,this._factoryVars];this._createLines=[],this._setupLines=[],this._factoryMode=!0,this._factoryVars=new Set;let G=this._loopVarStack.map((c)=>`${c.itemVar}, ${c.indexVar}`).join(", "),H=G?`, ${G}`:"";this._loopVarStack.push({itemVar:w,indexVar:K});let I=this.generateTemplateBlock(J);this._loopVarStack.pop();let E=this._createLines,N=this._setupLines,B=this._factoryVars;[this._createLines,this._setupLines,this._factoryMode,this._factoryVars]=P;let T=N.length===0,C=`ctx, ${w}, ${K}${H}`;this.emitBlockFactory(D,C,I,E,N,B,T);let h=O!==w?`(${w}, ${K}) => ${O}`:"null",S=G?`, ${G}`:"",j=[];j.push(`// Loop: ${D}`),j.push("{"),j.push(" const __s = { blocks: [], keys: [] };");let b=this._factoryMode?"disposers.push(__effect(() => {":"__effect(() => {",m=this._factoryMode?"}));":"});";return j.push(` ${b}`),j.push(` __reconcile(${M}, __s, ${q}, ${this._self}, ${D}, ${h}${S});`),j.push(` ${m}`),j.push("}"),this._setupLines.push(j.join(`
24
- `)),M},u.generateChildComponent=function(A,_){this._pendingAutoWire=!1;let Z=this.newElementVar("inst"),R=this.newElementVar("el"),{propsCode:Q,reactiveProps:z,eventBindings:J,childrenSetupLines:D}=this.buildComponentProps(_),M=this._self;this._createLines.push(`${Z} = new ${A}(${Q});`),this._createLines.push(`${R} = ${Z}._root = ${Z}._create();`),this._createLines.push(`(${M}._children || (${M}._children = [])).push(${Z});`);for(let{event:X,value:w}of J){let K=this.generateInComponent(w,"value");this._createLines.push(`${R}.addEventListener('${X}', (e) => __batch(() => (${K})(e)));`)}this._setupLines.push(`try { if (${Z}._setup) ${Z}._setup(); if (${Z}.mounted) ${Z}.mounted(); } catch (__e) { __handleComponentError(__e, ${Z}); }`);for(let{key:X,valueCode:w}of z)this._pushEffect(`if (${Z}.${X}) ${Z}.${X}.value = ${w};`);for(let X of D)this._setupLines.push(X);return R},u.buildComponentProps=function(A){let _=[],Z=[],R=[],Q=null,z=[],J=(X,w)=>{if(X.startsWith("@")){R.push({event:X.slice(1).split(".")[0],value:w});return}if(this.reactiveMembers&&(typeof w==="string"&&this.reactiveMembers.has(w)||Array.isArray(w)&&w[0]==="."&&w[1]==="this"&&typeof w[2]==="string"&&this.reactiveMembers.has(w[2]))){let q=typeof w==="string"?w:w[2];_.push(`${X}: ${this._self}.${q}`)}else{let q=this.generateInComponent(w,"value");if(_.push(`${X}: ${q}`),this.hasReactiveDeps(w))Z.push({key:X,valueCode:q})}},D=(X)=>{for(let w=1;w<X.length;w++){let[K,q]=X[w];if(typeof K==="string")J(K,q);else if(Array.isArray(K)&&K[0]==="."&&K[1]==="this"&&typeof K[2]==="string")R.push({event:K[2],value:q})}};for(let X of A)if(this.is(X,"object"))D(X);else if(Array.isArray(X)&&(X[0]==="->"||X[0]==="=>")){let w=X[2];if(w){if(this.is(w,"block")){let K=[];for(let q of w.slice(1))if(this.is(q,"object"))D(q);else K.push(q);w=K.length>0?["block",...K]:null}if(w){let K=this._createLines,q=this._setupLines;this._createLines=[],this._setupLines=[],Q=this.generateTemplateBlock(w);let O=this._createLines,P=this._setupLines;this._createLines=K,this._setupLines=q;for(let G of O)this._createLines.push(G);z.push(...P),_.push(`children: ${Q}`)}}}else if(X&&!Q){let w=this.newTextVar(),K=typeof X==="string"?X.valueOf():null;if(K&&(K.startsWith('"')||K.startsWith("'")||K.startsWith("`")))this._createLines.push(`${w} = document.createTextNode(${K});`);else this._createLines.push(`${w} = document.createTextNode(${this.generateInComponent(X,"value")});`);Q=w,_.push(`children: ${Q}`)}return{propsCode:_.length>0?`{ ${_.join(", ")} }`:"{}",reactiveProps:Z,eventBindings:R,childrenSetupLines:z}},u.hasReactiveDeps=function(A){if(typeof A==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A));if(!Array.isArray(A))return!1;if(A[0]==="."&&A[1]==="this"&&typeof A[2]==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A[2]));if(A[0]==="."&&this._rootsAtThis(A[1]))return!0;if(Array.isArray(A[0])&&A[0][0]==="."&&A[0][1]==="this"){let _=f(A[0][2]);if(_&&this.componentMembers?.has(_))return!0}for(let _ of A)if(this.hasReactiveDeps(_))return!0;return!1},u.isSimpleAssignable=function(A){if(typeof A==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A));if(Array.isArray(A)&&A[0]==="."&&A[1]==="this"&&typeof A[2]==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A[2]));return!1},u.findRootReactiveMember=function(A){if(typeof A==="string")return this.reactiveMembers?.has(A)?A:null;if(!Array.isArray(A))return null;if(A[0]==="."&&A[1]==="this"&&typeof A[2]==="string")return this.reactiveMembers?.has(A[2])?A[2]:null;if(A[0]==="."||A[0]==="[]")return this.findRootReactiveMember(A[1]);return null},u._rootsAtThis=function(A){if(typeof A==="string")return A==="this";if(!Array.isArray(A)||A[0]!==".")return!1;return this._rootsAtThis(A[1])},u.getComponentRuntime=function(){return`
24
+ `)),M},u.generateChildComponent=function(A,_){this._pendingAutoWire=!1;let Z=this.newElementVar("inst"),R=this.newElementVar("el"),{propsCode:Q,reactiveProps:z,eventBindings:J,childrenSetupLines:D}=this.buildComponentProps(_),M=this._self;this._createLines.push(`{ const __prev = __pushComponent(${M}); try {`),this._createLines.push(`${Z} = new ${A}(${Q});`),this._createLines.push(`${R} = ${Z}._root = ${Z}._create();`),this._createLines.push(`(${M}._children || (${M}._children = [])).push(${Z});`),this._createLines.push("} finally { __popComponent(__prev); } }");for(let{event:X,value:w}of J){let K=this.generateInComponent(w,"value");this._createLines.push(`${R}.addEventListener('${X}', (e) => __batch(() => (${K})(e)));`)}this._setupLines.push(`try { if (${Z}._setup) ${Z}._setup(); if (${Z}.mounted) ${Z}.mounted(); } catch (__e) { __handleComponentError(__e, ${Z}); }`);for(let{key:X,valueCode:w}of z)this._pushEffect(`if (${Z}.${X}) ${Z}.${X}.value = ${w};`);for(let X of D)this._setupLines.push(X);return R},u.buildComponentProps=function(A){let _=[],Z=[],R=[],Q=null,z=[],J=(X,w)=>{if(X.startsWith("@")){R.push({event:X.slice(1).split(".")[0],value:w});return}if(this.reactiveMembers&&(typeof w==="string"&&this.reactiveMembers.has(w)||Array.isArray(w)&&w[0]==="."&&w[1]==="this"&&typeof w[2]==="string"&&this.reactiveMembers.has(w[2]))){let q=typeof w==="string"?w:w[2];_.push(`${X}: ${this._self}.${q}`)}else{let q=this.generateInComponent(w,"value");if(_.push(`${X}: ${q}`),this.hasReactiveDeps(w))Z.push({key:X,valueCode:q})}},D=(X)=>{for(let w=1;w<X.length;w++){let[K,q]=X[w];if(typeof K==="string")J(K,q);else if(Array.isArray(K)&&K[0]==="."&&K[1]==="this"&&typeof K[2]==="string")R.push({event:K[2],value:q})}};for(let X of A)if(this.is(X,"object"))D(X);else if(Array.isArray(X)&&(X[0]==="->"||X[0]==="=>")){let w=X[2];if(w){if(this.is(w,"block")){let K=[];for(let q of w.slice(1))if(this.is(q,"object"))D(q);else K.push(q);w=K.length>0?["block",...K]:null}if(w){let K=this._createLines,q=this._setupLines;this._createLines=[],this._setupLines=[],Q=this.generateTemplateBlock(w);let O=this._createLines,P=this._setupLines;this._createLines=K,this._setupLines=q;for(let G of O)this._createLines.push(G);z.push(...P),_.push(`children: ${Q}`)}}}else if(X&&!Q){let w=this.newTextVar(),K=typeof X==="string"?X.valueOf():null;if(K&&(K.startsWith('"')||K.startsWith("'")||K.startsWith("`")))this._createLines.push(`${w} = document.createTextNode(${K});`);else this._createLines.push(`${w} = document.createTextNode(${this.generateInComponent(X,"value")});`);Q=w,_.push(`children: ${Q}`)}return{propsCode:_.length>0?`{ ${_.join(", ")} }`:"{}",reactiveProps:Z,eventBindings:R,childrenSetupLines:z}},u.hasReactiveDeps=function(A){if(typeof A==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A));if(!Array.isArray(A))return!1;if(A[0]==="."&&A[1]==="this"&&typeof A[2]==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A[2]));if(A[0]==="."&&this._rootsAtThis(A[1]))return!0;if(Array.isArray(A[0])&&A[0][0]==="."&&A[0][1]==="this"){let _=f(A[0][2]);if(_&&this.componentMembers?.has(_))return!0}for(let _ of A)if(this.hasReactiveDeps(_))return!0;return!1},u.isSimpleAssignable=function(A){if(typeof A==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A));if(Array.isArray(A)&&A[0]==="."&&A[1]==="this"&&typeof A[2]==="string")return!!(this.reactiveMembers&&this.reactiveMembers.has(A[2]));return!1},u.findRootReactiveMember=function(A){if(typeof A==="string")return this.reactiveMembers?.has(A)?A:null;if(!Array.isArray(A))return null;if(A[0]==="."&&A[1]==="this"&&typeof A[2]==="string")return this.reactiveMembers?.has(A[2])?A[2]:null;if(A[0]==="."||A[0]==="[]")return this.findRootReactiveMember(A[1]);return null},u._rootsAtThis=function(A){if(typeof A==="string")return A==="this";if(!Array.isArray(A)||A[0]!==".")return!1;return this._rootsAtThis(A[1])},u.getComponentRuntime=function(){return`
25
25
  // ============================================================================
26
26
  // Rip Component Runtime
27
27
  // ============================================================================
@@ -718,7 +718,7 @@ globalThis.sleep ??= (ms) => new Promise(r => setTimeout(r, ms));
718
718
  globalThis.todo ??= (msg) => { throw new Error(msg || "Not implemented"); };
719
719
  globalThis.warn ??= console.warn;
720
720
  globalThis.zip ??= (...a) => a[0].map((_, i) => a.map(b => b[i]));
721
- `}function z1(){return new l({}).getReactiveRuntime()}function K1(){return new l({}).getComponentRuntime()}var D2="3.13.68",M2="2026-03-02@06:03:38GMT";if(typeof globalThis<"u"){if(!globalThis.__rip)Function(z1())();if(!globalThis.__ripComponent)Function(K1())()}var x3=($)=>{let U=$.match(/^[ \t]*(?=\S)/gm),F=Math.min(...(U||[]).map((W)=>W.length));return $.replace(RegExp(`^[ ]{${F}}`,"gm"),"").trim()};async function H2(){let $=[],U=document.querySelector('script[src$="rip.min.js"], script[src$="rip.js"]'),F=U?.getAttribute("data-src");if(F){for(let u of F.trim().split(/\s+/))if(u)$.push({url:u})}for(let u of document.querySelectorAll('script[type="text/rip"]'))if(u.src)$.push({url:u.src});else{let f=x3(u.textContent);if(f)$.push({code:f})}if($.length>0){await Promise.all($.map(async(Y)=>{if(!Y.url)return;try{let A=await fetch(Y.url);if(!A.ok){console.error(`Rip: failed to fetch ${Y.url} (${A.status})`);return}Y.code=await A.text()}catch(A){console.error(`Rip: failed to fetch ${Y.url}:`,A.message)}}));let u={skipRuntimes:!0,skipExports:!0},f=[];for(let Y of $){if(!Y.code)continue;try{let A=t(Y.code,u);f.push({js:A,url:Y.url||"inline"})}catch(A){console.error(`Rip compile error in ${Y.url||"inline"}:`,A.message)}}if(f.length>0){let Y=f.map((_)=>_.js).join(`
721
+ `}function z1(){return new l({}).getReactiveRuntime()}function K1(){return new l({}).getComponentRuntime()}var D2="3.13.70",M2="2026-03-02@08:04:50GMT";if(typeof globalThis<"u"){if(!globalThis.__rip)Function(z1())();if(!globalThis.__ripComponent)Function(K1())()}var x3=($)=>{let U=$.match(/^[ \t]*(?=\S)/gm),F=Math.min(...(U||[]).map((W)=>W.length));return $.replace(RegExp(`^[ ]{${F}}`,"gm"),"").trim()};async function H2(){let $=[],U=document.querySelector('script[src$="rip.min.js"], script[src$="rip.js"]'),F=U?.getAttribute("data-src");if(F){for(let u of F.trim().split(/\s+/))if(u)$.push({url:u})}for(let u of document.querySelectorAll('script[type="text/rip"]'))if(u.src)$.push({url:u.src});else{let f=x3(u.textContent);if(f)$.push({code:f})}if($.length>0){await Promise.all($.map(async(Y)=>{if(!Y.url)return;try{let A=await fetch(Y.url);if(!A.ok){console.error(`Rip: failed to fetch ${Y.url} (${A.status})`);return}Y.code=await A.text()}catch(A){console.error(`Rip: failed to fetch ${Y.url}:`,A.message)}}));let u={skipRuntimes:!0,skipExports:!0},f=[];for(let Y of $){if(!Y.code)continue;try{let A=t(Y.code,u);f.push({js:A,url:Y.url||"inline"})}catch(A){console.error(`Rip compile error in ${Y.url||"inline"}:`,A.message)}}if(f.length>0){let Y=f.map((_)=>_.js).join(`
722
722
  `),A=U?.getAttribute("data-mount");if(A){let _=U.getAttribute("data-target")||"body";Y+=`
723
723
  ${A}.mount(${JSON.stringify(_)});`}try{await(0,eval)(`(async()=>{
724
724
  ${Y}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rip-lang",
3
- "version": "3.13.70",
3
+ "version": "3.13.71",
4
4
  "description": "A modern language that compiles to JavaScript",
5
5
  "type": "module",
6
6
  "main": "src/compiler.js",
package/src/components.js CHANGED
@@ -1767,9 +1767,11 @@ export function installComponentSupport(CodeGenerator, Lexer) {
1767
1767
  const { propsCode, reactiveProps, eventBindings, childrenSetupLines } = this.buildComponentProps(args);
1768
1768
 
1769
1769
  const s = this._self;
1770
+ this._createLines.push(`{ const __prev = __pushComponent(${s}); try {`);
1770
1771
  this._createLines.push(`${instVar} = new ${componentName}(${propsCode});`);
1771
1772
  this._createLines.push(`${elVar} = ${instVar}._root = ${instVar}._create();`);
1772
1773
  this._createLines.push(`(${s}._children || (${s}._children = [])).push(${instVar});`);
1774
+ this._createLines.push(`} finally { __popComponent(__prev); } }`);
1773
1775
 
1774
1776
  for (const { event, value } of eventBindings) {
1775
1777
  const handlerCode = this.generateInComponent(value, 'value');