xote 1.0.3 → 1.2.1

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/LICENSE CHANGED
@@ -1,21 +1,14 @@
1
- MIT License
1
+ Copyright (c) 2025 Bernardo Gurgel, Author of Xote
2
2
 
3
- Copyright (c) 2025 Bernardo Gurgel
3
+ This library is free software: you can redistribute it and/or modify it
4
+ under the terms of the GNU Lesser General Public License as published by
5
+ the Free Software Foundation, either version 3 of the License, or
6
+ (at your option) any later version.
4
7
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
8
+ This library is distributed in the hope that it will be useful,
9
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ GNU Lesser General Public License for more details.
11
12
 
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
13
+ You should have received a copy of the GNU Lesser General Public License
14
+ along with this library. If not, see https://www.gnu.org/licenses/.
package/README.md CHANGED
@@ -1,16 +1,19 @@
1
- # xote (pronounced [ˈʃɔtʃi])
2
- [![npm version](https://img.shields.io/npm/v/xote.svg)](https://www.npmjs.com/package/xote)
1
+ # xote
2
+ ![NPM Version](https://img.shields.io/npm/v/xote)
3
+ ![npm bundle size](https://img.shields.io/bundlephobia/min/xote)
4
+ ![npm bundle size](https://img.shields.io/bundlephobia/minzip/xote)
3
5
 
4
- A lightweight, zero-dependency UI library for ReScript with fine-grained reactivity based on the [TC39 Signals proposal](https://github.com/tc39/proposal-signals). Build reactive web applications with automatic dependency tracking and efficient updates.
6
+ Xote is a lightweight, zero-dependency library for ReScript with fine-grained reactivity based on the [TC39 Signals proposal](https://github.com/tc39/proposal-signals). With Xote, you can build reactive web applications with automatic dependency tracking and efficient updates.
5
7
 
6
8
  ## Features
7
9
 
8
10
  - Zero dependencies: pure ReScript implementation
9
- - Lightweight and efficient runtime
10
- - Declarative components for building reactive UIs (JSX support comming up soon)
11
+ - Lightweight and efficient runtime (~12kb minified)
12
+ - Declarative components for building reactive UIs with JSX support
11
13
  - Reactive primitives: signals, computed values, and effects
12
14
  - Automatic dependency tracking: no manual subscription management
13
15
  - Fine-grained updates: direct DOM updates without a virtual DOM
16
+ - Signal-based router: SPA navigation with pattern matching and dynamic parameters
14
17
 
15
18
  ## Getting Started
16
19
 
@@ -32,59 +35,113 @@ Then, add it to your ReScript project’s dependencies in `rescript.json`:
32
35
  }
33
36
  ```
34
37
 
38
+ ## Philosophy
39
+
40
+ Xote focuses on clarity, control, and performance. It brings reactive programming to ReScript with minimal abstractions and no runtime dependencies. The goal is to offer precise, fine-grained updates and predictable behavior without a virtual DOM.
41
+
35
42
  ### Quick Example
36
43
 
44
+ #### Using JSX
45
+
37
46
  ```rescript
38
47
  open Xote
39
48
 
40
- // Create reactive state
41
- let count = Signal.make(0)
42
-
43
- // Derived value
44
- let doubled = Computed.make(() => Signal.get(count) * 2)
45
-
46
- // Event handler
47
- let increment = (_evt: Dom.event) => Signal.update(count, n => n + 1)
48
-
49
- // Build the UI
50
- let app = Component.div(
51
- ~children=[
52
- Component.h1(~children=[Component.text("Counter")], ()),
53
- Component.p(~children=[
54
- Component.textSignal(
55
- Computed.make(() => "Count: " ++ Int.toString(Signal.get(count)))
56
- )
57
- ], ()),
58
- Component.button(
59
- ~events=[("click", increment)],
60
- ~children=[Component.text("Increment")],
61
- ()
62
- )
63
- ],
64
- ()
65
- )
49
+ module App = {
50
+ let make = () => {
51
+ // Create reactive state
52
+ let count = Signal.make(0)
53
+
54
+ // Event handler
55
+ let increment = (_evt: Dom.event) => Signal.update(count, n => n + 1)
56
+
57
+ // Build the UI with JSX
58
+ <div>
59
+ <h1> {Component.text("Counter")} </h1>
60
+ <p>
61
+ {Component.textSignal(() => `Count: ${Signal.get(count)->Int.toString}`)}
62
+ </p>
63
+ <button onClick={increment}>
64
+ {Component.text("Increment")}
65
+ </button>
66
+ </div>
67
+ }
68
+ }
66
69
 
67
70
  // Mount to the DOM
68
- Component.mountById(app, "app")
71
+ Component.mountById(<App />, "app")
69
72
  ```
70
73
 
71
- Classic counter: when you click the button, the counter updates reactively.
74
+ ## Core Concepts
72
75
 
73
- ## Philosophy
76
+ - **Signal**: Reactive state container
77
+ - **Computed**: Derived reactive value that updates automatically
78
+ - **Effect**: Side-effect functions that re-runs when dependencies change. Dependencies are automatically tracked, unlike React.
79
+ - **Component**: Declarative UI builder using ReScript functions
80
+ - **Router**: Signal-based navigation for single-page applications
74
81
 
75
- Xote focuses on clarity, control, and performance. It brings reactive programming to ReScript with minimal abstractions and no runtime dependencies. The goal is to offer precise, fine-grained updates and predictable behavior without a virtual DOM.
82
+ ### Component Features
76
83
 
77
- ## Core Concepts
84
+ - **JSX syntax**: Use HTML tags like `<div>`, `<button>`, `<input>`
85
+ - **Props**: Standard HTML attributes like `class`, `id`, `style`, `value`, `placeholder`
86
+ - **Event handlers**: `onClick`, `onInput`, `onChange`, `onSubmit`, etc.
87
+ - **Reactive content**: Wrap reactive text with `Component.textSignal(() => ...)`
88
+ - **Component functions**: Define reusable components as functions that return JSX
89
+
90
+ ### Xote.Router Features
91
+
92
+ - **Initialization**: Call `Router.init()` once at app start
93
+ - **Imperative navigation**: Use `Router.push()` and `Router.replace()` to navigate programmatically
94
+ - **Declarative routing**: Define routes with `Router.routes()` and render components based on URL patterns
95
+ - **Dynamic parameters**: Extract URL parameters using `:param` syntax (e.g., `/users/:id`)
96
+ - **Navigation links**: Use `Router.link()` for SPA navigation without page reload
97
+ - **Reactive location**: Access current route via `Router.location` signal
98
+
99
+ ## Examples
78
100
 
79
- - **Signal**: Reactive state container
80
- - **Computed**: Derived reactive value that updates automatically
81
- - **Effect**: Function that re-runs when dependencies change
82
- - **Component**: Declarative UI builder using ReScript functions
101
+ Check some examples of applications built with Xote at https://brnrdog.github.io/xote/demos/.
83
102
 
84
- For a more complete example, see a full [todo list app example](https://github.com/brnrdog/xote/blob/main/src/demo/TodoApp.res).
103
+ ### Running Examples Locally
104
+
105
+ To run the example demos locally:
106
+
107
+ 1. Clone the repository:
108
+ ```bash
109
+ git clone https://github.com/brnrdog/xote.git
110
+ cd xote
111
+ ```
85
112
 
113
+ 2. Install dependencies:
114
+ ```bash
115
+ npm install
116
+ ```
117
+
118
+ 3. Compile ReScript and start the dev server:
119
+ ```bash
120
+ npm run res:dev # In one terminal (watches ReScript files)
121
+ npm run dev # In another terminal (starts Vite dev server)
122
+ ```
123
+
124
+ 4. Open your browser and navigate to `http://localhost:5173`
125
+
126
+ The demo app includes a navigation menu to explore all examples interactively.
127
+
128
+ ## Documentation
129
+
130
+ Comprehensive documentation with live embedded demos is available at:
131
+
132
+ **https://brnrdog.github.io/xote/**
133
+
134
+
135
+ ### Building Documentation Locally
136
+
137
+ To build and preview the documentation site:
138
+
139
+ ```bash
140
+ npm run docs:start
141
+ ```
86
142
 
143
+ This will build the demos and start the documentation server at `http://localhost:3000`.
87
144
 
88
145
  ## License
89
146
 
90
- MIT © 2025
147
+ LGPL v3
package/dist/xote.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var V=(function(n,e){for(var r in n)e(r)});function j(n,e){if(n===e)return!0;var r=typeof n;if(r==="string"||r==="number"||r==="bigint"||r==="boolean"||r==="undefined"||n===null)return!1;var t=typeof e;if(r==="function"||t==="function")throw{RE_EXN_ID:"Invalid_argument",_1:"equal: functional value",Error:new Error};if(t==="number"||t==="bigint"||t==="undefined"||e===null)return!1;var u=n.TAG,i=e.TAG;if(u===248)return n[1]===e[1];if(u===251)throw{RE_EXN_ID:"Invalid_argument",_1:"equal: abstract value",Error:new Error};if(u!==i)return!1;var o=n.length|0,a=e.length|0;if(o===a)if(Array.isArray(n))for(var f=0;;){var c=f;if(c===o)return!0;if(!j(n[c],e[c]))return!1;f=c+1|0}else{if(n instanceof Date&&e instanceof Date)return!(n>e||n<e);var g={contents:!0},nn=function(b){if(!Object.prototype.hasOwnProperty.call(e,b)){g.contents=!1;return}},en=function(b){if(!Object.prototype.hasOwnProperty.call(n,b)||!j(e[b],n[b])){g.contents=!1;return}};return V(n,nn),g.contents&&V(e,en),g.contents}else return!1}function X(n,e,r){for(var t=new Array(r),u=0,i=e;u<r;)t[u]=n[i],u=u+1|0,i=i+1|0;return t}function L(n,e){for(;;){var r=e,t=n,u=t.length,i=u===0?1:u,o=r.length,a=i-o|0;if(a===0)return t.apply(null,r);if(a>=0)return(function(f,c){return function(g){return L(f,c.concat([g]))}})(t,r);e=X(r,i,-a|0),n=t.apply(null,X(r,0,i))}}function rn(n,e){var r=n.length;if(r===1)return n(e);switch(r){case 1:return n(e);case 2:return function(t){return n(e,t)};case 3:return function(t,u){return n(e,t,u)};case 4:return function(t,u,i){return n(e,t,u,i)};case 5:return function(t,u,i,o){return n(e,t,u,i,o)};case 6:return function(t,u,i,o,a){return n(e,t,u,i,o,a)};case 7:return function(t,u,i,o,a,f){return n(e,t,u,i,o,a,f)};default:return L(n,[e])}}function tn(n){var e=n.length;return e===1?n:function(r){return rn(n,r)}}function un(n){return n===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:n!==null&&n.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:n.BS_PRIVATE_NESTED_SOME_NONE+1|0}:n}function G(n){if(!(n!==null&&n.BS_PRIVATE_NESTED_SOME_NONE!==void 0))return n;var e=n.BS_PRIVATE_NESTED_SOME_NONE;if(e!==0)return{BS_PRIVATE_NESTED_SOME_NONE:e-1|0}}function S(n){return n!==void 0?n.h:0}function l(n,e,r,t){var u=S(n),i=S(t);return{k:e,v:r,h:u>=i?u+1|0:i+1|0,l:n,r:t}}function an(n,e){return{k:n,v:e,h:1,l:void 0,r:void 0}}function on(n,e){return n.v===e?n:{k:n.k,v:e,h:n.h,l:n.l,r:n.r}}function O(n,e,r,t){var u=n!==void 0?n.h:0,i=t!==void 0?t.h:0;if(u>(i+2|0)){var o=n.l,a=n.r;return S(o)>=S(a)?l(o,n.k,n.v,l(a,e,r,t)):l(l(o,n.k,n.v,a.l),a.k,a.v,l(a.r,e,r,t))}if(i<=(u+2|0))return{k:e,v:r,h:u>=i?u+1|0:i+1|0,l:n,r:t};var f=t.l,c=t.r;return S(c)>=S(f)?l(l(n,e,r,f),t.k,t.v,c):l(l(n,e,r,f.l),f.k,f.v,l(f.r,t.k,t.v,c))}function H(n,e,r){var t=n.l;return t!==void 0?O(H(t,e,r),n.k,n.v,n.r):(e.contents=n.k,r.contents=n.v,n.r)}function fn(n,e){for(;;){var r=n;if(r===void 0)return;var t=r.k;if(e===t)return un(r.v);n=e<t?r.l:r.r}}function E(n,e,r){if(n===void 0)return an(e,r);var t=n.k;if(e===t)return on(n,r);var u=n.v;return e<t?O(E(n.l,e,r),t,u,n.r):O(n.l,t,u,E(n.r,e,r))}function R(n,e){var r=n.k,t=n.l,u=n.r;if(e===r){if(t===void 0)return u;if(u===void 0)return t;var i={contents:u.k},o={contents:u.v},a=H(u,i,o);return O(t,i.contents,o.contents,a)}if(e<r){if(t===void 0)return n;var f=R(t,e);return f===t?n:O(f,r,n.v,u)}if(u===void 0)return n;var c=R(u,e);return O(t,r,n.v,c)}function cn(n,e){if(n!==void 0)return R(n,e)}var m=fn;function z(n){if(n!==void 0)return G(n);throw{RE_EXN_ID:"Not_found",Error:new Error}}function p(n,e,r){var t=n!==void 0?n.h:0,u=r!==void 0?r.h:0;return{v:e,h:(t>=u?t:u)+1|0,l:n,r}}function vn(n){return{v:n,h:1,l:void 0,r:void 0}}function q(n,e){return e!==void 0?n!==void 0?n.h>=e.h:!1:!0}function T(n,e,r){var t=n!==void 0?n.h:0,u=r!==void 0?r.h:0;if(t>(u+2|0)){var i=n.l,o=n.r;return q(i,o)?p(i,n.v,p(o,e,r)):p(p(i,n.v,o.l),o.v,p(o.r,e,r))}if(u<=(t+2|0))return{v:e,h:(t>=u?t:u)+1|0,l:n,r};var a=r.l,f=r.r;return q(f,a)?p(p(n,e,a),r.v,f):p(p(n,e,a.l),a.v,p(a.r,r.v,f))}function W(n,e){var r=n.l;return r!==void 0?T(W(r,e),n.v,n.r):(e.contents=n.v,n.r)}function U(n,e){for(;;){var r=n;if(r===void 0)return;U(r.l,e),e(r.v),n=r.r}}function dn(n,e){U(n,tn(e))}function sn(n,e){for(;;){var r=n;if(r===void 0)return!1;var t=r.v;if(e===t)return!0;n=e<t?r.l:r.r}}function N(n,e){if(n===void 0)return vn(e);var r=n.v;if(e===r)return n;var t=n.l,u=n.r;if(e<r){var i=N(t,e);return i===t?n:T(i,r,u)}var o=N(u,e);return o===u?n:T(t,r,o)}function D(n,e){if(n===void 0)return n;var r=n.v,t=n.l,u=n.r;if(e===r){if(t===void 0)return u;if(u===void 0)return t;var i={contents:u.v},o=W(u,i);return T(t,i.contents,o)}if(e<r){var a=D(t,e);return a===t?n:T(a,r,u)}var f=D(u,e);return f===u?n:T(t,r,f)}var ln=sn,k=dn,_={contents:void 0},d={contents:void 0},pn={contents:void 0},v={contents:void 0},h={contents:void 0},I={contents:!1};function M(n){var e=m(d.contents,n);if(e===void 0){d.contents=E(d.contents,n,void 0);return}}function J(n,e){M(e);var r=z(m(_.contents,n));if(j(v.contents,n)&&ln(r.deps,e)===!1){r.deps=N(r.deps,e);var t=z(m(d.contents,e));d.contents=E(d.contents,e,N(t,n))}}function y(n){k(n.deps,(function(e){var r=m(d.contents,e);if(r!==void 0){d.contents=E(d.contents,e,D(G(r),n.id));return}})),n.deps=void 0}function w(n){if(h.contents=N(h.contents,n),I.contents===!1){var e=h.contents;h.contents=void 0,k(e,(function(r){var t=m(_.contents,r);if(t!==void 0){y(t),v.contents=r,t.run(),v.contents=void 0;return}}))}}function Q(n){M(n);var e=m(d.contents,n);if(e!==void 0)return k(G(e),w)}function _n(n){var e=v.contents;v.contents=void 0;var r=n();return v.contents=e,r}function hn(n){var e=I.contents;I.contents=!0;var r=n();if(I.contents=e,h.contents!==void 0){var t=h.contents;h.contents=void 0,k(t,(function(u){w(u)}))}return r}var En,mn,gn,Sn;const On=Object.freeze(Object.defineProperty({__proto__:null,Id:Sn,IntMap:mn,IntSet:En,Observer:gn,addDep:J,batch:hn,batching:I,clearDeps:y,currentObserverId:v,ensureSignalBucket:M,notify:Q,observers:_,pending:h,schedule:w,signalObservers:d,signalPeeks:pn,untrack:_n},Symbol.toStringTag,{value:"Module"}));var P={contents:0};function F(){return P.contents=P.contents+1|0,P.contents}function B(n){var e=F(),r={id:e,kind:"Effect",run:(function(){n()}),deps:void 0};_.contents=E(_.contents,e,r),y(r),v.contents=e,r.run(),v.contents=void 0;var t=function(){var u=m(_.contents,e);if(u!==void 0){y(u),_.contents=cn(_.contents,e);return}};return{dispose:t}}var Tn,bn,In,$n,Nn,yn;const An=Object.freeze(Object.defineProperty({__proto__:null,Core:yn,Id:In,IntMap:bn,IntSet:Tn,Observer:$n,Signal:Nn,run:B},Symbol.toStringTag,{value:"Module"}));function Y(n){var e=F();return M(e),{id:e,value:{contents:n},version:{contents:0}}}function A(n){var e=v.contents;return e!==void 0&&J(e,n.id),n.value.contents}function Z(n){return n.value.contents}function C(n,e){n.value.contents=e,n.version.contents=n.version.contents+1|0,Q(n.id)}function Cn(n,e){C(n,e(n.value.contents))}var kn,Mn,Pn,jn,Rn;const Dn=Object.freeze(Object.defineProperty({__proto__:null,Core:Rn,Id:jn,IntMap:Mn,IntSet:kn,Observer:Pn,get:A,make:Y,peek:Z,set:C,update:Cn},Symbol.toStringTag,{value:"Module"}));function K(n){var e=Y(),r={contents:!1},t=F(),u=function(){var o=n();return r.contents===!1&&(r.contents=!0),C(e,o)},i={id:t,kind:{NAME:"Computed",VAL:e.id},run:u,deps:void 0};return _.contents=E(_.contents,t,i),y(i),v.contents=t,i.run(),v.contents=void 0,e}var Bn,Gn,wn,Fn,Vn,Xn;const zn=Object.freeze(Object.defineProperty({__proto__:null,Core:Fn,Id:Xn,IntMap:Gn,IntSet:Bn,Observer:Vn,Signal:wn,make:K},Symbol.toStringTag,{value:"Module"}));function qn(n){return{TAG:"Text",_0:n}}function Ln(n){return{TAG:"SignalText",_0:n}}function Hn(n){return{TAG:"Fragment",_0:n}}function Wn(n){return{TAG:"SignalFragment",_0:n}}function Un(n,e){var r=K(function(){return A(n).map(e)});return{TAG:"SignalFragment",_0:r}}function s(n,e,r,t,u){var i=e!==void 0?e:[].map(function(f){return f}),o=r!==void 0?r:[].map(function(f){return f}),a=t!==void 0?t:[].map(function(f){return f});return{TAG:"Element",tag:n,attrs:i,events:o,children:a}}function Jn(n,e,r,t){return s("div",n,e,r)}function Qn(n,e,r,t){return s("span",n,e,r)}function Yn(n,e,r,t){return s("button",n,e,r)}function Zn(n,e,r){return s("input",n,e,void 0)}function Kn(n,e,r,t){return s("h1",n,e,r)}function xn(n,e,r,t){return s("h2",n,e,r)}function ne(n,e,r,t){return s("h3",n,e,r)}function ee(n,e,r,t){return s("p",n,e,r)}function re(n,e,r,t){return s("ul",n,e,r)}function te(n,e,r,t){return s("li",n,e,r)}function $(n){switch(n.TAG){case"Element":var e=document.createElement(n.tag);return n.attrs.forEach(function(a){e.setAttribute(a[0],a[1])}),n.events.forEach(function(a){e.addEventListener(a[0],a[1])}),n.children.forEach(function(a){var f=$(a);e.appendChild(f)}),e;case"Text":return document.createTextNode(n._0);case"SignalText":var r=n._0,t=document.createTextNode(Z(r));return B(function(){var a=A(r);t.textContent=a}),t;case"Fragment":var u=document.createDocumentFragment();return n._0.forEach(function(a){var f=$(a);u.appendChild(f)}),u;case"SignalFragment":var i=n._0,o=document.createElement("div");return o.setAttribute("data-signal-fragment","true"),o.setAttribute("style","display: contents"),B(function(){var a=A(i);o.innerHTML="",a.forEach(function(f){var c=$(f);o.appendChild(c)})}),o}}function x(n,e){var r=$(n);e.appendChild(r)}function ue(n,e){var r=document.getElementById(e);if(r==null){console.error("Container element not found: "+e);return}else return x(n,r)}var ie,ae,oe,fe;const ce=Object.freeze(Object.defineProperty({__proto__:null,Computed:fe,Core:oe,Effect:ae,Signal:ie,button:Yn,div:Jn,element:s,fragment:Hn,h1:Kn,h2:xn,h3:ne,input:Zn,li:te,list:Un,mount:x,mountById:ue,p:ee,render:$,signalFragment:Wn,span:Qn,text:qn,textSignal:Ln,ul:re},Symbol.toStringTag,{value:"Module"}));var ve=ce,de=zn,se=On,le=An,pe=Dn;exports.Component=ve;exports.Computed=de;exports.Core=se;exports.Effect=le;exports.Signal=pe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function Ee(e){return e===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:e.BS_PRIVATE_NESTED_SOME_NONE+1|0}:e}function v(e){if(!(e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0))return e;var n=e.BS_PRIVATE_NESTED_SOME_NONE;if(n!==0)return{BS_PRIVATE_NESTED_SOME_NONE:n-1|0}}function $e(e){return e!==void 0}var z={contents:0};function J(){return z.contents=z.contents+1|0,z.contents}var Z=(function(e,n){for(var r in e)n(r)});function L(e,n){if(e===n)return!0;var r=typeof e;if(r==="string"||r==="number"||r==="bigint"||r==="boolean"||r==="undefined"||e===null)return!1;var t=typeof n;if(r==="function"||t==="function")throw{RE_EXN_ID:"Invalid_argument",_1:"equal: functional value",Error:new Error};if(t==="number"||t==="bigint"||t==="undefined"||n===null)return!1;var u=e.TAG,a=n.TAG;if(u===248)return e[1]===n[1];if(u===251)throw{RE_EXN_ID:"Invalid_argument",_1:"equal: abstract value",Error:new Error};if(u!==a)return!1;var o=e.length|0,i=n.length|0;if(o===i)if(Array.isArray(e))for(var f=0;;){var c=f;if(c===o)return!0;if(!L(e[c],n[c]))return!1;f=c+1|0}else{if(e instanceof Date&&n instanceof Date)return!(e>n||e<n);var d={contents:!0},g=function(S){if(!Object.prototype.hasOwnProperty.call(n,S)){d.contents=!1;return}},X=function(S){if(!Object.prototype.hasOwnProperty.call(e,S)||!L(n[S],e[S])){d.contents=!1;return}};return Z(e,g),d.contents&&Z(n,X),d.contents}else return!1}function ee(e,n,r){for(var t=new Array(r),u=0,a=n;u<r;)t[u]=e[a],u=u+1|0,a=a+1|0;return t}function te(e,n){for(;;){var r=n,t=e,u=t.length,a=u===0?1:u,o=r.length,i=a-o|0;if(i===0)return t.apply(null,r);if(i>=0)return(function(f,c){return function(d){return te(f,c.concat([d]))}})(t,r);n=ee(r,a,-i|0),e=t.apply(null,ee(r,0,a))}}function ye(e,n){var r=e.length;if(r===1)return e(n);switch(r){case 1:return e(n);case 2:return function(t){return e(n,t)};case 3:return function(t,u){return e(n,t,u)};case 4:return function(t,u,a){return e(n,t,u,a)};case 5:return function(t,u,a,o){return e(n,t,u,a,o)};case 6:return function(t,u,a,o,i){return e(n,t,u,a,o,i)};case 7:return function(t,u,a,o,i,f){return e(n,t,u,a,o,i,f)};default:return te(e,[n])}}function be(e){var n=e.length;return n===1?e:function(r){return ye(e,r)}}function j(e){return e!==void 0?e.h:0}function p(e,n,r,t){var u=j(e),a=j(t);return{k:n,v:r,h:u>=a?u+1|0:a+1|0,l:e,r:t}}function Te(e,n){return{k:e,v:n,h:1,l:void 0,r:void 0}}function Ae(e,n){return e.v===n?e:{k:e.k,v:n,h:e.h,l:e.l,r:e.r}}function k(e,n,r,t){var u=e!==void 0?e.h:0,a=t!==void 0?t.h:0;if(u>(a+2|0)){var o=e.l,i=e.r;return j(o)>=j(i)?p(o,e.k,e.v,p(i,n,r,t)):p(p(o,e.k,e.v,i.l),i.k,i.v,p(i.r,n,r,t))}if(a<=(u+2|0))return{k:n,v:r,h:u>=a?u+1|0:a+1|0,l:e,r:t};var f=t.l,c=t.r;return j(c)>=j(f)?p(p(e,n,r,f),t.k,t.v,c):p(p(e,n,r,f.l),f.k,f.v,p(f.r,t.k,t.v,c))}function ue(e,n,r){var t=e.l;return t!==void 0?k(ue(t,n,r),e.k,e.v,e.r):(n.contents=e.k,r.contents=e.v,e.r)}function Ce(e,n){for(;;){var r=e;if(r===void 0)return;var t=r.k;if(n===t)return Ee(r.v);e=n<t?r.l:r.r}}function T(e,n,r){if(e===void 0)return Te(n,r);var t=e.k;if(n===t)return Ae(e,r);var u=e.v;return n<t?k(T(e.l,n,r),t,u,e.r):k(e.l,t,u,T(e.r,n,r))}function x(e,n){var r=e.k,t=e.l,u=e.r;if(n===r){if(t===void 0)return u;if(u===void 0)return t;var a={contents:u.k},o={contents:u.v},i=ue(u,a,o);return k(t,a.contents,o.contents,i)}if(n<r){if(t===void 0)return e;var f=x(t,n);return f===t?e:k(f,r,e.v,u)}if(u===void 0)return e;var c=x(u,n);return k(t,r,e.v,c)}function je(e,n){if(e!==void 0)return x(e,n)}var A=Ce;function ne(e){if(e!==void 0)return v(e);throw{RE_EXN_ID:"Not_found",Error:new Error}}function m(e,n,r){var t=e!==void 0?e.h:0,u=r!==void 0?r.h:0;return{v:n,h:(t>=u?t:u)+1|0,l:e,r}}function ke(e){return{v:e,h:1,l:void 0,r:void 0}}function re(e,n){return n!==void 0?e!==void 0?e.h>=n.h:!1:!0}function O(e,n,r){var t=e!==void 0?e.h:0,u=r!==void 0?r.h:0;if(t>(u+2|0)){var a=e.l,o=e.r;return re(a,o)?m(a,e.v,m(o,n,r)):m(m(a,e.v,o.l),o.v,m(o.r,n,r))}if(u<=(t+2|0))return{v:n,h:(t>=u?t:u)+1|0,l:e,r};var i=r.l,f=r.r;return re(f,i)?m(m(e,n,i),r.v,f):m(m(e,n,i.l),i.v,m(i.r,r.v,f))}function ae(e,n){var r=e.l;return r!==void 0?O(ae(r,n),e.v,e.r):(n.contents=e.v,e.r)}function ie(e,n){for(;;){var r=e;if(r===void 0)return;ie(r.l,n),n(r.v),e=r.r}}function Oe(e,n){ie(e,be(n))}function Ie(e,n){for(;;){var r=e;if(r===void 0)return!1;var t=r.v;if(n===t)return!0;e=n<t?r.l:r.r}}function P(e,n){if(e===void 0)return ke(n);var r=e.v;if(n===r)return e;var t=e.l,u=e.r;if(n<r){var a=P(t,n);return a===t?e:O(a,r,u)}var o=P(u,n);return o===u?e:O(t,r,o)}function K(e,n){if(e===void 0)return e;var r=e.v,t=e.l,u=e.r;if(n===r){if(t===void 0)return u;if(u===void 0)return t;var a={contents:u.v},o=ae(u,a);return O(t,a.contents,o)}if(n<r){var i=K(t,n);return i===t?e:O(i,r,u)}var f=K(u,n);return f===u?e:O(t,r,f)}var Me=Ie,B=Oe,_={contents:void 0},h={contents:void 0},Ne={contents:void 0},s={contents:void 0},$={contents:void 0},N={contents:!1};function F(e){var n=A(h.contents,e);if(n===void 0){h.contents=T(h.contents,e,void 0);return}}function oe(e,n){F(n);var r=ne(A(_.contents,e));if(L(s.contents,e)&&Me(r.deps,n)===!1){r.deps=P(r.deps,n);var t=ne(A(h.contents,n));h.contents=T(h.contents,n,P(t,e))}}function R(e){B(e.deps,(function(n){var r=A(h.contents,n);if(r!==void 0){h.contents=T(h.contents,n,K(v(r),e.id));return}})),e.deps=void 0}function W(e){if($.contents=P($.contents,e),N.contents===!1){var n=$.contents;$.contents=void 0,B(n,(function(r){var t=A(_.contents,r);if(t!==void 0){R(t),s.contents=r,t.run(),s.contents=void 0;return}}))}}function fe(e){F(e);var n=A(h.contents,e);if(n!==void 0)return B(v(n),W)}function we(e){var n=s.contents;s.contents=void 0;var r=e();return s.contents=n,r}function Pe(e){var n=N.contents;N.contents=!0;var r=e();if(N.contents=n,$.contents!==void 0){var t=$.contents;$.contents=void 0,B(t,(function(u){W(u)}))}return r}var Re,Ge,De,Xe;const Ve=Object.freeze(Object.defineProperty({__proto__:null,Id:Xe,IntMap:Ge,IntSet:Re,Observer:De,addDep:oe,batch:Pe,batching:N,clearDeps:R,currentObserverId:s,ensureSignalBucket:F,notify:fe,observers:_,pending:$,schedule:W,signalObservers:h,signalPeeks:Ne,untrack:we},Symbol.toStringTag,{value:"Module"}));function M(e){var n=J(),r={id:n,kind:"Effect",run:(function(){e()}),deps:void 0};_.contents=T(_.contents,n,r),R(r),s.contents=n,r.run(),s.contents=void 0;var t=function(){var u=A(_.contents,n);if(u!==void 0){R(u),_.contents=je(_.contents,n);return}};return{dispose:t}}var Be,Fe,ze,Le,xe,Ke;const qe=Object.freeze(Object.defineProperty({__proto__:null,Core:Ke,Id:ze,IntMap:Fe,IntSet:Be,Observer:Le,Signal:xe,run:M},Symbol.toStringTag,{value:"Module"}));function H(e){var n=J();return F(n),{id:n,value:{contents:e},version:{contents:0}}}function y(e){var n=s.contents;return n!==void 0&&oe(n,e.id),e.value.contents}function V(e){return e.value.contents}function b(e,n){e.value.contents=n,e.version.contents=e.version.contents+1|0,fe(e.id)}function Je(e,n){b(e,n(e.value.contents))}var We,He,Ue,Qe,Ye;const Ze=Object.freeze(Object.defineProperty({__proto__:null,Core:Ye,Id:Qe,IntMap:He,IntSet:We,Observer:Ue,get:y,make:H,peek:V,set:b,update:Je},Symbol.toStringTag,{value:"Module"}));function I(e){var n=H(),r={contents:!1},t=J(),u=function(){var o=e();return r.contents===!1&&(r.contents=!0),b(n,o)},a={id:t,kind:{NAME:"Computed",VAL:n.id},run:u,deps:void 0};return _.contents=T(_.contents,t,a),R(a),s.contents=t,a.run(),s.contents=void 0,n}var en,nn,rn,tn,un,an;const on=Object.freeze(Object.defineProperty({__proto__:null,Core:tn,Id:an,IntMap:nn,IntSet:en,Observer:un,Signal:rn,make:I},Symbol.toStringTag,{value:"Module"}));function G(e,n){return[e,{TAG:"Static",_0:n}]}function ce(e,n){return[e,{TAG:"SignalValue",_0:n}]}function de(e,n){return[e,{TAG:"Compute",_0:n}]}function ve(e){return{TAG:"Text",_0:e}}function fn(e){var n=I(e);return{TAG:"SignalText",_0:n}}function U(e){return{TAG:"Fragment",_0:e}}function Q(e){return{TAG:"SignalFragment",_0:e}}function cn(e,n){var r=I(function(){return y(e).map(n)});return{TAG:"SignalFragment",_0:r}}function l(e,n,r,t,u){var a=n!==void 0?n:[].map(function(f){return f}),o=r!==void 0?r:[].map(function(f){return f}),i=t!==void 0?t:[].map(function(f){return f});return{TAG:"Element",tag:e,attrs:a,events:o,children:i}}function dn(e,n,r,t){return l("div",e,n,r)}function vn(e,n,r,t){return l("span",e,n,r)}function sn(e,n,r,t){return l("button",e,n,r)}function ln(e,n,r){return l("input",e,n,void 0)}function hn(e,n,r,t){return l("h1",e,n,r)}function pn(e,n,r,t){return l("h2",e,n,r)}function mn(e,n,r,t){return l("h3",e,n,r)}function _n(e,n,r,t){return l("p",e,n,r)}function gn(e,n,r,t){return l("ul",e,n,r)}function Sn(e,n,r,t){return l("li",e,n,r)}function se(e,n,r,t){return l("a",e,n,r)}function w(e){switch(e.TAG){case"Element":var n=document.createElement(e.tag);return e.attrs.forEach(function(i){var f=i[1],c=i[0];switch(f.TAG){case"Static":n.setAttribute(c,f._0);return;case"SignalValue":var d=f._0;n.setAttribute(c,V(d)),M(function(){var S=y(d);n.setAttribute(c,S)});return;case"Compute":var g=f._0,X=I(function(){return g()});n.setAttribute(c,V(X)),M(function(){var S=y(X);n.setAttribute(c,S)});return}}),e.events.forEach(function(i){n.addEventListener(i[0],i[1])}),e.children.forEach(function(i){var f=w(i);n.appendChild(f)}),n;case"Text":return document.createTextNode(e._0);case"SignalText":var r=e._0,t=document.createTextNode(V(r));return M(function(){var i=y(r);t.textContent=i}),t;case"Fragment":var u=document.createDocumentFragment();return e._0.forEach(function(i){var f=w(i);u.appendChild(f)}),u;case"SignalFragment":var a=e._0,o=document.createElement("div");return o.setAttribute("data-signal-fragment","true"),o.setAttribute("style","display: contents"),M(function(){var i=y(a);o.innerHTML="",i.forEach(function(f){var c=w(f);o.appendChild(c)})}),o}}function le(e,n){var r=w(e);n.appendChild(r)}function En(e,n){var r=document.getElementById(n);if(r==null){console.error("Container element not found: "+n);return}else return le(e,r)}var $n,yn,bn,Tn;const An=Object.freeze(Object.defineProperty({__proto__:null,Computed:Tn,Core:bn,Effect:yn,Signal:$n,a:se,attr:G,button:sn,computedAttr:de,div:dn,element:l,fragment:U,h1:hn,h2:pn,h3:mn,input:ln,li:Sn,list:cn,mount:le,mountById:En,p:_n,render:w,signalAttr:ce,signalFragment:Q,span:vn,text:ve,textSignal:fn,ul:gn},Symbol.toStringTag,{value:"Module"}));function Cn(e,n){return e(n)}function jn(e,n){return e(n)}function kn(e,n,r,t){return e(n)}function On(e,n,r,t){return e(n)}function In(e){var n=e.children;return n!==void 0?n:U([])}function Mn(e){return U(e)}function Nn(){return ve("")}function wn(e){return e}function Pn(e){return e}function E(e,n){return typeof n=="function"?de(e,n):typeof n=="object"&&$e(n.id)?ce(e,n):G(e,n)}function he(e){var n=[],r=e.id;r!==void 0&&n.push(E("id",v(r)));var t=e.class;t!==void 0&&n.push(E("class",v(t)));var u=e.style;u!==void 0&&n.push(E("style",v(u)));var a=e.type;a!==void 0&&n.push(E("type",v(a)));var o=e.value;o!==void 0&&n.push(E("value",v(o)));var i=e.placeholder;i!==void 0&&n.push(E("placeholder",v(i)));var f=e.disabled;f!==void 0&&f&&n.push(G("disabled","true"));var c=e.checked;c!==void 0&&c&&n.push(G("checked","true"));var d=e.href;d!==void 0&&n.push(E("href",v(d)));var g=e.target;return g!==void 0&&n.push(E("target",v(g))),n}function pe(e){var n=[],r=e.onClick;r!==void 0&&n.push(["click",r]);var t=e.onInput;t!==void 0&&n.push(["input",t]);var u=e.onChange;u!==void 0&&n.push(["change",u]);var a=e.onSubmit;a!==void 0&&n.push(["submit",a]);var o=e.onFocus;o!==void 0&&n.push(["focus",o]);var i=e.onBlur;i!==void 0&&n.push(["blur",i]);var f=e.onKeyDown;f!==void 0&&n.push(["keydown",f]);var c=e.onKeyUp;c!==void 0&&n.push(["keyup",c]);var d=e.onMouseEnter;d!==void 0&&n.push(["mouseenter",d]);var g=e.onMouseLeave;return g!==void 0&&n.push(["mouseleave",g]),n}function me(e){var n=e.children;return n!==void 0?n.TAG==="Fragment"?n._0:[n]:[]}function D(e,n){return{TAG:"Element",tag:e,attrs:he(n),events:pe(n),children:me(n)}}function Rn(e,n){return D(e,n)}function Gn(e,n){return D(e,n)}function Dn(e,n,r,t){return D(e,n)}function Xn(e,n,r,t){return D(e,n)}var Vn={signal:wn,computed:Pn,convertAttrValue:E,propsToAttrs:he,propsToEvents:pe,getChildren:me,createElement:D,jsx:Rn,jsxs:Gn,jsxKeyed:Dn,jsxsKeyed:Xn},Bn;const Fn=Object.freeze(Object.defineProperty({__proto__:null,$$null:Nn,Component:Bn,Elements:Vn,array:Mn,jsx:Cn,jsxFragment:In,jsxKeyed:kn,jsxs:jn,jsxsKeyed:On},Symbol.toStringTag,{value:"Module"}));function zn(e,n){for(var r=e.length,t=new Array(r),u=0,a=0;a<r;++a){var o=e[a],i=n(o);i!==void 0&&(t[u]=v(i),u=u+1|0)}return t.length=u,t}function Ln(e,n){for(var r=0;;){var t=r;if(t===e.length)return;var u=n(e[t]);if(u!==void 0)return u;r=t+1|0}}function _e(e){return zn(e.split("/"),(function(n){if(n!=="")return n.startsWith(":")?{TAG:"Param",_0:n.slice(1)}:{TAG:"Static",_0:n}}))}function ge(e,n){var r=n.split("/").filter(function(a){return a!==""});if(e.length!==r.length)return"NoMatch";var t={},u=e.every(function(a,o){var i=r[o];return a.TAG==="Static"?i===a._0:(t[a._0]=i,!0)});return u?{TAG:"Match",_0:t}:"NoMatch"}function Y(e,n){return ge(_e(e),n)}const xn=Object.freeze(Object.defineProperty({__proto__:null,match:Y,matchPath:ge,parsePattern:_e},Symbol.toStringTag,{value:"Module"}));var C=H({pathname:"/",search:"",hash:""});function q(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Kn(){b(C,q());var e=function(n){b(C,q())};window.addEventListener("popstate",e)}function Se(e,n,r,t){var u=n!==void 0?n:"",a=r!==void 0?r:"",o={pathname:e,search:u,hash:a},i=e+u+a,f={};window.history.pushState(f,"",i),b(C,o)}function qn(e,n,r,t){var u=n!==void 0?n:"",a=r!==void 0?r:"",o={pathname:e,search:u,hash:a},i=e+u+a,f={};window.history.replaceState(f,"",i),b(C,o)}function Jn(e,n){return Q(I(function(){var r=y(C),t=Y(e,r.pathname);return typeof t!="object"?[]:[n(t._0)]}))}function Wn(e){return Q(I(function(){var n=y(C),r=Ln(e,(function(t){var u=Y(t.pattern,n.pathname);if(typeof u=="object")return t.render(u._0)}));return r!==void 0?[r]:[]}))}function Hn(e,n,r,t){var u=n!==void 0?n:[],a=r!==void 0?r:[],o=function(i){i.preventDefault(),Se(e,void 0,void 0)};return se(u.concat([G("href",e)]),[["click",o]],a)}var Un,Qn,Yn,Zn,er;const nr=Object.freeze(Object.defineProperty({__proto__:null,$$location:C,Component:Yn,Computed:Qn,Core:er,Route:Zn,Signal:Un,getCurrentLocation:q,init:Kn,link:Hn,push:Se,replace:qn,route:Jn,routes:Wn},Symbol.toStringTag,{value:"Module"}));var rr=An,tr=on,ur=Ve,ar=qe,ir=Fn,or=xn,fr=nr,cr=Ze;exports.Component=rr;exports.Computed=tr;exports.Core=ur;exports.Effect=ar;exports.JSX=ir;exports.Route=or;exports.Router=fr;exports.Signal=cr;