reactpy 2.0.0b7__py3-none-any.whl → 2.0.0b8__py3-none-any.whl

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.
reactpy/__init__.py CHANGED
@@ -23,7 +23,7 @@ from reactpy.executors.pyscript.components import pyscript_component
23
23
  from reactpy.utils import Ref, reactpy_to_string, string_to_reactpy
24
24
 
25
25
  __author__ = "The Reactive Python Team"
26
- __version__ = "2.0.0b7"
26
+ __version__ = "2.0.0b8"
27
27
 
28
28
  __all__ = [
29
29
  "Ref",
reactpy/core/hooks.py CHANGED
@@ -182,7 +182,6 @@ def use_effect(
182
182
  def use_async_effect(
183
183
  function: None = None,
184
184
  dependencies: Sequence[Any] | ellipsis | None = ...,
185
- shutdown_timeout: float = 0.1,
186
185
  ) -> Callable[[_EffectApplyFunc], None]: ...
187
186
 
188
187
 
@@ -190,14 +189,12 @@ def use_async_effect(
190
189
  def use_async_effect(
191
190
  function: _AsyncEffectFunc,
192
191
  dependencies: Sequence[Any] | ellipsis | None = ...,
193
- shutdown_timeout: float = 0.1,
194
192
  ) -> None: ...
195
193
 
196
194
 
197
195
  def use_async_effect(
198
196
  function: _AsyncEffectFunc | None = None,
199
197
  dependencies: Sequence[Any] | ellipsis | None = ...,
200
- shutdown_timeout: float = 0.1,
201
198
  ) -> Callable[[_AsyncEffectFunc], None] | None:
202
199
  """
203
200
  A hook that manages an asynchronous side effect in a React-like component.
@@ -214,9 +211,6 @@ def use_async_effect(
214
211
  of any value in the given sequence changes (i.e. their :func:`id` is
215
212
  different). By default these are inferred based on local variables that are
216
213
  referenced by the given function.
217
- shutdown_timeout:
218
- The amount of time (in seconds) to wait for the effect to complete before
219
- forcing a shutdown.
220
214
 
221
215
  Returns:
222
216
  If not function is provided, a decorator. Otherwise ``None``.
@@ -232,26 +226,37 @@ def use_async_effect(
232
226
  # always clean up the previous effect's resources
233
227
  run_effect_cleanup(cleanup_func)
234
228
 
235
- # Execute the effect in a background task
229
+ # Execute the effect and store the clean-up function.
230
+ # We run this in a task so it can be cancelled if the stop signal
231
+ # is set before the effect completes.
236
232
  task = asyncio.create_task(func())
237
233
 
238
- # Wait until we get the signal to stop this effect
239
- await stop.wait()
234
+ # Wait for either the effect to complete or the stop signal
235
+ stop_task = asyncio.create_task(stop.wait())
236
+ done, _ = await asyncio.wait(
237
+ [task, stop_task],
238
+ return_when=asyncio.FIRST_COMPLETED,
239
+ )
240
240
 
241
- # If renders are queued back-to-back, the effect might not have
242
- # completed. So, we give the task a small amount of time to finish.
243
- # If it manages to finish, we can obtain a clean-up function.
244
- results, _ = await asyncio.wait([task], timeout=shutdown_timeout)
245
- if results:
246
- cleanup_func.current = results.pop().result()
241
+ # If the effect completed first, store the cleanup function
242
+ if task in done:
243
+ cleanup_func.current = task.result()
244
+ # Cancel the stop task since we don't need it anymore
245
+ stop_task.cancel()
246
+ with contextlib.suppress(asyncio.CancelledError):
247
+ await stop_task
248
+ # Now wait for the stop signal to run cleanup
249
+ await stop.wait()
250
+ else:
251
+ # Stop signal came first - cancel the effect task
252
+ task.cancel()
253
+ with contextlib.suppress(asyncio.CancelledError):
254
+ await task
247
255
 
248
256
  # Run the clean-up function when the effect is stopped,
249
257
  # if it hasn't been run already by a new effect
250
258
  run_effect_cleanup(cleanup_func)
251
259
 
252
- # Cancel the task if it's still running
253
- task.cancel()
254
-
255
260
  return memoize(lambda: hook.add_effect(effect))
256
261
 
257
262
  # Handle decorator usage
@@ -110,7 +110,7 @@ def component_from_npm(
110
110
  resolve_imports: bool = ...,
111
111
  resolve_imports_depth: int = ...,
112
112
  version: str = "latest",
113
- cdn: str = "https://esm.sh",
113
+ cdn: str = "https://esm.sh/v135",
114
114
  fallback: Any | None = ...,
115
115
  unmount_before_update: bool = ...,
116
116
  allow_children: bool = ...,
@@ -124,7 +124,7 @@ def component_from_npm(
124
124
  resolve_imports: bool = ...,
125
125
  resolve_imports_depth: int = ...,
126
126
  version: str = "latest",
127
- cdn: str = "https://esm.sh",
127
+ cdn: str = "https://esm.sh/v135",
128
128
  fallback: Any | None = ...,
129
129
  unmount_before_update: bool = ...,
130
130
  allow_children: bool = ...,
@@ -137,7 +137,7 @@ def component_from_npm(
137
137
  resolve_imports: bool = False,
138
138
  resolve_imports_depth: int = 5,
139
139
  version: str = "latest",
140
- cdn: str = "https://esm.sh",
140
+ cdn: str = "https://esm.sh/v135",
141
141
  fallback: Any | None = None,
142
142
  unmount_before_update: bool = False,
143
143
  allow_children: bool = True,
reactpy/reactjs/module.py CHANGED
@@ -228,10 +228,10 @@ def import_reactjs(
228
228
  {"type": "importmap", "id": "reactpy-importmap"},
229
229
  f"""{{
230
230
  "imports": {{
231
- "react": "https://esm.sh/react@{version}{postfix}",
232
- "react-dom": "https://esm.sh/react-dom@{version}{postfix}",
233
- "react-dom/client": "https://esm.sh/react-dom@{version}/client{postfix}",
234
- "react/jsx-runtime": "https://esm.sh/react@{version}/jsx-runtime{postfix}"
231
+ "react": "https://esm.sh/v135/react@{version}{postfix}",
232
+ "react-dom": "https://esm.sh/v135/react-dom@{version}{postfix}",
233
+ "react-dom/client": "https://esm.sh/v135/react-dom@{version}/client{postfix}",
234
+ "react/jsx-runtime": "https://esm.sh/v135/react@{version}/jsx-runtime{postfix}"
235
235
  }}
236
236
  }}""".replace("\n", "").replace(" ", ""),
237
237
  )
@@ -244,10 +244,10 @@ def import_reactjs(
244
244
  {"type": "importmap", "id": "reactpy-importmap"},
245
245
  f"""{{
246
246
  "imports": {{
247
- "react": "https://esm.sh/preact@{version}/compat{postfix}",
248
- "react-dom": "https://esm.sh/preact@{version}/compat{postfix}",
249
- "react-dom/client": "https://esm.sh/preact@{version}/compat/client{postfix}",
250
- "react/jsx-runtime": "https://esm.sh/preact@{version}/compat/jsx-runtime{postfix}"
247
+ "react": "https://esm.sh/v135/preact@{version}/compat{postfix}",
248
+ "react-dom": "https://esm.sh/v135/preact@{version}/compat{postfix}",
249
+ "react-dom/client": "https://esm.sh/v135/preact@{version}/compat/client{postfix}",
250
+ "react/jsx-runtime": "https://esm.sh/v135/preact@{version}/compat/jsx-runtime{postfix}"
251
251
  }}
252
252
  }}""".replace("\n", "").replace(" ", ""),
253
253
  )
reactpy/static/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as J}from"./index-64wy0fss.js";import{e as I,f as v,g as d,i as M,k as g,m as U,n as p,o as _,q as L,s as T,w as E}from"./index-beq660xy.js";var k=v((T0,x)=>{var G0=Object.prototype.hasOwnProperty,K0=Object.prototype.toString;x.exports=function(K,Q,X){if(K0.call(Q)!=="[object Function]")throw TypeError("iterator must be a function");var Y=K.length;if(Y===+Y)for(var Z=0;Z<Y;Z++)Q.call(X,K[Z],Z,K);else for(var W in K)if(G0.call(K,W))Q.call(X,K[W],W,K)}});var c=v((E0,u)=>{var Q0=k();u.exports=z;function z(G,K,Q){if(arguments.length===3)return z.set(G,K,Q);if(arguments.length===2)return z.get(G,K);var X=z.bind(z,G);for(var Y in z)if(z.hasOwnProperty(Y))X[Y]=z[Y].bind(X,G);return X}z.get=function(K,Q){var X=Array.isArray(Q)?Q:z.parse(Q);for(var Y=0;Y<X.length;++Y){var Z=X[Y];if(!(typeof K=="object"&&(Z in K)))throw Error("Invalid reference token: "+Z);K=K[Z]}return K};z.set=function(K,Q,X){var Y=Array.isArray(Q)?Q:z.parse(Q),Z=Y[0];if(Y.length===0)throw Error("Can not set the root object");for(var W=0;W<Y.length-1;++W){var $=Y[W];if(typeof $!=="string"&&typeof $!=="number")$=String($);if($==="__proto__"||$==="constructor"||$==="prototype")continue;if($==="-"&&Array.isArray(K))$=K.length;if(Z=Y[W+1],!($ in K))if(Z.match(/^(\d+|-)$/))K[$]=[];else K[$]={};K=K[$]}if(Z==="-"&&Array.isArray(K))Z=K.length;return K[Z]=X,this};z.remove=function(G,K){var Q=Array.isArray(K)?K:z.parse(K),X=Q[Q.length-1];if(X===void 0)throw Error('Invalid JSON pointer for remove: "'+K+'"');var Y=z.get(G,Q.slice(0,-1));if(Array.isArray(Y)){var Z=+X;if(X===""&&isNaN(Z))throw Error('Invalid array index: "'+X+'"');Array.prototype.splice.call(Y,Z,1)}else delete Y[X]};z.dict=function(K,Q){var X={};return z.walk(K,function(Y,Z){X[Z]=Y},Q),X};z.walk=function(K,Q,X){var Y=[];X=X||function(Z){var W=Object.prototype.toString.call(Z);return W==="[object Object]"||W==="[object Array]"},function Z(W){Q0(W,function($,q){if(Y.push(String(q)),X($))Z($);else Q($,z.compile(Y));Y.pop()})}(K)};z.has=function(K,Q){try{z.get(K,Q)}catch(X){return!1}return!0};z.escape=function(K){return K.toString().replace(/~/g,"~0").replace(/\//g,"~1")};z.unescape=function(K){return K.replace(/~1/g,"/").replace(/~0/g,"~")};z.parse=function(K){if(K==="")return[];if(K.charAt(0)!=="/")throw Error("Invalid JSON pointer: "+K);return K.substring(1).split(/\//).map(z.unescape)};z.compile=function(K){if(K.length===0)return"";return"/"+K.map(z.escape).join("/")}});var F={log:(...G)=>console.log("[ReactPy]",...G),info:(...G)=>console.info("[ReactPy]",...G),warn:(...G)=>console.warn("[ReactPy]",...G),error:(...G)=>console.error("[ReactPy]",...G)};function y(G){let{interval:K,maxInterval:Q,maxRetries:X,backoffMultiplier:Y}=G,Z=0,W=K,$=!1,q=!1,H={},B=()=>{if(q)return;H.current=new WebSocket(G.url),H.current.onopen=()=>{if($=!0,F.info("Connected!"),W=K,Z=0,G.onOpen)G.onOpen()},H.current.onmessage=(o)=>{if(G.onMessage)G.onMessage(o)},H.current.onclose=()=>{if(G.onClose)G.onClose();if(!$){F.info("Failed to connect!");return}if(F.info("Disconnected!"),Z>=X){F.info("Connection max retries exhausted!");return}F.info(`Reconnecting in ${(W/1000).toPrecision(4)} seconds...`),setTimeout(B,W),W=e(W,Y,Q),Z++}};return G.readyPromise.then(()=>F.info("Starting client...")).then(B),H}function e(G,K,Q){return Math.min(G*K,Q)}class b{handlers={};ready;resolveReady;constructor(){this.resolveReady=()=>{},this.ready=new Promise((G)=>this.resolveReady=G)}onMessage(G,K){return(this.handlers[G]||(this.handlers[G]=[])).push(K),this.resolveReady(void 0),()=>{this.handlers[G]=this.handlers[G].filter((Q)=>Q!==K)}}handleIncoming(G){if(!G.type){F.warn("Received message without type",G);return}let K=this.handlers[G.type];if(!K){F.warn("Received message without handler",G);return}K.forEach((Q)=>Q(G))}}class f extends b{urls;socket;mountElement;constructor(G){super();this.urls=G.urls,this.mountElement=G.mountElement,this.socket=y({url:this.urls.componentUrl,readyPromise:this.ready,...G.reconnectOptions,onMessage:async({data:K})=>this.handleIncoming(JSON.parse(K))})}sendMessage(G){this.socket.current?.send(JSON.stringify(G))}loadModule(G){return import(`${this.urls.jsModulesPath}${G}`)}}var n=I(c(),1);var w={__stop__:!0};function C(G,K=10){if(!G||typeof G!=="object")return console.warn("eventToObject: Expected an object input, received:",G),G;let Q=new WeakSet;Q.add(G);let X={};for(let Y in G)try{if(V(G[Y],Y))continue;else if(typeof G[Y]==="object"){let Z=A(G[Y],K,Q);if(Z!==w)X[Y]=Z}else X[Y]=G[Y]}catch{continue}if(typeof window<"u"&&window.Event&&G instanceof window.Event)X.selection=X0(K,Q);return X}function X0(G,K){if(typeof window>"u"||!window.getSelection)return null;let Q=window.getSelection();if(!Q)return null;return{type:Q.type,anchorNode:Q.anchorNode?A(Q.anchorNode,G,K):null,anchorOffset:Q.anchorOffset,focusNode:Q.focusNode?A(Q.focusNode,G,K):null,focusOffset:Q.focusOffset,isCollapsed:Q.isCollapsed,rangeCount:Q.rangeCount,selectedText:Q.toString()}}function A(G,K,Q){let X=K-1;if(X<=0&&typeof G==="object")return w;if(!G||typeof G!=="object")return G;if(Q.has(G))return w;Q.add(G);try{if(Array.isArray(G)||typeof G?.length==="number"&&typeof G[Symbol.iterator]==="function"&&!Object.prototype.toString.call(G).includes("Map")&&!(G instanceof CSSStyleDeclaration))return Y0(G,X,Q);return Z0(G,X,Q)}finally{Q.delete(G)}}function Y0(G,K,Q){let X=[];for(let Y=0;Y<G.length;Y++)if(V(G[Y]))continue;else if(typeof G[Y]==="object"){let Z=A(G[Y],K,Q);if(Z!==w)X.push(Z)}else X.push(G[Y]);return X}function Z0(G,K,Q){let X={};for(let $ in G)try{if(V(G[$],$,G))continue;else if(typeof G[$]==="object"){let q=A(G[$],K,Q);if(q!==w)X[$]=q}else X[$]=G[$]}catch{continue}if(G&&typeof G==="object"&&"dataset"in G&&!Object.prototype.hasOwnProperty.call(X,"dataset")){let $=G.dataset;if(!V($,"dataset",G)){let q=A($,K,Q);if(q!==w)X.dataset=q}}let Y=["value","checked","files","type","name"];for(let $ of Y)if(G&&typeof G==="object"&&$ in G&&!Object.prototype.hasOwnProperty.call(X,$)){let q=G[$];if(!V(q,$,G))if(typeof q==="object"){let H=$==="files"?Math.max(K,3):K,B=A(q,H,Q);if(B!==w)X[$]=B}else X[$]=q}let Z=typeof window<"u"?window:void 0,W=Z?Z.HTMLFormElement:typeof HTMLFormElement<"u"?HTMLFormElement:void 0;if(W&&G instanceof W&&G.elements)for(let $=0;$<G.elements.length;$++){let q=G.elements[$];if(q.name&&!Object.prototype.hasOwnProperty.call(X,q.name)&&!V(q,q.name,G))if(typeof q==="object"){let H=A(q,K,Q);if(H!==w)X[q.name]=H}else X[q.name]=q}return X}function V(G,K="",Q=void 0){return G===null||G===void 0||K.startsWith("__")||K.length>0&&/^[A-Z_]+$/.test(K)||typeof G==="function"||G instanceof CSSStyleSheet||G instanceof Window||G instanceof Document||K==="view"||K==="size"||K==="length"||Q instanceof CSSStyleDeclaration&&G===""||typeof Node<"u"&&Q instanceof Node&&(K==="parentNode"||K==="parentElement"||K==="ownerDocument"||K==="getRootNode"||K==="childNodes"||K==="children"||K==="firstChild"||K==="lastChild"||K==="previousSibling"||K==="nextSibling"||K==="previousElementSibling"||K==="nextElementSibling"||K==="innerHTML"||K==="outerHTML"||K==="offsetParent"||K==="offsetWidth"||K==="offsetHeight"||K==="offsetLeft"||K==="offsetTop"||K==="clientTop"||K==="clientLeft"||K==="clientWidth"||K==="clientHeight"||K==="scrollWidth"||K==="scrollHeight"||K==="scrollTop"||K==="scrollLeft")}async function m(){try{let G=await import("react"),K=await import("react-dom/client");return(Q)=>q0(Q,G,K)}catch{return console.error("Unknown error occurred: 'react' is missing within this ReactPy environment! Your JavaScript components may not work as expected!"),(G)=>W0(G)}}function W0(G){return{create:(K,Q,X)=>M(K,Q,...X||[]),render:(K)=>{U(K,G)},unmount:()=>U(null,G)}}var P=new WeakMap;function q0(G,K,Q){let X=null;return{create:(Y,Z,W)=>K.createElement(Y,Z,...W||[]),render:(Y)=>{if(!X)if(!P.get(G))X=Q.createRoot(G),P.set(G,X);else X=P.get(G);X.render(Y)},unmount:()=>{if(X){if(X.unmount(),P.get(G)===X)P.delete(G);X=null}}}}async function h(G,K){let Q;if(G.sourceType==="URL")Q=await import(G.source);else Q=await K.loadModule(G.source);let{bind:X}=Q;if(typeof X!=="function")X=await m();return(Y)=>{let Z=X(Y,{sendMessage:K.sendMessage,onMessage:K.onMessage});if(!(typeof Z.create==="function"&&typeof Z.render==="function"&&typeof Z.unmount==="function"))return F.error(`${G.source} returned an impropper binding`),null;return{render:(W)=>Z.render(i({client:K,module:Q,binding:Z,model:W,currentImportSource:G})),unmount:Z.unmount}}}function i(G){let K;if(G.model.importSource){if(!N(G.currentImportSource,G.model.importSource))return G.binding.create("reactpy-child",{ref:(Q)=>{if(Q)Q.client=G.client,Q.model=G.model,Q.requestUpdate()}});else if(K=z0(G.module,G.model.tagName,G.model.importSource),!K)return null}else K=G.model.tagName;return G.binding.create(K,O(G.model,G.client),R(G.model,(Q)=>i({...G,model:Q})))}function z0(G,K,Q){let X=K.split("."),Y=null;for(let Z=0;Z<X.length;Z++){let W=X[Z];if(Y=Z==0?G[W]:Y[W],!Y){if(Z==0)F.error("Module from source "+l(Q)+` does not export ${W}`);else console.error(`Component ${X.slice(0,Z).join(".")} from source `+l(Q)+` does not have subcomponent ${W}`);break}}return Y}function N(G,K){return G.source===K.source&&G.sourceType===K.sourceType}function l(G){return JSON.stringify({source:G.source,sourceType:G.sourceType})}function R(G,K){if(!G.children)return[];else return G.children.map((Q)=>{switch(typeof Q){case"object":return K(Q);case"string":return Q}})}function O(G,K){return Object.fromEntries(Object.entries({...G.attributes,...Object.fromEntries(Object.entries(G.eventHandlers||{}).map(([Q,X])=>H0(K,Q,X))),...Object.fromEntries(Object.entries(G.inlineJavaScript||{}).map(([Q,X])=>J0(Q,X)))}))}function H0(G,K,{target:Q,preventDefault:X,stopPropagation:Y}){let Z=function(...W){let $=Array.from(W).map((q)=>{let H=q;if(X)H.preventDefault();if(Y)H.stopPropagation();if(typeof H==="object")return C(H);else return H});G.sendMessage({type:"layout-event",data:$,target:Q})};return Z.isHandler=!0,[K,Z]}function J0(name,inlineJavaScript){let wrappedExecutable=function(...args){function handleExecution(...args){let evalResult=eval(inlineJavaScript);if(typeof evalResult=="function")return evalResult(...args)}if(args.length>0&&args[0]instanceof Event)return handleExecution.call(args[0].currentTarget,...args);else return handleExecution(...args)};return wrappedExecutable.isHandler=!1,[name,wrappedExecutable]}class s extends HTMLElement{mountPoint;binding=null;_client=null;_model=null;currentImportSource=null;constructor(){super();this.mountPoint=document.createElement("div"),this.mountPoint.style.display="contents"}connectedCallback(){this.appendChild(this.mountPoint)}set client(G){this._client=G}set model(G){this._model=G}requestUpdate(){this.update()}async update(){if(!this._client||!this._model||!this._model.importSource)return;let G=this._model.importSource;if(!this.binding||!this.currentImportSource||!N(this.currentImportSource,G)){if(this.binding)this.binding.unmount(),this.binding=null;this.currentImportSource=G;try{let K=await h(G,this._client);if(this.isConnected&&this.currentImportSource&&N(this.currentImportSource,G)){let Q=this.binding;if(Q)Q.unmount();if(this.binding=K(this.mountPoint),this.binding)this.binding.render(this._model)}}catch(K){console.error("Failed to load import source",K)}}else if(this.binding)this.binding.render(this._model)}disconnectedCallback(){if(this.binding)this.binding.unmount(),this.binding=null,this.currentImportSource=null}}if(typeof customElements<"u"&&!customElements.get("reactpy-child"))customElements.define("reactpy-child",s);var D=p(null);function r(G){let K=_({tagName:""})[0],Q=A0();return L(()=>G.client.onMessage("layout-update",({path:X,model:Y})=>{if(X==="")Object.assign(K,Y);else n.set(K,X,Y);Q()}),[K,G.client]),J(D.Provider,{value:G.client,children:J(j,{model:K})})}function j({model:G}){if(G.error!==void 0)if(G.error)return J("pre",{children:G.error});else return null;let K;if(G.tagName in a)K=a[G.tagName];else if(G.importSource)K=w0;else K=t;return J(K,{model:G})}function t({model:G}){let K=E(D);return M(G.tagName===""?g:G.tagName,O(G,K),...R(G,(Q)=>{return J(j,{model:Q},Q.attributes?.key)}))}function S({model:G}){let K=E(D),Q=O(G,K),[X,Y]=_(Q.value);L(()=>Y(Q.value),[Q.value]);let Z=Q.onChange;if(typeof Z==="function")Q.onChange=(W)=>{if(W.target)Y(W.target.value);Z(W)};return M(G.tagName,{...Q,value:X},...R(G,(W)=>J(j,{model:W},W.attributes?.key)))}function F0({model:G}){let K=T(null);return L(()=>{if(!K.current)return;let Q=document.createElement("script");for(let[Y,Z]of Object.entries(G.attributes||{}))Q.setAttribute(Y,Z);let X=G?.children?.filter((Y)=>typeof Y=="string")[0];if(X)Q.appendChild(document.createTextNode(X));return K.current.appendChild(Q),()=>{K.current?.removeChild(Q)}},[G.attributes?.key]),J("div",{ref:K})}function w0({model:G}){let K=G.importSource,Q=B0(G);if(!K)return null;let X=K.fallback;if(!K)if(!X)return null;else if(typeof X==="string")return J("span",{children:X});else return J(t,{model:X});else return J("span",{ref:Q})}function A0(){let[,G]=_(!1);return()=>G((K)=>!K)}function B0(G){let K=G.importSource,Q=JSON.stringify(K),X=T(null),Y=E(D),[Z,W]=_(null),$=T(null);return L(()=>{let q=!1,H=null;if(K)h(K,Y).then((B)=>{if(!q&&X.current)H=B(X.current),$.current=Q,W(H)});return()=>{if(q=!0,H&&K&&!K.unmountBeforeUpdate)H.unmount()}},[Y,Q,W,X.current]),L(()=>{if(!(Z&&K))return;if($.current!==Q)return;if(Z.render(G),K.unmountBeforeUpdate)return Z.unmount}),X}var a={input:S,script:F0,select:S,textarea:S};function V0(G){let Q=`${`ws${window.location.protocol==="https:"?"s":""}:`}//${window.location.host}`,X=new URL(`${Q}${G.pathPrefix}${G.componentPath||""}`);if(X.searchParams.append("http_pathname",window.location.pathname),window.location.search)X.searchParams.append("http_query_string",window.location.search);let Y=new f({urls:{componentUrl:X,jsModulesPath:`${window.location.origin}${G.pathPrefix}modules/`},reconnectOptions:{interval:G.reconnectInterval||750,maxInterval:G.reconnectMaxInterval||60000,maxRetries:G.reconnectMaxRetries||150,backoffMultiplier:G.reconnectBackoffMultiplier||1.25},mountElement:G.mountElement});U(J(r,{client:Y}),G.mountElement)}export{V0 as mountReactPy};
1
+ import{a as J}from"./index-64wy0fss.js";import{e as J0,f as b,g as c,i as M,k as _,m as U,n as a,o as R,q as L,s as E,w as D}from"./index-beq660xy.js";var x=b((T0,v)=>{var e=Object.prototype.hasOwnProperty,G0=Object.prototype.toString;v.exports=function(K,Q,X){if(G0.call(Q)!=="[object Function]")throw TypeError("iterator must be a function");var Y=K.length;if(Y===+Y)for(var Z=0;Z<Y;Z++)Q.call(X,K[Z],Z,K);else for(var W in K)if(e.call(K,W))Q.call(X,K[W],W,K)}});var u=b((E0,k)=>{var K0=x();k.exports=z;function z(G,K,Q){if(arguments.length===3)return z.set(G,K,Q);if(arguments.length===2)return z.get(G,K);var X=z.bind(z,G);for(var Y in z)if(z.hasOwnProperty(Y))X[Y]=z[Y].bind(X,G);return X}z.get=function(K,Q){var X=Array.isArray(Q)?Q:z.parse(Q);for(var Y=0;Y<X.length;++Y){var Z=X[Y];if(!(typeof K=="object"&&(Z in K)))throw Error("Invalid reference token: "+Z);K=K[Z]}return K};z.set=function(K,Q,X){var Y=Array.isArray(Q)?Q:z.parse(Q),Z=Y[0];if(Y.length===0)throw Error("Can not set the root object");for(var W=0;W<Y.length-1;++W){var $=Y[W];if(typeof $!=="string"&&typeof $!=="number")$=String($);if($==="__proto__"||$==="constructor"||$==="prototype")continue;if($==="-"&&Array.isArray(K))$=K.length;if(Z=Y[W+1],!($ in K))if(Z.match(/^(\d+|-)$/))K[$]=[];else K[$]={};K=K[$]}if(Z==="-"&&Array.isArray(K))Z=K.length;return K[Z]=X,this};z.remove=function(G,K){var Q=Array.isArray(K)?K:z.parse(K),X=Q[Q.length-1];if(X===void 0)throw Error('Invalid JSON pointer for remove: "'+K+'"');var Y=z.get(G,Q.slice(0,-1));if(Array.isArray(Y)){var Z=+X;if(X===""&&isNaN(Z))throw Error('Invalid array index: "'+X+'"');Array.prototype.splice.call(Y,Z,1)}else delete Y[X]};z.dict=function(K,Q){var X={};return z.walk(K,function(Y,Z){X[Z]=Y},Q),X};z.walk=function(K,Q,X){var Y=[];X=X||function(Z){var W=Object.prototype.toString.call(Z);return W==="[object Object]"||W==="[object Array]"},function Z(W){K0(W,function($,q){if(Y.push(String(q)),X($))Z($);else Q($,z.compile(Y));Y.pop()})}(K)};z.has=function(K,Q){try{z.get(K,Q)}catch(X){return!1}return!0};z.escape=function(K){return K.toString().replace(/~/g,"~0").replace(/\//g,"~1")};z.unescape=function(K){return K.replace(/~1/g,"/").replace(/~0/g,"~")};z.parse=function(K){if(K==="")return[];if(K.charAt(0)!=="/")throw Error("Invalid JSON pointer: "+K);return K.substring(1).split(/\//).map(z.unescape)};z.compile=function(K){if(K.length===0)return"";return"/"+K.map(z.escape).join("/")}});var w={log:(...G)=>console.log("[ReactPy]",...G),info:(...G)=>console.info("[ReactPy]",...G),warn:(...G)=>console.warn("[ReactPy]",...G),error:(...G)=>console.error("[ReactPy]",...G)};function j(G){let{interval:K,maxInterval:Q,maxRetries:X,backoffMultiplier:Y}=G,Z=0,W=K,$=!1,q=!1,H={},B=()=>{if(q)return;H.current=new WebSocket(G.url),H.current.onopen=()=>{if($=!0,w.info("Connected!"),W=K,Z=0,G.onOpen)G.onOpen()},H.current.onmessage=(t)=>{if(G.onMessage)G.onMessage(t)},H.current.onclose=()=>{if(G.onClose)G.onClose();if(!$){w.info("Failed to connect!");return}if(w.info("Disconnected!"),Z>=X){w.info("Connection max retries exhausted!");return}w.info(`Reconnecting in ${(W/1000).toPrecision(4)} seconds...`),setTimeout(B,W),W=o(W,Y,Q),Z++}};return G.readyPromise.then(()=>w.info("Starting client...")).then(B),H}function o(G,K,Q){return Math.min(G*K,Q)}class y{handlers={};ready;resolveReady;constructor(){this.resolveReady=()=>{},this.ready=new Promise((G)=>this.resolveReady=G)}onMessage(G,K){return(this.handlers[G]||(this.handlers[G]=[])).push(K),this.resolveReady(void 0),()=>{this.handlers[G]=this.handlers[G].filter((Q)=>Q!==K)}}handleIncoming(G){if(!G.type){w.warn("Received message without type",G);return}let K=this.handlers[G.type];if(!K){w.warn("Received message without handler",G);return}K.forEach((Q)=>Q(G))}}class C extends y{urls;socket;mountElement;constructor(G){super();this.urls=G.urls,this.mountElement=G.mountElement,this.socket=j({url:this.urls.componentUrl,readyPromise:this.ready,...G.reconnectOptions,onMessage:async({data:K})=>this.handleIncoming(JSON.parse(K))})}sendMessage(G){this.socket.current?.send(JSON.stringify(G))}loadModule(G){return import(`${this.urls.jsModulesPath}${G}`)}}var p=J0(u(),1);var F={__stop__:!0};function I(G,K=10){if(!G||typeof G!=="object")return console.warn("eventToObject: Expected an object input, received:",G),G;let Q=new WeakSet;Q.add(G);let X={};for(let Y in G)try{if(V(G[Y],Y))continue;else if(typeof G[Y]==="object"){let Z=A(G[Y],K,Q);if(Z!==F)X[Y]=Z}else X[Y]=G[Y]}catch{continue}if(typeof window<"u"&&window.Event&&G instanceof window.Event)X.selection=Q0(K,Q);return X}function Q0(G,K){if(typeof window>"u"||!window.getSelection)return null;let Q=window.getSelection();if(!Q)return null;return{type:Q.type,anchorNode:Q.anchorNode?A(Q.anchorNode,G,K):null,anchorOffset:Q.anchorOffset,focusNode:Q.focusNode?A(Q.focusNode,G,K):null,focusOffset:Q.focusOffset,isCollapsed:Q.isCollapsed,rangeCount:Q.rangeCount,selectedText:Q.toString()}}function A(G,K,Q){let X=K-1;if(X<=0&&typeof G==="object")return F;if(!G||typeof G!=="object")return G;if(Q.has(G))return F;Q.add(G);try{if(Array.isArray(G)||typeof G?.length==="number"&&typeof G[Symbol.iterator]==="function"&&!Object.prototype.toString.call(G).includes("Map")&&!(G instanceof CSSStyleDeclaration))return X0(G,X,Q);return Y0(G,X,Q)}finally{Q.delete(G)}}function X0(G,K,Q){let X=[];for(let Y=0;Y<G.length;Y++)if(V(G[Y]))continue;else if(typeof G[Y]==="object"){let Z=A(G[Y],K,Q);if(Z!==F)X.push(Z)}else X.push(G[Y]);return X}function Y0(G,K,Q){let X={};for(let $ in G)try{if(V(G[$],$,G))continue;else if(typeof G[$]==="object"){let q=A(G[$],K,Q);if(q!==F)X[$]=q}else X[$]=G[$]}catch{continue}if(G&&typeof G==="object"&&"dataset"in G&&!Object.prototype.hasOwnProperty.call(X,"dataset")){let $=G.dataset;if(!V($,"dataset",G)){let q=A($,K,Q);if(q!==F)X.dataset=q}}let Y=["value","checked","files","type","name"];for(let $ of Y)if(G&&typeof G==="object"&&$ in G&&!Object.prototype.hasOwnProperty.call(X,$)){let q=G[$];if(!V(q,$,G))if(typeof q==="object"){let H=$==="files"?Math.max(K,3):K,B=A(q,H,Q);if(B!==F)X[$]=B}else X[$]=q}let Z=typeof window<"u"?window:void 0,W=Z?Z.HTMLFormElement:typeof HTMLFormElement<"u"?HTMLFormElement:void 0;if(W&&G instanceof W&&G.elements)for(let $=0;$<G.elements.length;$++){let q=G.elements[$];if(q.name&&!Object.prototype.hasOwnProperty.call(X,q.name)&&!V(q,q.name,G))if(typeof q==="object"){let H=A(q,K,Q);if(H!==F)X[q.name]=H}else X[q.name]=q}return X}function V(G,K="",Q=void 0){return G===null||G===void 0||K.startsWith("__")||K.length>0&&/^[A-Z_]+$/.test(K)||typeof G==="function"||G instanceof CSSStyleSheet||G instanceof Window||G instanceof Document||K==="view"||K==="size"||K==="length"||Q instanceof CSSStyleDeclaration&&G===""||typeof Node<"u"&&Q instanceof Node&&(K==="parentNode"||K==="parentElement"||K==="ownerDocument"||K==="getRootNode"||K==="childNodes"||K==="children"||K==="firstChild"||K==="lastChild"||K==="previousSibling"||K==="nextSibling"||K==="previousElementSibling"||K==="nextElementSibling"||K==="innerHTML"||K==="outerHTML"||K==="offsetParent"||K==="offsetWidth"||K==="offsetHeight"||K==="offsetLeft"||K==="offsetTop"||K==="clientTop"||K==="clientLeft"||K==="clientWidth"||K==="clientHeight"||K==="scrollWidth"||K==="scrollHeight"||K==="scrollTop"||K==="scrollLeft")}async function d(){try{let G=await import("react"),K=await import("react-dom/client");return(Q)=>W0(Q,G,K)}catch{return console.error("Unknown error occurred: 'react' is missing within this ReactPy environment! Your JavaScript components may not work as expected!"),(G)=>$0(G)}}function $0(G){return{create:(K,Q,X)=>M(K,Q,...X||[]),render:(K)=>{U(K,G)},unmount:()=>U(null,G)}}var P=new WeakMap;function W0(G,K,Q){let X=null;return{create:(Y,Z,W)=>K.createElement(Y,Z,...W||[]),render:(Y)=>{if(!X)if(!P.get(G))X=Q.createRoot(G),P.set(G,X);else X=P.get(G);X.render(Y)},unmount:()=>{if(X){if(X.unmount(),P.get(G)===X)P.delete(G);X=null}}}}async function h(G,K){let Q;if(G.sourceType==="URL")Q=await import(G.source);else Q=await K.loadModule(G.source);let{bind:X}=Q;if(typeof X!=="function")X=await d();return(Y)=>{let Z=X(Y,{sendMessage:K.sendMessage,onMessage:K.onMessage});if(!(typeof Z.create==="function"&&typeof Z.render==="function"&&typeof Z.unmount==="function"))return w.error(`${G.source} returned an impropper binding`),null;return{render:(W)=>Z.render(l({client:K,module:Q,binding:Z,model:W,currentImportSource:G})),unmount:Z.unmount}}}function l(G){let K;if(G.model.importSource){if(!N(G.currentImportSource,G.model.importSource))return G.binding.create("reactpy-child",{ref:(Q)=>{if(Q)Q.client=G.client,Q.model=G.model,Q.requestUpdate()}});else if(K=q0(G.module,G.model.tagName,G.model.importSource),!K)return null}else K=G.model.tagName===""?_:G.model.tagName;return G.binding.create(K,T(G.model,G.client),O(G.model,(Q)=>l({...G,model:Q})))}function q0(G,K,Q){let X=K.split("."),Y=null;for(let Z=0;Z<X.length;Z++){let W=X[Z];if(Y=Z==0?G[W]:Y[W],!Y){if(Z==0)w.error("Module from source "+m(Q)+` does not export ${W}`);else console.error(`Component ${X.slice(0,Z).join(".")} from source `+m(Q)+` does not have subcomponent ${W}`);break}}return Y}function N(G,K){return G.source===K.source&&G.sourceType===K.sourceType}function m(G){return JSON.stringify({source:G.source,sourceType:G.sourceType})}function O(G,K){if(!G.children)return[];else return G.children.map((Q)=>{switch(typeof Q){case"object":return K(Q);case"string":return Q}})}function T(G,K){return Object.fromEntries(Object.entries({...G.attributes,...Object.fromEntries(Object.entries(G.eventHandlers||{}).map(([Q,X])=>z0(K,Q,X))),...Object.fromEntries(Object.entries(G.inlineJavaScript||{}).map(([Q,X])=>H0(Q,X)))}))}function z0(G,K,{target:Q,preventDefault:X,stopPropagation:Y}){let Z=function(...W){let $=Array.from(W).map((q)=>{let H=q;if(X)H.preventDefault();if(Y)H.stopPropagation();if(typeof H==="object")return I(H);else return H});G.sendMessage({type:"layout-event",data:$,target:Q})};return Z.isHandler=!0,[K,Z]}function H0(name,inlineJavaScript){let wrappedExecutable=function(...args){function handleExecution(...args){let evalResult=eval(inlineJavaScript);if(typeof evalResult=="function")return evalResult(...args)}if(args.length>0&&args[0]instanceof Event)return handleExecution.call(args[0].currentTarget,...args);else return handleExecution(...args)};return wrappedExecutable.isHandler=!1,[name,wrappedExecutable]}class i extends HTMLElement{mountPoint;binding=null;_client=null;_model=null;currentImportSource=null;constructor(){super();this.mountPoint=document.createElement("div"),this.mountPoint.style.display="contents"}connectedCallback(){this.appendChild(this.mountPoint)}set client(G){this._client=G}set model(G){this._model=G}requestUpdate(){this.update()}async update(){if(!this._client||!this._model||!this._model.importSource)return;let G=this._model.importSource;if(!this.binding||!this.currentImportSource||!N(this.currentImportSource,G)){if(this.binding)this.binding.unmount(),this.binding=null;this.currentImportSource=G;try{let K=await h(G,this._client);if(this.isConnected&&this.currentImportSource&&N(this.currentImportSource,G)){let Q=this.binding;if(Q)Q.unmount();if(this.binding=K(this.mountPoint),this.binding)this.binding.render(this._model)}}catch(K){console.error("Failed to load import source",K)}}else if(this.binding)this.binding.render(this._model)}disconnectedCallback(){if(this.binding)this.binding.unmount(),this.binding=null,this.currentImportSource=null}}if(typeof customElements<"u"&&!customElements.get("reactpy-child"))customElements.define("reactpy-child",i);var f=a(null);function n(G){let K=R({tagName:""})[0],Q=A0();return L(()=>G.client.onMessage("layout-update",({path:X,model:Y})=>{if(X==="")Object.assign(K,Y);else p.set(K,X,Y);Q()}),[K,G.client]),J(f.Provider,{value:G.client,children:J(g,{model:K})})}function g({model:G}){if(G.error!==void 0)if(G.error)return J("pre",{children:G.error});else return null;let K;if(G.tagName in s)K=s[G.tagName];else if(G.importSource)K=F0;else K=r;return J(K,{model:G})}function r({model:G}){let K=D(f);return M(G.tagName===""?_:G.tagName,T(G,K),...O(G,(Q)=>{return J(g,{model:Q},Q.attributes?.key)}))}function S({model:G}){let K=D(f),Q=T(G,K),[X,Y]=R(Q.value);L(()=>Y(Q.value),[Q.value]);let Z=Q.onChange;if(typeof Z==="function")Q.onChange=(W)=>{if(W.target)Y(W.target.value);Z(W)};return M(G.tagName,{...Q,value:X},...O(G,(W)=>J(g,{model:W},W.attributes?.key)))}function w0({model:G}){let K=E(null);return L(()=>{if(!K.current)return;let Q=document.createElement("script");for(let[Y,Z]of Object.entries(G.attributes||{}))Q.setAttribute(Y,Z);let X=G?.children?.filter((Y)=>typeof Y=="string")[0];if(X)Q.appendChild(document.createTextNode(X));return K.current.appendChild(Q),()=>{K.current?.removeChild(Q)}},[G.attributes?.key]),J("div",{ref:K})}function F0({model:G}){let K=G.importSource,Q=B0(G);if(!K)return null;let X=K.fallback;if(!K)if(!X)return null;else if(typeof X==="string")return J("span",{children:X});else return J(r,{model:X});else return J("span",{ref:Q})}function A0(){let[,G]=R(!1);return()=>G((K)=>!K)}function B0(G){let K=G.importSource,Q=JSON.stringify(K),X=E(null),Y=D(f),[Z,W]=R(null),$=E(null);return L(()=>{let q=!1,H=null;if(K)h(K,Y).then((B)=>{if(!q&&X.current)H=B(X.current),$.current=Q,W(H)});return()=>{if(q=!0,H&&K&&!K.unmountBeforeUpdate)H.unmount()}},[Y,Q,W,X.current]),L(()=>{if(!(Z&&K))return;if($.current!==Q)return;if(Z.render(G),K.unmountBeforeUpdate)return Z.unmount}),X}var s={input:S,script:w0,select:S,textarea:S};function V0(G){let Q=`${`ws${window.location.protocol==="https:"?"s":""}:`}//${window.location.host}`,X=new URL(`${Q}${G.pathPrefix}${G.componentPath||""}`);if(X.searchParams.append("http_pathname",window.location.pathname),window.location.search)X.searchParams.append("http_query_string",window.location.search);let Y=new C({urls:{componentUrl:X,jsModulesPath:`${window.location.origin}${G.pathPrefix}modules/`},reconnectOptions:{interval:G.reconnectInterval||750,maxInterval:G.reconnectMaxInterval||60000,maxRetries:G.reconnectMaxRetries||150,backoffMultiplier:G.reconnectBackoffMultiplier||1.25},mountElement:G.mountElement});U(J(n,{client:Y}),G.mountElement)}export{V0 as mountReactPy};
2
2
 
3
- //# debugId=963F8FEBB526BB7F64756E2164756E21
3
+ //# debugId=219F1B8D77E5876364756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -7,13 +7,13 @@
7
7
  "export default {\n log: (...args) => console.log(\"[ReactPy]\", ...args),\n info: (...args) => console.info(\"[ReactPy]\", ...args),\n warn: (...args) => console.warn(\"[ReactPy]\", ...args),\n error: (...args) => console.error(\"[ReactPy]\", ...args),\n};\n//# sourceMappingURL=logger.js.map",
8
8
  "import log from \"./logger\";\nexport function createReconnectingWebSocket(props) {\n const { interval, maxInterval, maxRetries, backoffMultiplier } = props;\n let retries = 0;\n let currentInterval = interval;\n let everConnected = false;\n const closed = false;\n const socket = {};\n const connect = () => {\n if (closed) {\n return;\n }\n socket.current = new WebSocket(props.url);\n socket.current.onopen = () => {\n everConnected = true;\n log.info(\"Connected!\");\n currentInterval = interval;\n retries = 0;\n if (props.onOpen) {\n props.onOpen();\n }\n };\n socket.current.onmessage = (event) => {\n if (props.onMessage) {\n props.onMessage(event);\n }\n };\n socket.current.onclose = () => {\n if (props.onClose) {\n props.onClose();\n }\n if (!everConnected) {\n log.info(\"Failed to connect!\");\n return;\n }\n log.info(\"Disconnected!\");\n if (retries >= maxRetries) {\n log.info(\"Connection max retries exhausted!\");\n return;\n }\n log.info(`Reconnecting in ${(currentInterval / 1000).toPrecision(4)} seconds...`);\n setTimeout(connect, currentInterval);\n currentInterval = nextInterval(currentInterval, backoffMultiplier, maxInterval);\n retries++;\n };\n };\n props.readyPromise.then(() => log.info(\"Starting client...\")).then(connect);\n return socket;\n}\nexport function nextInterval(currentInterval, backoffMultiplier, maxInterval) {\n return Math.min(\n // increase interval by backoff multiplier\n currentInterval * backoffMultiplier, \n // don't exceed max interval\n maxInterval);\n}\n//# sourceMappingURL=websocket.js.map",
9
9
  "import logger from \"./logger\";\nimport { createReconnectingWebSocket } from \"./websocket\";\nexport class BaseReactPyClient {\n handlers = {};\n ready;\n resolveReady;\n constructor() {\n this.resolveReady = () => { };\n this.ready = new Promise((resolve) => (this.resolveReady = resolve));\n }\n onMessage(type, handler) {\n (this.handlers[type] || (this.handlers[type] = [])).push(handler);\n this.resolveReady(undefined);\n return () => {\n this.handlers[type] = this.handlers[type].filter((h) => h !== handler);\n };\n }\n /**\n * Handle an incoming message.\n *\n * This should be called by subclasses when a message is received.\n *\n * @param message The message to handle. The message must have a `type` property.\n */\n handleIncoming(message) {\n if (!message.type) {\n logger.warn(\"Received message without type\", message);\n return;\n }\n const messageHandlers = this.handlers[message.type];\n if (!messageHandlers) {\n logger.warn(\"Received message without handler\", message);\n return;\n }\n messageHandlers.forEach((h) => h(message));\n }\n}\nexport class ReactPyClient extends BaseReactPyClient {\n urls;\n socket;\n mountElement;\n constructor(props) {\n super();\n this.urls = props.urls;\n this.mountElement = props.mountElement;\n this.socket = createReconnectingWebSocket({\n url: this.urls.componentUrl,\n readyPromise: this.ready,\n ...props.reconnectOptions,\n onMessage: async ({ data }) => this.handleIncoming(JSON.parse(data)),\n });\n }\n sendMessage(message) {\n this.socket.current?.send(JSON.stringify(message));\n }\n loadModule(moduleName) {\n return import(`${this.urls.jsModulesPath}${moduleName}`);\n }\n}\n//# sourceMappingURL=client.js.map",
10
- "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { set as setJsonPointer } from \"json-pointer\";\nimport { createContext, createElement, Fragment } from \"preact\";\nimport { useContext, useEffect, useRef, useState } from \"preact/hooks\";\nimport { createAttributes, createChildren, loadImportSource } from \"./vdom\";\nconst ClientContext = createContext(null);\nexport function Layout(props) {\n const currentModel = useState({ tagName: \"\" })[0];\n const forceUpdate = useForceUpdate();\n useEffect(() => props.client.onMessage(\"layout-update\", ({ path, model }) => {\n if (path === \"\") {\n Object.assign(currentModel, model);\n }\n else {\n setJsonPointer(currentModel, path, model);\n }\n forceUpdate();\n }), [currentModel, props.client]);\n return (_jsx(ClientContext.Provider, { value: props.client, children: _jsx(Element, { model: currentModel }) }));\n}\nexport function Element({ model }) {\n if (model.error !== undefined) {\n if (model.error) {\n return _jsx(\"pre\", { children: model.error });\n }\n else {\n return null;\n }\n }\n let SpecializedElement;\n if (model.tagName in SPECIAL_ELEMENTS) {\n SpecializedElement =\n SPECIAL_ELEMENTS[model.tagName];\n }\n else if (model.importSource) {\n SpecializedElement = ImportedElement;\n }\n else {\n SpecializedElement = StandardElement;\n }\n return _jsx(SpecializedElement, { model: model });\n}\nfunction StandardElement({ model }) {\n const client = useContext(ClientContext);\n // Use createElement here to avoid warning about variable numbers of children not\n // having keys. Warning about this must now be the responsibility of the client\n // providing the models instead of the client rendering them.\n return createElement(model.tagName === \"\" ? Fragment : model.tagName, createAttributes(model, client), ...createChildren(model, (child) => {\n return _jsx(Element, { model: child }, child.attributes?.key);\n }));\n}\nfunction UserInputElement({ model }) {\n const client = useContext(ClientContext);\n const props = createAttributes(model, client);\n const [value, setValue] = useState(props.value);\n // honor changes to value from the client via props\n useEffect(() => setValue(props.value), [props.value]);\n const givenOnChange = props.onChange;\n if (typeof givenOnChange === \"function\") {\n props.onChange = (event) => {\n // immediately update the value to give the user feedback\n if (event.target) {\n setValue(event.target.value);\n }\n // allow the client to respond (and possibly change the value)\n givenOnChange(event);\n };\n }\n // Use createElement here to avoid warning about variable numbers of children not\n // having keys. Warning about this must now be the responsibility of the client\n // providing the models instead of the client rendering them.\n return createElement(model.tagName, \n // overwrite\n { ...props, value }, ...createChildren(model, (child) => (_jsx(Element, { model: child }, child.attributes?.key))));\n}\nfunction ScriptElement({ model }) {\n const ref = useRef(null);\n useEffect(() => {\n // Don't run if the parent element is missing\n if (!ref.current) {\n return;\n }\n // Create the script element\n const scriptElement = document.createElement(\"script\");\n for (const [k, v] of Object.entries(model.attributes || {})) {\n scriptElement.setAttribute(k, v);\n }\n // Add the script content as text\n const scriptContent = model?.children?.filter((value) => typeof value == \"string\")[0];\n if (scriptContent) {\n scriptElement.appendChild(document.createTextNode(scriptContent));\n }\n // Append the script element to the parent element\n ref.current.appendChild(scriptElement);\n // Remove the script element when the component is unmounted\n return () => {\n ref.current?.removeChild(scriptElement);\n };\n }, [model.attributes?.key]);\n return _jsx(\"div\", { ref: ref });\n}\nfunction ImportedElement({ model }) {\n const importSourceVdom = model.importSource;\n const importSourceRef = useImportSource(model);\n if (!importSourceVdom) {\n return null;\n }\n const importSourceFallback = importSourceVdom.fallback;\n if (!importSourceVdom) {\n // display a fallback if one was given\n if (!importSourceFallback) {\n return null;\n }\n else if (typeof importSourceFallback === \"string\") {\n return _jsx(\"span\", { children: importSourceFallback });\n }\n else {\n return _jsx(StandardElement, { model: importSourceFallback });\n }\n }\n else {\n return _jsx(\"span\", { ref: importSourceRef });\n }\n}\nfunction useForceUpdate() {\n const [, setState] = useState(false);\n return () => setState((old) => !old);\n}\nfunction useImportSource(model) {\n const vdomImportSource = model.importSource;\n const vdomImportSourceJsonString = JSON.stringify(vdomImportSource);\n const mountPoint = useRef(null);\n const client = useContext(ClientContext);\n const [binding, setBinding] = useState(null);\n const bindingSource = useRef(null);\n useEffect(() => {\n let unmounted = false;\n let currentBinding = null;\n if (vdomImportSource) {\n loadImportSource(vdomImportSource, client).then((bind) => {\n if (!unmounted && mountPoint.current) {\n currentBinding = bind(mountPoint.current);\n bindingSource.current = vdomImportSourceJsonString;\n setBinding(currentBinding);\n }\n });\n }\n return () => {\n unmounted = true;\n if (currentBinding &&\n vdomImportSource &&\n !vdomImportSource.unmountBeforeUpdate) {\n currentBinding.unmount();\n }\n };\n }, [client, vdomImportSourceJsonString, setBinding, mountPoint.current]);\n // this effect must run every time in case the model has changed\n useEffect(() => {\n if (!(binding && vdomImportSource)) {\n return;\n }\n if (bindingSource.current !== vdomImportSourceJsonString) {\n return;\n }\n binding.render(model);\n if (vdomImportSource.unmountBeforeUpdate) {\n return binding.unmount;\n }\n });\n return mountPoint;\n}\nconst SPECIAL_ELEMENTS = {\n input: UserInputElement,\n script: ScriptElement,\n select: UserInputElement,\n textarea: UserInputElement,\n};\n//# sourceMappingURL=components.js.map",
10
+ "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { set as setJsonPointer } from \"json-pointer\";\nimport { createContext, createElement, Fragment, } from \"preact\";\nimport { useContext, useEffect, useRef, useState } from \"preact/hooks\";\nimport { createAttributes, createChildren, loadImportSource } from \"./vdom\";\nconst ClientContext = createContext(null);\nexport function Layout(props) {\n const currentModel = useState({ tagName: \"\" })[0];\n const forceUpdate = useForceUpdate();\n useEffect(() => props.client.onMessage(\"layout-update\", ({ path, model }) => {\n if (path === \"\") {\n Object.assign(currentModel, model);\n }\n else {\n setJsonPointer(currentModel, path, model);\n }\n forceUpdate();\n }), [currentModel, props.client]);\n return (_jsx(ClientContext.Provider, { value: props.client, children: _jsx(Element, { model: currentModel }) }));\n}\nexport function Element({ model }) {\n if (model.error !== undefined) {\n if (model.error) {\n return _jsx(\"pre\", { children: model.error });\n }\n else {\n return null;\n }\n }\n let SpecializedElement;\n if (model.tagName in SPECIAL_ELEMENTS) {\n SpecializedElement =\n SPECIAL_ELEMENTS[model.tagName];\n }\n else if (model.importSource) {\n SpecializedElement = ImportedElement;\n }\n else {\n SpecializedElement = StandardElement;\n }\n return _jsx(SpecializedElement, { model: model });\n}\nfunction StandardElement({ model }) {\n const client = useContext(ClientContext);\n // Use createElement here to avoid warning about variable numbers of children not\n // having keys. Warning about this must now be the responsibility of the client\n // providing the models instead of the client rendering them.\n return createElement(model.tagName === \"\" ? Fragment : model.tagName, createAttributes(model, client), ...createChildren(model, (child) => {\n return _jsx(Element, { model: child }, child.attributes?.key);\n }));\n}\nfunction UserInputElement({ model }) {\n const client = useContext(ClientContext);\n const props = createAttributes(model, client);\n const [value, setValue] = useState(props.value);\n // honor changes to value from the client via props\n useEffect(() => setValue(props.value), [props.value]);\n const givenOnChange = props.onChange;\n if (typeof givenOnChange === \"function\") {\n props.onChange = (event) => {\n // immediately update the value to give the user feedback\n if (event.target) {\n setValue(event.target.value);\n }\n // allow the client to respond (and possibly change the value)\n givenOnChange(event);\n };\n }\n // Use createElement here to avoid warning about variable numbers of children not\n // having keys. Warning about this must now be the responsibility of the client\n // providing the models instead of the client rendering them.\n return createElement(model.tagName, \n // overwrite\n { ...props, value }, ...createChildren(model, (child) => (_jsx(Element, { model: child }, child.attributes?.key))));\n}\nfunction ScriptElement({ model }) {\n const ref = useRef(null);\n useEffect(() => {\n // Don't run if the parent element is missing\n if (!ref.current) {\n return;\n }\n // Create the script element\n const scriptElement = document.createElement(\"script\");\n for (const [k, v] of Object.entries(model.attributes || {})) {\n scriptElement.setAttribute(k, v);\n }\n // Add the script content as text\n const scriptContent = model?.children?.filter((value) => typeof value == \"string\")[0];\n if (scriptContent) {\n scriptElement.appendChild(document.createTextNode(scriptContent));\n }\n // Append the script element to the parent element\n ref.current.appendChild(scriptElement);\n // Remove the script element when the component is unmounted\n return () => {\n ref.current?.removeChild(scriptElement);\n };\n }, [model.attributes?.key]);\n return _jsx(\"div\", { ref: ref });\n}\nfunction ImportedElement({ model }) {\n const importSourceVdom = model.importSource;\n const importSourceRef = useImportSource(model);\n if (!importSourceVdom) {\n return null;\n }\n const importSourceFallback = importSourceVdom.fallback;\n if (!importSourceVdom) {\n // display a fallback if one was given\n if (!importSourceFallback) {\n return null;\n }\n else if (typeof importSourceFallback === \"string\") {\n return _jsx(\"span\", { children: importSourceFallback });\n }\n else {\n return _jsx(StandardElement, { model: importSourceFallback });\n }\n }\n else {\n return _jsx(\"span\", { ref: importSourceRef });\n }\n}\nfunction useForceUpdate() {\n const [, setState] = useState(false);\n return () => setState((old) => !old);\n}\nfunction useImportSource(model) {\n const vdomImportSource = model.importSource;\n const vdomImportSourceJsonString = JSON.stringify(vdomImportSource);\n const mountPoint = useRef(null);\n const client = useContext(ClientContext);\n const [binding, setBinding] = useState(null);\n const bindingSource = useRef(null);\n useEffect(() => {\n let unmounted = false;\n let currentBinding = null;\n if (vdomImportSource) {\n loadImportSource(vdomImportSource, client).then((bind) => {\n if (!unmounted && mountPoint.current) {\n currentBinding = bind(mountPoint.current);\n bindingSource.current = vdomImportSourceJsonString;\n setBinding(currentBinding);\n }\n });\n }\n return () => {\n unmounted = true;\n if (currentBinding &&\n vdomImportSource &&\n !vdomImportSource.unmountBeforeUpdate) {\n currentBinding.unmount();\n }\n };\n }, [client, vdomImportSourceJsonString, setBinding, mountPoint.current]);\n // this effect must run every time in case the model has changed\n useEffect(() => {\n if (!(binding && vdomImportSource)) {\n return;\n }\n if (bindingSource.current !== vdomImportSourceJsonString) {\n return;\n }\n binding.render(model);\n if (vdomImportSource.unmountBeforeUpdate) {\n return binding.unmount;\n }\n });\n return mountPoint;\n}\nconst SPECIAL_ELEMENTS = {\n input: UserInputElement,\n script: ScriptElement,\n select: UserInputElement,\n textarea: UserInputElement,\n};\n//# sourceMappingURL=components.js.map",
11
11
  "const maxDepthSignal = { __stop__: true };\n/**\n * Convert any class object (such as `Event`) to a plain object.\n */\nexport default function convert(classObject, maxDepth = 10) {\n // Immediately return `classObject` if given an unexpected (non-object) input\n if (!classObject || typeof classObject !== \"object\") {\n console.warn(\"eventToObject: Expected an object input, received:\", classObject);\n return classObject;\n }\n // Begin conversion\n const visited = new WeakSet();\n visited.add(classObject);\n const convertedObj = {};\n for (const key in classObject) {\n // Skip keys that cannot be converted\n try {\n if (shouldIgnoreValue(classObject[key], key)) {\n continue;\n }\n // Handle objects (potentially cyclical)\n else if (typeof classObject[key] === \"object\") {\n const result = deepCloneClass(classObject[key], maxDepth, visited);\n if (result !== maxDepthSignal) {\n convertedObj[key] = result;\n }\n }\n // Handle simple types (non-cyclical)\n else {\n convertedObj[key] = classObject[key];\n }\n }\n catch {\n continue;\n }\n }\n // Special case: Event selection\n if (typeof window !== \"undefined\" &&\n window.Event &&\n classObject instanceof window.Event) {\n convertedObj[\"selection\"] = serializeSelection(maxDepth, visited);\n }\n return convertedObj;\n}\n/**\n * Serialize the current window selection.\n */\nfunction serializeSelection(maxDepth, visited) {\n if (typeof window === \"undefined\" || !window.getSelection) {\n return null;\n }\n const selection = window.getSelection();\n if (!selection) {\n return null;\n }\n return {\n type: selection.type,\n anchorNode: selection.anchorNode\n ? deepCloneClass(selection.anchorNode, maxDepth, visited)\n : null,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode\n ? deepCloneClass(selection.focusNode, maxDepth, visited)\n : null,\n focusOffset: selection.focusOffset,\n isCollapsed: selection.isCollapsed,\n rangeCount: selection.rangeCount,\n selectedText: selection.toString(),\n };\n}\n/**\n * Recursively convert a class-based object to a plain object.\n */\nfunction deepCloneClass(x, _maxDepth, visited) {\n const maxDepth = _maxDepth - 1;\n // Return an indicator if maxDepth is reached\n if (maxDepth <= 0 && typeof x === \"object\") {\n return maxDepthSignal;\n }\n // Safety check: WeakSet only accepts objects (and not null)\n if (!x || typeof x !== \"object\") {\n return x;\n }\n if (visited.has(x)) {\n return maxDepthSignal;\n }\n visited.add(x);\n try {\n // Convert array-like class (e.g., NodeList, ClassList, HTMLCollection)\n if (Array.isArray(x) ||\n (typeof x?.length === \"number\" &&\n typeof x[Symbol.iterator] === \"function\" &&\n !Object.prototype.toString.call(x).includes(\"Map\") &&\n !(x instanceof CSSStyleDeclaration))) {\n return classToArray(x, maxDepth, visited);\n }\n // Convert mapping-like class (e.g., Node, Map, Set)\n return classToObject(x, maxDepth, visited);\n }\n finally {\n visited.delete(x);\n }\n}\n/**\n * Convert an array-like class to a plain array.\n */\nfunction classToArray(x, maxDepth, visited) {\n const result = [];\n for (let i = 0; i < x.length; i++) {\n // Skip anything that should not be converted\n if (shouldIgnoreValue(x[i])) {\n continue;\n }\n // Only push objects as if we haven't reached max depth\n else if (typeof x[i] === \"object\") {\n const converted = deepCloneClass(x[i], maxDepth, visited);\n if (converted !== maxDepthSignal) {\n result.push(converted);\n }\n }\n // Add plain values if not skippable\n else {\n result.push(x[i]);\n }\n }\n return result;\n}\n/**\n * Convert a mapping-like class to a plain JSON object.\n * We must iterate through it with a for-loop in order to gain\n * access to properties from all parent classes.\n */\nfunction classToObject(x, maxDepth, visited) {\n const result = {};\n for (const key in x) {\n try {\n // Skip anything that should not be converted\n if (shouldIgnoreValue(x[key], key, x)) {\n continue;\n }\n // Add objects as a property if we haven't reached max depth\n else if (typeof x[key] === \"object\") {\n const converted = deepCloneClass(x[key], maxDepth, visited);\n if (converted !== maxDepthSignal) {\n result[key] = converted;\n }\n }\n // Add plain values if not skippable\n else {\n result[key] = x[key];\n }\n }\n catch {\n continue;\n }\n }\n // Explicitly include dataset if it exists (it might not be enumerable)\n if (x &&\n typeof x === \"object\" &&\n \"dataset\" in x &&\n !Object.prototype.hasOwnProperty.call(result, \"dataset\")) {\n const dataset = x[\"dataset\"];\n if (!shouldIgnoreValue(dataset, \"dataset\", x)) {\n const converted = deepCloneClass(dataset, maxDepth, visited);\n if (converted !== maxDepthSignal) {\n result[\"dataset\"] = converted;\n }\n }\n }\n // Explicitly include common input properties if they exist\n const extraProps = [\"value\", \"checked\", \"files\", \"type\", \"name\"];\n for (const prop of extraProps) {\n if (x &&\n typeof x === \"object\" &&\n prop in x &&\n !Object.prototype.hasOwnProperty.call(result, prop)) {\n const val = x[prop];\n if (!shouldIgnoreValue(val, prop, x)) {\n if (typeof val === \"object\") {\n // Ensure files have enough depth to be serialized\n const propDepth = prop === \"files\" ? Math.max(maxDepth, 3) : maxDepth;\n const converted = deepCloneClass(val, propDepth, visited);\n if (converted !== maxDepthSignal) {\n result[prop] = converted;\n }\n }\n else {\n result[prop] = val;\n }\n }\n }\n }\n // Explicitly include form elements if they exist and are not enumerable\n const win = typeof window !== \"undefined\" ? window : undefined;\n // @ts-ignore\n const FormClass = win\n ? win.HTMLFormElement\n : typeof HTMLFormElement !== \"undefined\"\n ? HTMLFormElement\n : undefined;\n if (FormClass && x instanceof FormClass && x.elements) {\n for (let i = 0; i < x.elements.length; i++) {\n const element = x.elements[i];\n if (element.name &&\n !Object.prototype.hasOwnProperty.call(result, element.name) &&\n !shouldIgnoreValue(element, element.name, x)) {\n if (typeof element === \"object\") {\n const converted = deepCloneClass(element, maxDepth, visited);\n if (converted !== maxDepthSignal) {\n result[element.name] = converted;\n }\n }\n else {\n result[element.name] = element;\n }\n }\n }\n }\n return result;\n}\n/**\n * Check if a value is non-convertible or holds minimal value.\n */\nfunction shouldIgnoreValue(value, keyName = \"\", parent = undefined) {\n return (\n // Useless data\n value === null ||\n value === undefined ||\n keyName.startsWith(\"__\") ||\n (keyName.length > 0 && /^[A-Z_]+$/.test(keyName)) ||\n // Non-convertible types\n typeof value === \"function\" ||\n value instanceof CSSStyleSheet ||\n value instanceof Window ||\n value instanceof Document ||\n keyName === \"view\" ||\n keyName === \"size\" ||\n keyName === \"length\" ||\n (parent instanceof CSSStyleDeclaration && value === \"\") ||\n // DOM Node Blacklist\n (typeof Node !== \"undefined\" &&\n parent instanceof Node &&\n // Recursive properties\n (keyName === \"parentNode\" ||\n keyName === \"parentElement\" ||\n keyName === \"ownerDocument\" ||\n keyName === \"getRootNode\" ||\n keyName === \"childNodes\" ||\n keyName === \"children\" ||\n keyName === \"firstChild\" ||\n keyName === \"lastChild\" ||\n keyName === \"previousSibling\" ||\n keyName === \"nextSibling\" ||\n keyName === \"previousElementSibling\" ||\n keyName === \"nextElementSibling\" ||\n // Potentially large data\n keyName === \"innerHTML\" ||\n keyName === \"outerHTML\" ||\n // Reflow triggers\n keyName === \"offsetParent\" ||\n keyName === \"offsetWidth\" ||\n keyName === \"offsetHeight\" ||\n keyName === \"offsetLeft\" ||\n keyName === \"offsetTop\" ||\n keyName === \"clientTop\" ||\n keyName === \"clientLeft\" ||\n keyName === \"clientWidth\" ||\n keyName === \"clientHeight\" ||\n keyName === \"scrollWidth\" ||\n keyName === \"scrollHeight\" ||\n keyName === \"scrollTop\" ||\n keyName === \"scrollLeft\")));\n}\n//# sourceMappingURL=index.js.map",
12
12
  "import * as preact from \"preact\";\nexport async function infer_bind_from_environment() {\n try {\n // @ts-ignore\n const React = await import(\"react\");\n // @ts-ignore\n const ReactDOM = await import(\"react-dom/client\");\n return (node) => reactjs_bind(node, React, ReactDOM);\n }\n catch {\n console.error(\"Unknown error occurred: 'react' is missing within this ReactPy environment! \\\n Your JavaScript components may not work as expected!\");\n return (node) => local_preact_bind(node);\n }\n}\nfunction local_preact_bind(node) {\n return {\n create: (type, props, children) => preact.createElement(type, props, ...(children || [])),\n render: (element) => {\n preact.render(element, node);\n },\n unmount: () => preact.render(null, node),\n };\n}\nconst roots = new WeakMap();\nfunction reactjs_bind(node, React, ReactDOM) {\n let root = null;\n return {\n create: (type, props, children) => React.createElement(type, props, ...(children || [])),\n render: (element) => {\n if (!root) {\n if (!roots.get(node)) {\n root = ReactDOM.createRoot(node);\n roots.set(node, root);\n }\n else {\n root = roots.get(node);\n }\n }\n root.render(element);\n },\n unmount: () => {\n if (root) {\n root.unmount();\n if (roots.get(node) === root) {\n roots.delete(node);\n }\n root = null;\n }\n },\n };\n}\n//# sourceMappingURL=bind.js.map",
13
- "import eventToObject from \"event-to-object\";\nimport { infer_bind_from_environment } from \"./bind\";\nimport log from \"./logger\";\nexport async function loadImportSource(vdomImportSource, client) {\n let module;\n if (vdomImportSource.sourceType === \"URL\") {\n module = await import(vdomImportSource.source);\n }\n else {\n module = await client.loadModule(vdomImportSource.source);\n }\n let { bind } = module;\n if (typeof bind !== \"function\") {\n bind = await infer_bind_from_environment();\n }\n return (node) => {\n const binding = bind(node, {\n sendMessage: client.sendMessage,\n onMessage: client.onMessage,\n });\n if (!(typeof binding.create === \"function\" &&\n typeof binding.render === \"function\" &&\n typeof binding.unmount === \"function\")) {\n log.error(`${vdomImportSource.source} returned an impropper binding`);\n return null;\n }\n return {\n render: (model) => binding.render(createImportSourceElement({\n client,\n module,\n binding,\n model,\n currentImportSource: vdomImportSource,\n })),\n unmount: binding.unmount,\n };\n };\n}\nfunction createImportSourceElement(props) {\n let type;\n if (props.model.importSource) {\n if (!isImportSourceEqual(props.currentImportSource, props.model.importSource)) {\n return props.binding.create(\"reactpy-child\", {\n ref: (node) => {\n if (node) {\n node.client = props.client;\n node.model = props.model;\n node.requestUpdate();\n }\n },\n });\n }\n else {\n type = getComponentFromModule(props.module, props.model.tagName, props.model.importSource);\n if (!type) {\n // Error message logged within getComponentFromModule\n return null;\n }\n }\n }\n else {\n type = props.model.tagName;\n }\n return props.binding.create(type, createAttributes(props.model, props.client), createChildren(props.model, (child) => createImportSourceElement({\n ...props,\n model: child,\n })));\n}\nfunction getComponentFromModule(module, componentName, importSource) {\n /* Gets the component with the provided name from the provided module.\n \n Built specifically to work on inifinitely deep nested components.\n For example, component \"My.Nested.Component\" is accessed from\n ModuleA like so: ModuleA[\"My\"][\"Nested\"][\"Component\"].\n */\n const componentParts = componentName.split(\".\");\n let Component = null;\n for (let i = 0; i < componentParts.length; i++) {\n const iterAttr = componentParts[i];\n Component = i == 0 ? module[iterAttr] : Component[iterAttr];\n if (!Component) {\n if (i == 0) {\n log.error(\"Module from source \" +\n stringifyImportSource(importSource) +\n ` does not export ${iterAttr}`);\n }\n else {\n console.error(`Component ${componentParts.slice(0, i).join(\".\")} from source ` +\n stringifyImportSource(importSource) +\n ` does not have subcomponent ${iterAttr}`);\n }\n break;\n }\n }\n return Component;\n}\nfunction isImportSourceEqual(source1, source2) {\n return (source1.source === source2.source &&\n source1.sourceType === source2.sourceType);\n}\nfunction stringifyImportSource(importSource) {\n return JSON.stringify({\n source: importSource.source,\n sourceType: importSource.sourceType,\n });\n}\nexport function createChildren(model, createChild) {\n if (!model.children) {\n return [];\n }\n else {\n return model.children.map((child) => {\n switch (typeof child) {\n case \"object\":\n return createChild(child);\n case \"string\":\n return child;\n }\n });\n }\n}\nexport function createAttributes(model, client) {\n return Object.fromEntries(Object.entries({\n // Normal HTML attributes\n ...model.attributes,\n // Construct event handlers\n ...Object.fromEntries(Object.entries(model.eventHandlers || {}).map(([name, handler]) => createEventHandler(client, name, handler))),\n ...Object.fromEntries(Object.entries(model.inlineJavaScript || {}).map(([name, inlineJavaScript]) => createInlineJavaScript(name, inlineJavaScript))),\n }));\n}\nfunction createEventHandler(client, name, { target, preventDefault, stopPropagation }) {\n const eventHandler = function (...args) {\n const data = Array.from(args).map((value) => {\n const event = value;\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n // Convert JavaScript objects to plain JSON, if needed\n if (typeof event === \"object\") {\n return eventToObject(event);\n }\n else {\n return event;\n }\n });\n client.sendMessage({ type: \"layout-event\", data, target });\n };\n eventHandler.isHandler = true;\n return [name, eventHandler];\n}\nfunction createInlineJavaScript(name, inlineJavaScript) {\n /* Function that will execute the string-like InlineJavaScript\n via eval in the most appropriate way */\n const wrappedExecutable = function (...args) {\n function handleExecution(...args) {\n const evalResult = eval(inlineJavaScript);\n if (typeof evalResult == \"function\") {\n return evalResult(...args);\n }\n }\n if (args.length > 0 && args[0] instanceof Event) {\n /* If being triggered by an event, set the event's current\n target to \"this\". This ensures that inline\n javascript statements such as the following work:\n html.button({\"onclick\": 'this.value = \"Clicked!\"'}, \"Click Me\")*/\n return handleExecution.call(args[0].currentTarget, ...args);\n }\n else {\n /* If not being triggered by an event, do not set \"this\" and\n just call normally */\n return handleExecution(...args);\n }\n };\n wrappedExecutable.isHandler = false;\n return [name, wrappedExecutable];\n}\nclass ReactPyChild extends HTMLElement {\n mountPoint;\n binding = null;\n _client = null;\n _model = null;\n currentImportSource = null;\n constructor() {\n super();\n this.mountPoint = document.createElement(\"div\");\n this.mountPoint.style.display = \"contents\";\n }\n connectedCallback() {\n this.appendChild(this.mountPoint);\n }\n set client(value) {\n this._client = value;\n }\n set model(value) {\n this._model = value;\n }\n requestUpdate() {\n this.update();\n }\n async update() {\n if (!this._client || !this._model || !this._model.importSource) {\n return;\n }\n const newImportSource = this._model.importSource;\n if (!this.binding ||\n !this.currentImportSource ||\n !isImportSourceEqual(this.currentImportSource, newImportSource)) {\n if (this.binding) {\n this.binding.unmount();\n this.binding = null;\n }\n this.currentImportSource = newImportSource;\n try {\n const bind = await loadImportSource(newImportSource, this._client);\n if (this.isConnected &&\n this.currentImportSource &&\n isImportSourceEqual(this.currentImportSource, newImportSource)) {\n const oldBinding = this.binding;\n if (oldBinding) {\n oldBinding.unmount();\n }\n this.binding = bind(this.mountPoint);\n if (this.binding) {\n this.binding.render(this._model);\n }\n }\n }\n catch (error) {\n console.error(\"Failed to load import source\", error);\n }\n }\n else {\n if (this.binding) {\n this.binding.render(this._model);\n }\n }\n }\n disconnectedCallback() {\n if (this.binding) {\n this.binding.unmount();\n this.binding = null;\n this.currentImportSource = null;\n }\n }\n}\nif (typeof customElements !== \"undefined\" &&\n !customElements.get(\"reactpy-child\")) {\n customElements.define(\"reactpy-child\", ReactPyChild);\n}\n//# sourceMappingURL=vdom.js.map",
13
+ "import eventToObject from \"event-to-object\";\nimport { Fragment } from \"preact\";\nimport { infer_bind_from_environment } from \"./bind\";\nimport log from \"./logger\";\nexport async function loadImportSource(vdomImportSource, client) {\n let module;\n if (vdomImportSource.sourceType === \"URL\") {\n module = await import(vdomImportSource.source);\n }\n else {\n module = await client.loadModule(vdomImportSource.source);\n }\n let { bind } = module;\n if (typeof bind !== \"function\") {\n bind = await infer_bind_from_environment();\n }\n return (node) => {\n const binding = bind(node, {\n sendMessage: client.sendMessage,\n onMessage: client.onMessage,\n });\n if (!(typeof binding.create === \"function\" &&\n typeof binding.render === \"function\" &&\n typeof binding.unmount === \"function\")) {\n log.error(`${vdomImportSource.source} returned an impropper binding`);\n return null;\n }\n return {\n render: (model) => binding.render(createImportSourceElement({\n client,\n module,\n binding,\n model,\n currentImportSource: vdomImportSource,\n })),\n unmount: binding.unmount,\n };\n };\n}\nfunction createImportSourceElement(props) {\n let type;\n if (props.model.importSource) {\n if (!isImportSourceEqual(props.currentImportSource, props.model.importSource)) {\n return props.binding.create(\"reactpy-child\", {\n ref: (node) => {\n if (node) {\n node.client = props.client;\n node.model = props.model;\n node.requestUpdate();\n }\n },\n });\n }\n else {\n type = getComponentFromModule(props.module, props.model.tagName, props.model.importSource);\n if (!type) {\n // Error message logged within getComponentFromModule\n return null;\n }\n }\n }\n else {\n type = props.model.tagName === \"\" ? Fragment : props.model.tagName;\n }\n return props.binding.create(type, createAttributes(props.model, props.client), createChildren(props.model, (child) => createImportSourceElement({\n ...props,\n model: child,\n })));\n}\nfunction getComponentFromModule(module, componentName, importSource) {\n /* Gets the component with the provided name from the provided module.\n \n Built specifically to work on inifinitely deep nested components.\n For example, component \"My.Nested.Component\" is accessed from\n ModuleA like so: ModuleA[\"My\"][\"Nested\"][\"Component\"].\n */\n const componentParts = componentName.split(\".\");\n let Component = null;\n for (let i = 0; i < componentParts.length; i++) {\n const iterAttr = componentParts[i];\n Component = i == 0 ? module[iterAttr] : Component[iterAttr];\n if (!Component) {\n if (i == 0) {\n log.error(\"Module from source \" +\n stringifyImportSource(importSource) +\n ` does not export ${iterAttr}`);\n }\n else {\n console.error(`Component ${componentParts.slice(0, i).join(\".\")} from source ` +\n stringifyImportSource(importSource) +\n ` does not have subcomponent ${iterAttr}`);\n }\n break;\n }\n }\n return Component;\n}\nfunction isImportSourceEqual(source1, source2) {\n return (source1.source === source2.source &&\n source1.sourceType === source2.sourceType);\n}\nfunction stringifyImportSource(importSource) {\n return JSON.stringify({\n source: importSource.source,\n sourceType: importSource.sourceType,\n });\n}\nexport function createChildren(model, createChild) {\n if (!model.children) {\n return [];\n }\n else {\n return model.children.map((child) => {\n switch (typeof child) {\n case \"object\":\n return createChild(child);\n case \"string\":\n return child;\n }\n });\n }\n}\nexport function createAttributes(model, client) {\n return Object.fromEntries(Object.entries({\n // Normal HTML attributes\n ...model.attributes,\n // Construct event handlers\n ...Object.fromEntries(Object.entries(model.eventHandlers || {}).map(([name, handler]) => createEventHandler(client, name, handler))),\n ...Object.fromEntries(Object.entries(model.inlineJavaScript || {}).map(([name, inlineJavaScript]) => createInlineJavaScript(name, inlineJavaScript))),\n }));\n}\nfunction createEventHandler(client, name, { target, preventDefault, stopPropagation }) {\n const eventHandler = function (...args) {\n const data = Array.from(args).map((value) => {\n const event = value;\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n // Convert JavaScript objects to plain JSON, if needed\n if (typeof event === \"object\") {\n return eventToObject(event);\n }\n else {\n return event;\n }\n });\n client.sendMessage({ type: \"layout-event\", data, target });\n };\n eventHandler.isHandler = true;\n return [name, eventHandler];\n}\nfunction createInlineJavaScript(name, inlineJavaScript) {\n /* Function that will execute the string-like InlineJavaScript\n via eval in the most appropriate way */\n const wrappedExecutable = function (...args) {\n function handleExecution(...args) {\n const evalResult = eval(inlineJavaScript);\n if (typeof evalResult == \"function\") {\n return evalResult(...args);\n }\n }\n if (args.length > 0 && args[0] instanceof Event) {\n /* If being triggered by an event, set the event's current\n target to \"this\". This ensures that inline\n javascript statements such as the following work:\n html.button({\"onclick\": 'this.value = \"Clicked!\"'}, \"Click Me\")*/\n return handleExecution.call(args[0].currentTarget, ...args);\n }\n else {\n /* If not being triggered by an event, do not set \"this\" and\n just call normally */\n return handleExecution(...args);\n }\n };\n wrappedExecutable.isHandler = false;\n return [name, wrappedExecutable];\n}\nclass ReactPyChild extends HTMLElement {\n mountPoint;\n binding = null;\n _client = null;\n _model = null;\n currentImportSource = null;\n constructor() {\n super();\n this.mountPoint = document.createElement(\"div\");\n this.mountPoint.style.display = \"contents\";\n }\n connectedCallback() {\n this.appendChild(this.mountPoint);\n }\n set client(value) {\n this._client = value;\n }\n set model(value) {\n this._model = value;\n }\n requestUpdate() {\n this.update();\n }\n async update() {\n if (!this._client || !this._model || !this._model.importSource) {\n return;\n }\n const newImportSource = this._model.importSource;\n if (!this.binding ||\n !this.currentImportSource ||\n !isImportSourceEqual(this.currentImportSource, newImportSource)) {\n if (this.binding) {\n this.binding.unmount();\n this.binding = null;\n }\n this.currentImportSource = newImportSource;\n try {\n const bind = await loadImportSource(newImportSource, this._client);\n if (this.isConnected &&\n this.currentImportSource &&\n isImportSourceEqual(this.currentImportSource, newImportSource)) {\n const oldBinding = this.binding;\n if (oldBinding) {\n oldBinding.unmount();\n }\n this.binding = bind(this.mountPoint);\n if (this.binding) {\n this.binding.render(this._model);\n }\n }\n }\n catch (error) {\n console.error(\"Failed to load import source\", error);\n }\n }\n else {\n if (this.binding) {\n this.binding.render(this._model);\n }\n }\n }\n disconnectedCallback() {\n if (this.binding) {\n this.binding.unmount();\n this.binding = null;\n this.currentImportSource = null;\n }\n }\n}\nif (typeof customElements !== \"undefined\" &&\n !customElements.get(\"reactpy-child\")) {\n customElements.define(\"reactpy-child\", ReactPyChild);\n}\n//# sourceMappingURL=vdom.js.map",
14
14
  "import { jsx as _jsx } from \"preact/jsx-runtime\";\nimport { render } from \"preact\";\nimport { ReactPyClient } from \"./client\";\nimport { Layout } from \"./components\";\nexport function mountReactPy(props) {\n // WebSocket route for component rendering\n const wsProtocol = `ws${window.location.protocol === \"https:\" ? \"s\" : \"\"}:`;\n const wsOrigin = `${wsProtocol}//${window.location.host}`;\n const componentUrl = new URL(`${wsOrigin}${props.pathPrefix}${props.componentPath || \"\"}`);\n // Embed the initial HTTP path into the WebSocket URL\n componentUrl.searchParams.append(\"http_pathname\", window.location.pathname);\n if (window.location.search) {\n componentUrl.searchParams.append(\"http_query_string\", window.location.search);\n }\n // Configure a new ReactPy client\n const client = new ReactPyClient({\n urls: {\n componentUrl: componentUrl,\n jsModulesPath: `${window.location.origin}${props.pathPrefix}modules/`,\n },\n reconnectOptions: {\n interval: props.reconnectInterval || 750,\n maxInterval: props.reconnectMaxInterval || 60000,\n maxRetries: props.reconnectMaxRetries || 150,\n backoffMultiplier: props.reconnectBackoffMultiplier || 1.25,\n },\n mountElement: props.mountElement,\n });\n // Start rendering the component\n render(_jsx(Layout, { client: client }), props.mountElement);\n}\n//# sourceMappingURL=mount.js.map"
15
15
  ],
16
- "mappings": "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",
17
- "debugId": "963F8FEBB526BB7F64756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "219F1B8D77E5876364756E2164756E21",
18
18
  "names": []
19
19
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reactpy
3
- Version: 2.0.0b7
3
+ Version: 2.0.0b8
4
4
  Summary: It's React, but in Python.
5
5
  Project-URL: Changelog, https://reactpy.dev/docs/about/changelog.html
6
6
  Project-URL: Documentation, https://reactpy.dev/
@@ -1,4 +1,4 @@
1
- reactpy/__init__.py,sha256=pZzzdfRxte7CxgoM2pWcguSrtDTpoouoGXQcf2YpIBQ,1213
1
+ reactpy/__init__.py,sha256=s4vt4vzW_DeU2YAsAgBWCUFyXZjkGLL9JeTvkeEK3gk,1213
2
2
  reactpy/_html.py,sha256=1r47Irgeh_emnJfSNo9ajDntmW4CeiqSqPFLMczQG_Y,11529
3
3
  reactpy/_option.py,sha256=T4rQa_YIGLEVlYmqLDD-a2hQBfM5OHVGjFycTQUP4sI,5115
4
4
  reactpy/_warnings.py,sha256=DR1YGzTS8ijaH0Wqh2V3TWDeDlkBwEb9dSsEYYuW-RI,933
@@ -20,7 +20,7 @@ reactpy/core/_life_cycle_hook.py,sha256=GyMF6g-Mjeh0wO5NBJziPOcA7gXFUO-OITmApZ2C
20
20
  reactpy/core/_thread_local.py,sha256=qMnnF9Wz-OqbqUk81glgPpppvxdq6hXyDkx-AYXtfAI,828
21
21
  reactpy/core/component.py,sha256=zASYlRhBrT6JZ-_uTU7N_UOhVSIsnnky4S8xoz5OY98,969
22
22
  reactpy/core/events.py,sha256=HK8SHvl6uQS4H1AqfoK4Mj_YCaMaX3JvSFJ6Bqc4eMI,8594
23
- reactpy/core/hooks.py,sha256=iL36fDcubkB65PjKt0JVyvD0rtdmzcN-4-brHO67bB0,18919
23
+ reactpy/core/hooks.py,sha256=7mpjc3g81SMyLSDHDz30kPSsKX4t2EjZtuxCxMSSdss,19185
24
24
  reactpy/core/layout.py,sha256=CYQBWnzS0PdzRi8pifC8PYg3BS0kzOgB0MQc1O4e404,26122
25
25
  reactpy/core/serve.py,sha256=DFdJ6AWZzAuuq_8PtPmD-QprvMJFsYp77_O3Q46prx8,2337
26
26
  reactpy/core/vdom.py,sha256=Boe9dsHKrsVWM2hZai7Y41VYzTHeIQn-bl537vkj0ds,9771
@@ -36,16 +36,16 @@ reactpy/executors/pyscript/component_template.py,sha256=0EC2NUzrDxjCg0zcOtHV1yfR
36
36
  reactpy/executors/pyscript/components.py,sha256=cz1555jzwqc8JZfPP3g-aV3UEJ1-Qh4zXNKfAxksotk,1925
37
37
  reactpy/executors/pyscript/layout_handler.py,sha256=aBrnBeiEMudUvRqbhW7KoJW-RkwS_wQ2KZl6m47vcNA,6289
38
38
  reactpy/executors/pyscript/utils.py,sha256=qI923vqfs91nAOYmE9G-yfIwW2DgJIUPyc9Vrm6N0t0,8863
39
- reactpy/reactjs/__init__.py,sha256=0hu1wuFi3nhcsfHT4EMM2O5E4XMD9ijaE3IBJTLQeHw,11990
40
- reactpy/reactjs/module.py,sha256=AqfdO9foXHqiPKk02fs-AAX5Cwa_CxoXMYt1qYNOBSI,9141
39
+ reactpy/reactjs/__init__.py,sha256=M34COQhGOpC3wgJQ4yAift0M_t0RGpMlHv4o-LwyNx8,12005
40
+ reactpy/reactjs/module.py,sha256=OqF_CrHufT9xmTLfCj9mBsBsYjHVky7jDH4tkL79zx0,9181
41
41
  reactpy/reactjs/types.py,sha256=Oik_-Ipj6SNwZyHa1_wEVQBAUPWIB1rtadb_rLpFDgI,208
42
42
  reactpy/reactjs/utils.py,sha256=cJ2VbImlhfv0qwIZaCTXJ5YgbuqKPaO2_IHCQqLZLlE,6840
43
43
  reactpy/static/index-64wy0fss.js,sha256=8syb59S954n37cK1l2G5UqbfQ6pvolOXMcTIo3XAgAY,1793
44
44
  reactpy/static/index-64wy0fss.js.map,sha256=rx76p2DWfjroCpS4CrT0rou36_T0gzSPWgd5aJ8uKIY,4190
45
45
  reactpy/static/index-beq660xy.js,sha256=oeNLtnKprSg7WT2Wr_Pn6oNgOJYwDguUWkBB0fmy4FE,25294
46
46
  reactpy/static/index-beq660xy.js.map,sha256=su0fHsjdcrYoql7TC8xxnrzXN9TasaoNC_6MKmG6N5M,58059
47
- reactpy/static/index.js,sha256=4gDPhAEoAqCepQBVsiXNTc5uJg8_sM2wkvqhGIXyXOQ,14268
48
- reactpy/static/index.js.map,sha256=j4unEoY--U9dHL-cCK-PwNKcmR_wbq5QohRMgv5U7fg,57173
47
+ reactpy/static/index.js,sha256=DsR5SeQ-yRTBTWkARpBLli9-LAfy6IOsPgH2qZqw8og,14291
48
+ reactpy/static/index.js.map,sha256=806Pqyrrv6I_WhbOKQakmrTmQEF-gY3nI3sLRpIs3ww,57280
49
49
  reactpy/static/preact-dom.js,sha256=37D1sjc5O-4VhLm4cJj4dGSL2tgFjIb4lRTHfIRE-Aw,1427
50
50
  reactpy/static/preact-dom.js.map,sha256=oL0GgSCIpg81j_LP5uWonxvEhWmNYsQXiEnyLT-dMRY,1183
51
51
  reactpy/static/preact-jsx-runtime.js,sha256=fOTjeln4sPSheSj7VRmpI0zJuUhep1wmbTJGjEDvW8E,293
@@ -121,8 +121,8 @@ reactpy/testing/logs.py,sha256=XfFZr-Qhq-x6nPgkPqeo_L51NmhJQtAsvnzjuWbx8qY,5672
121
121
  reactpy/web/__init__.py,sha256=ldSzfmqYFnKCEclfPs8Y5oL9GaG5LDYtXN9Vaz9wUhI,216
122
122
  reactpy/web/module.py,sha256=A5N6habdSSOsTjvahQ7jXEPBYQKRiGslxzAc8N7GWDU,3332
123
123
  reactpy/web/utils.py,sha256=TOCy15woEr2QZjiXZV_p6YMof2rYZbQu7wsJVznB5jI,136
124
- reactpy-2.0.0b7.dist-info/METADATA,sha256=1nBGMDi9F9qXJmvdMH3diPUS8b33XpMLo2I9u20XaYE,4998
125
- reactpy-2.0.0b7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
126
- reactpy-2.0.0b7.dist-info/entry_points.txt,sha256=WRit3ZrLVh7iDEhUMAPE3A9bcaa7TsolCdAdkxGmv0U,61
127
- reactpy-2.0.0b7.dist-info/licenses/LICENSE,sha256=-8yQb3G5cW-IBhxyIe-uoQzI9lPEu7-6Yi5wJSO1ous,1093
128
- reactpy-2.0.0b7.dist-info/RECORD,,
124
+ reactpy-2.0.0b8.dist-info/METADATA,sha256=p7oZs4lCd_aowJ9enxwXog4vhNlMYsYyDCspR7rXkgw,4998
125
+ reactpy-2.0.0b8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
126
+ reactpy-2.0.0b8.dist-info/entry_points.txt,sha256=WRit3ZrLVh7iDEhUMAPE3A9bcaa7TsolCdAdkxGmv0U,61
127
+ reactpy-2.0.0b8.dist-info/licenses/LICENSE,sha256=-8yQb3G5cW-IBhxyIe-uoQzI9lPEu7-6Yi5wJSO1ous,1093
128
+ reactpy-2.0.0b8.dist-info/RECORD,,