sigmx 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -43
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +2 -2
- package/dist/kernel/compile.d.ts +8 -9
- package/dist/kernel/compile.js +102 -67
- package/dist/kernel/compile.js.map +2 -2
- package/dist/kernel/contracts.d.ts +12 -13
- package/dist/kernel/index.d.ts +11 -12
- package/dist/kernel/index.js +14 -12
- package/dist/kernel/index.js.map +3 -3
- package/dist/kernel/precompile.d.ts +8 -12
- package/dist/kernel/precompile.js +33 -76
- package/dist/kernel/precompile.js.map +2 -2
- package/dist/kernel/precompiled.d.ts +7 -4
- package/dist/kernel/precompiled.js +5 -5
- package/dist/kernel/precompiled.js.map +2 -2
- package/dist/kernel/reactive.d.ts +13 -11
- package/dist/kernel/reactive.js +96 -71
- package/dist/kernel/reactive.js.map +3 -3
- package/dist/kernel/runtime.js +85 -63
- package/dist/kernel/runtime.js.map +3 -3
- package/dist/kernel/scan.d.ts +2 -11
- package/dist/kernel/scan.js +26 -9
- package/dist/kernel/scan.js.map +2 -2
- package/dist/kernel/state.d.ts +5 -8
- package/dist/kernel/state.js +114 -76
- package/dist/kernel/state.js.map +2 -2
- package/dist/kernel/strict-csp.d.ts +0 -5
- package/dist/kernel/strict-csp.js +2 -2
- package/dist/kernel/strict-csp.js.map +2 -2
- package/dist/lib/casing.d.ts +4 -1
- package/dist/lib/casing.js +8 -1
- package/dist/lib/casing.js.map +2 -2
- package/dist/lib/objects.d.ts +5 -4
- package/dist/lib/objects.js +13 -5
- package/dist/lib/objects.js.map +2 -2
- package/dist/lib/schedule.d.ts +3 -5
- package/dist/lib/schedule.js +12 -10
- package/dist/lib/schedule.js.map +2 -2
- package/dist/lib/sse.d.ts +10 -1
- package/dist/lib/sse.js +32 -28
- package/dist/lib/sse.js.map +2 -2
- package/dist/plugins/def.d.ts +5 -0
- package/dist/plugins/def.js +22 -0
- package/dist/plugins/def.js.map +7 -0
- package/dist/plugins/directives/attribute-sync.js +8 -12
- package/dist/plugins/directives/attribute-sync.js.map +2 -2
- package/dist/plugins/directives/boost.d.ts +1 -1
- package/dist/plugins/directives/boost.js +34 -30
- package/dist/plugins/directives/boost.js.map +2 -2
- package/dist/plugins/directives/busy-flag.js +13 -16
- package/dist/plugins/directives/busy-flag.js.map +2 -2
- package/dist/plugins/directives/class-toggle.js +17 -16
- package/dist/plugins/directives/class-toggle.js.map +2 -2
- package/dist/plugins/directives/cloak.js +2 -7
- package/dist/plugins/directives/cloak.js.map +2 -2
- package/dist/plugins/directives/collapse.js +36 -37
- package/dist/plugins/directives/collapse.js.map +2 -2
- package/dist/plugins/directives/declare.js +5 -8
- package/dist/plugins/directives/declare.js.map +2 -2
- package/dist/plugins/directives/derive.js +9 -15
- package/dist/plugins/directives/derive.js.map +2 -2
- package/dist/plugins/directives/element-ref.js +8 -8
- package/dist/plugins/directives/element-ref.js.map +2 -2
- package/dist/plugins/directives/event-listener.js +18 -23
- package/dist/plugins/directives/event-listener.js.map +2 -2
- package/dist/plugins/directives/frame-loop.js +9 -14
- package/dist/plugins/directives/frame-loop.js.map +2 -2
- package/dist/plugins/directives/html.js +6 -7
- package/dist/plugins/directives/html.js.map +2 -2
- package/dist/plugins/directives/inline-style.js +17 -20
- package/dist/plugins/directives/inline-style.js.map +2 -2
- package/dist/plugins/directives/mask.js +19 -23
- package/dist/plugins/directives/mask.js.map +2 -2
- package/dist/plugins/directives/media-query.d.ts +4 -1
- package/dist/plugins/directives/media-query.js +13 -12
- package/dist/plugins/directives/media-query.js.map +2 -2
- package/dist/plugins/directives/on-mount.js +4 -9
- package/dist/plugins/directives/on-mount.js.map +2 -2
- package/dist/plugins/directives/patch-listener.js +24 -19
- package/dist/plugins/directives/patch-listener.js.map +2 -2
- package/dist/plugins/directives/remove-me.js +7 -8
- package/dist/plugins/directives/remove-me.js.map +2 -2
- package/dist/plugins/directives/scroll-to.d.ts +4 -1
- package/dist/plugins/directives/scroll-to.js +8 -14
- package/dist/plugins/directives/scroll-to.js.map +2 -2
- package/dist/plugins/directives/size-watch.js +7 -12
- package/dist/plugins/directives/size-watch.js.map +2 -2
- package/dist/plugins/directives/state-dump.js +6 -10
- package/dist/plugins/directives/state-dump.js.map +2 -2
- package/dist/plugins/directives/storage-sync.js +13 -9
- package/dist/plugins/directives/storage-sync.js.map +2 -2
- package/dist/plugins/directives/teleport.js +8 -14
- package/dist/plugins/directives/teleport.js.map +2 -2
- package/dist/plugins/directives/text-content.js +6 -7
- package/dist/plugins/directives/text-content.js.map +2 -2
- package/dist/plugins/directives/timer.js +7 -13
- package/dist/plugins/directives/timer.js.map +2 -2
- package/dist/plugins/directives/transition.d.ts +1 -2
- package/dist/plugins/directives/transition.js +32 -34
- package/dist/plugins/directives/transition.js.map +2 -2
- package/dist/plugins/directives/tween.d.ts +2 -2
- package/dist/plugins/directives/tween.js +34 -50
- package/dist/plugins/directives/tween.js.map +2 -2
- package/dist/plugins/directives/two-way-bind.d.ts +1 -1
- package/dist/plugins/directives/two-way-bind.js +70 -67
- package/dist/plugins/directives/two-way-bind.js.map +2 -2
- package/dist/plugins/directives/url-params.js +36 -59
- package/dist/plugins/directives/url-params.js.map +3 -3
- package/dist/plugins/directives/url-replace.js +6 -7
- package/dist/plugins/directives/url-replace.js.map +2 -2
- package/dist/plugins/directives/validity.js +6 -9
- package/dist/plugins/directives/validity.js.map +2 -2
- package/dist/plugins/directives/viewport.js +18 -23
- package/dist/plugins/directives/viewport.js.map +2 -2
- package/dist/plugins/directives/visibility.js +9 -14
- package/dist/plugins/directives/visibility.js.map +2 -2
- package/dist/plugins/directives/watch.d.ts +0 -1
- package/dist/plugins/directives/watch.js +2 -8
- package/dist/plugins/directives/watch.js.map +2 -2
- package/dist/plugins/functions/bulk-set.js +10 -7
- package/dist/plugins/functions/bulk-set.js.map +2 -2
- package/dist/plugins/functions/bulk-toggle.js +10 -7
- package/dist/plugins/functions/bulk-toggle.js.map +2 -2
- package/dist/plugins/functions/confirm.js +2 -2
- package/dist/plugins/functions/confirm.js.map +2 -2
- package/dist/plugins/functions/copy-text.js +5 -5
- package/dist/plugins/functions/copy-text.js.map +2 -2
- package/dist/plugins/functions/dispatch.js +5 -5
- package/dist/plugins/functions/dispatch.js.map +2 -2
- package/dist/plugins/functions/locale-format.d.ts +4 -1
- package/dist/plugins/functions/locale-format.js +9 -16
- package/dist/plugins/functions/locale-format.js.map +2 -2
- package/dist/plugins/functions/range-map.js +6 -6
- package/dist/plugins/functions/range-map.js.map +2 -2
- package/dist/plugins/functions/request.d.ts +7 -3
- package/dist/plugins/functions/request.js +85 -80
- package/dist/plugins/functions/request.js.map +2 -2
- package/dist/plugins/functions/untracked-read.js +3 -2
- package/dist/plugins/functions/untracked-read.js.map +2 -2
- package/dist/plugins/functions/websocket.d.ts +3 -3
- package/dist/plugins/functions/websocket.js +18 -25
- package/dist/plugins/functions/websocket.js.map +2 -2
- package/dist/plugins/index.d.ts +34 -36
- package/dist/plugins/index.js +31 -35
- package/dist/plugins/index.js.map +2 -2
- package/dist/plugins/server-events/apply-elements.d.ts +1 -1
- package/dist/plugins/server-events/apply-elements.js +41 -40
- package/dist/plugins/server-events/apply-elements.js.map +2 -2
- package/dist/plugins/server-events/apply-state.js +9 -12
- package/dist/plugins/server-events/apply-state.js.map +2 -2
- package/dist/plugins/server-events/morph.d.ts +0 -2
- package/dist/plugins/server-events/morph.js +58 -55
- package/dist/plugins/server-events/morph.js.map +3 -3
- package/dist/presets/all.d.ts +0 -1
- package/dist/presets/all.js +22 -26
- package/dist/presets/all.js.map +2 -2
- package/dist/presets/essentials.d.ts +0 -1
- package/dist/presets/essentials.js +27 -9
- package/dist/presets/essentials.js.map +2 -2
- package/dist/presets/minimal.d.ts +0 -1
- package/dist/presets/minimal.js +2 -2
- package/dist/presets/minimal.js.map +2 -2
- package/dist/server.d.ts +108 -0
- package/dist/server.js +218 -0
- package/dist/server.js.map +7 -0
- package/dist/sigmx.standalone.js +1 -1
- package/dist/standalone.js.map +2 -2
- package/dist/vite.d.ts +2 -2
- package/dist/vite.js +48 -15
- package/dist/vite.js.map +2 -2
- package/package.json +21 -2
- package/dist/auto.d.ts +0 -1
- package/dist/auto.js +0 -7
- package/dist/auto.js.map +0 -7
- package/dist/core/csp.d.ts +0 -7
- package/dist/core/csp.js +0 -20
- package/dist/core/csp.js.map +0 -7
- package/dist/core/engine.d.ts +0 -10
- package/dist/core/engine.js +0 -200
- package/dist/core/engine.js.map +0 -7
- package/dist/core/expr.d.ts +0 -12
- package/dist/core/expr.js +0 -94
- package/dist/core/expr.js.map +0 -7
- package/dist/core/index.d.ts +0 -16
- package/dist/core/index.js +0 -46
- package/dist/core/index.js.map +0 -7
- package/dist/core/signals.d.ts +0 -42
- package/dist/core/signals.js +0 -195
- package/dist/core/signals.js.map +0 -7
- package/dist/core/store.d.ts +0 -32
- package/dist/core/store.js +0 -185
- package/dist/core/store.js.map +0 -7
- package/dist/core/types.d.ts +0 -101
- package/dist/core/types.js +0 -1
- package/dist/core/types.js.map +0 -7
- package/dist/plugins/actions/clipboard.d.ts +0 -2
- package/dist/plugins/actions/clipboard.js +0 -11
- package/dist/plugins/actions/clipboard.js.map +0 -7
- package/dist/plugins/actions/fit.d.ts +0 -2
- package/dist/plugins/actions/fit.js +0 -14
- package/dist/plugins/actions/fit.js.map +0 -7
- package/dist/plugins/actions/intl.d.ts +0 -2
- package/dist/plugins/actions/intl.js +0 -21
- package/dist/plugins/actions/intl.js.map +0 -7
- package/dist/plugins/actions/peek.d.ts +0 -2
- package/dist/plugins/actions/peek.js +0 -6
- package/dist/plugins/actions/peek.js.map +0 -7
- package/dist/plugins/actions/setAll.d.ts +0 -2
- package/dist/plugins/actions/setAll.js +0 -11
- package/dist/plugins/actions/setAll.js.map +0 -7
- package/dist/plugins/actions/toggleAll.d.ts +0 -2
- package/dist/plugins/actions/toggleAll.js +0 -11
- package/dist/plugins/actions/toggleAll.js.map +0 -7
- package/dist/plugins/attributes/attr.d.ts +0 -2
- package/dist/plugins/attributes/attr.js +0 -20
- package/dist/plugins/attributes/attr.js.map +0 -7
- package/dist/plugins/attributes/bind.d.ts +0 -6
- package/dist/plugins/attributes/bind.js +0 -81
- package/dist/plugins/attributes/bind.js.map +0 -7
- package/dist/plugins/attributes/class.d.ts +0 -2
- package/dist/plugins/attributes/class.js +0 -22
- package/dist/plugins/attributes/class.js.map +0 -7
- package/dist/plugins/attributes/computed.d.ts +0 -2
- package/dist/plugins/attributes/computed.js +0 -20
- package/dist/plugins/attributes/computed.js.map +0 -7
- package/dist/plugins/attributes/customValidity.d.ts +0 -2
- package/dist/plugins/attributes/customValidity.js +0 -14
- package/dist/plugins/attributes/customValidity.js.map +0 -7
- package/dist/plugins/attributes/effect.d.ts +0 -2
- package/dist/plugins/attributes/effect.js +0 -12
- package/dist/plugins/attributes/effect.js.map +0 -7
- package/dist/plugins/attributes/indicator.d.ts +0 -2
- package/dist/plugins/attributes/indicator.js +0 -20
- package/dist/plugins/attributes/indicator.js.map +0 -7
- package/dist/plugins/attributes/init.d.ts +0 -2
- package/dist/plugins/attributes/init.js +0 -14
- package/dist/plugins/attributes/init.js.map +0 -7
- package/dist/plugins/attributes/jsonSignals.d.ts +0 -2
- package/dist/plugins/attributes/jsonSignals.js +0 -15
- package/dist/plugins/attributes/jsonSignals.js.map +0 -7
- package/dist/plugins/attributes/matchMedia.d.ts +0 -2
- package/dist/plugins/attributes/matchMedia.js +0 -19
- package/dist/plugins/attributes/matchMedia.js.map +0 -7
- package/dist/plugins/attributes/on.d.ts +0 -5
- package/dist/plugins/attributes/on.js +0 -28
- package/dist/plugins/attributes/on.js.map +0 -7
- package/dist/plugins/attributes/onIntersect.d.ts +0 -2
- package/dist/plugins/attributes/onIntersect.js +0 -28
- package/dist/plugins/attributes/onIntersect.js.map +0 -7
- package/dist/plugins/attributes/onInterval.d.ts +0 -2
- package/dist/plugins/attributes/onInterval.js +0 -18
- package/dist/plugins/attributes/onInterval.js.map +0 -7
- package/dist/plugins/attributes/onRaf.d.ts +0 -1
- package/dist/plugins/attributes/onRaf.js +0 -19
- package/dist/plugins/attributes/onRaf.js.map +0 -7
- package/dist/plugins/attributes/onResize.d.ts +0 -1
- package/dist/plugins/attributes/onResize.js +0 -17
- package/dist/plugins/attributes/onResize.js.map +0 -7
- package/dist/plugins/attributes/onSignalPatch.d.ts +0 -5
- package/dist/plugins/attributes/onSignalPatch.js +0 -35
- package/dist/plugins/attributes/onSignalPatch.js.map +0 -7
- package/dist/plugins/attributes/persist.d.ts +0 -6
- package/dist/plugins/attributes/persist.js +0 -16
- package/dist/plugins/attributes/persist.js.map +0 -7
- package/dist/plugins/attributes/queryString.d.ts +0 -5
- package/dist/plugins/attributes/queryString.js +0 -54
- package/dist/plugins/attributes/queryString.js.map +0 -7
- package/dist/plugins/attributes/ref.d.ts +0 -2
- package/dist/plugins/attributes/ref.js +0 -13
- package/dist/plugins/attributes/ref.js.map +0 -7
- package/dist/plugins/attributes/replaceUrl.d.ts +0 -1
- package/dist/plugins/attributes/replaceUrl.js +0 -11
- package/dist/plugins/attributes/replaceUrl.js.map +0 -7
- package/dist/plugins/attributes/scrollIntoView.d.ts +0 -2
- package/dist/plugins/attributes/scrollIntoView.js +0 -19
- package/dist/plugins/attributes/scrollIntoView.js.map +0 -7
- package/dist/plugins/attributes/show.d.ts +0 -2
- package/dist/plugins/attributes/show.js +0 -19
- package/dist/plugins/attributes/show.js.map +0 -7
- package/dist/plugins/attributes/signals.d.ts +0 -2
- package/dist/plugins/attributes/signals.js +0 -13
- package/dist/plugins/attributes/signals.js.map +0 -7
- package/dist/plugins/attributes/style.d.ts +0 -2
- package/dist/plugins/attributes/style.js +0 -25
- package/dist/plugins/attributes/style.js.map +0 -7
- package/dist/plugins/attributes/text.d.ts +0 -1
- package/dist/plugins/attributes/text.js +0 -13
- package/dist/plugins/attributes/text.js.map +0 -7
- package/dist/plugins/attributes/viewTransition.d.ts +0 -1
- package/dist/plugins/attributes/viewTransition.js +0 -11
- package/dist/plugins/attributes/viewTransition.js.map +0 -7
- package/dist/plugins/directives/transition-name.d.ts +0 -1
- package/dist/plugins/directives/transition-name.js +0 -11
- package/dist/plugins/directives/transition-name.js.map +0 -7
- package/dist/plugins/directives/trap.d.ts +0 -5
- package/dist/plugins/directives/trap.js +0 -48
- package/dist/plugins/directives/trap.js.map +0 -7
- package/dist/sigmx.auto.js +0 -5
- package/dist/utils/object.d.ts +0 -9
- package/dist/utils/object.js +0 -26
- package/dist/utils/object.js.map +0 -7
- package/dist/utils/text.d.ts +0 -7
- package/dist/utils/text.js +0 -15
- package/dist/utils/text.js.map +0 -7
- package/dist/utils/timing.d.ts +0 -14
- package/dist/utils/timing.js +0 -58
- package/dist/utils/timing.js.map +0 -7
package/dist/sigmx.standalone.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t,n=(e,t)=>Function(...e,t),r=new Map,a=e=>/[A-Za-z0-9_$]/.test(e),i=(e,t)=>{let n=0,r=e.length;for(;n<r;){let a=e[n],i=e[n+1];if('"'===a||"'"===a||"`"===a){let i=n+1;for(;i<r&&e[i]!==a;)i+="\\"===e[i]?2:1;t(e.slice(n,i+1),n),n=i+1}else if("/"===a&&"/"===i){let t=e.indexOf("\n",n);n=t<0?r:t}else if("/"===a&&"*"===i){let t=e.indexOf("*/",n+2);n=t<0?r:t+2}else n+=t(a,n)||1}},l=e=>(t,n,l)=>((e,t,n,l)=>{let o=`${+l}|${n.join()}|${t}`,s=r.get(o);if(s)return s;let u,d=(e=>{let t="";return i(e,(n,r)=>{if("@"===n){let n=r+1;for(;n<e.length&&a(e[n]);)n++;let i=n;for(;i<e.length&&/\s/.test(e[i]);)i++;if(n>r+1&&"("===e[i])return t+=`__a.${e.slice(r+1,n)}(`,i+1-r}t+=n}),t})(t.trim()),c=t=>e(["$","__a",...n],`with($.scope){${t}\n}`);if(l)try{u=c(`return(${d}\n)`)}catch{let e=(e=>{let t=[],n=0,r=0;return i(e,(a,i)=>{a.length>1||("([{".includes(a)?n++:")]}".includes(a)?n--:";"===a&&!n&&(t.push(e.slice(r,i)),r=i+1))}),t.push(e.slice(r)),t.filter(e=>e.trim())})(d),t=e.pop()??"";try{u=c(`${e.join(";")};return(${t}\n)`)}catch{u=c(d)}}else u=c(d);return r.set(o,u),u})(e,t,n,l),o=0,s=!1,u=new Set,d=new Set,c=class{e;i=0;s=new Set;constructor(e){this.e=e}get value(){return e&&(e.t.set(this,this.i),this.s.add(e)),this.e}set value(e){Object.is(e,this.e)||(this.e=e,this.bump())}peek(){return this.e}bump(){this.i++;for(let e of this.s)e.u();o||w()}},f=e=>{for(let t of e.t.keys())t.s.delete(e);e.t.clear()},m=e=>{for(let[t,n]of e.t)if(t instanceof p&&t.f(),t.i!==n)return!0;return!1},h=(t,n)=>{f(t);let r=e;e=t;try{return n()}finally{e=r}},p=class extends c{t=new Map;c=!0;r;constructor(e){super(void 0),this.r=e}f(){if(!this.c||(this.c=!1,this.t.size&&!m(this)))return;let e=h(this,this.r);Object.is(e,this.e)||(this.e=e,this.i++)}get value(){return this.f(),super.value}set value(e){throw new Error("computed signals are read-only")}peek(){return this.f(),this.e}u(){if(!this.c){this.c=!0;for(let e of this.s)e.u()}}},g=class{t=new Map;d=!1;p=!1;o=new Set;r;m;constructor(e,t){this.r=e,this.m=t}u(){!this.p&&!this.d&&(this.d=!0,u.add(this))}b(){if(this.d=!1,this.p||this.t.size&&!m(this))return;for(let e of this.o)e.g();this.o.clear();let e=t;t=this,o++;try{h(this,this.r)}catch(e){if(!this.m)throw e;this.m(e)}finally{o--,t=e}}g(){this.p=!0,f(this);for(let e of this.o)e.g();this.o.clear(),u.delete(this)}},v=e=>new p(e),y=e=>{o++;try{return e()}finally{--o||w()}},b=t=>{let n=e;e=void 0;try{return t()}finally{e=n}},w=()=>{if(!s&&!o){s=!0;try{let e=0;for(;u.size;){if(++e>1e5)throw new Error("effect loop");let t=u.values().next().value;u.delete(t),t.b()}}finally{s=!1}for(let e of d)e()}},S=e=>{if(null===e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||null===t},k=(e,t,n)=>{let r=t.split("."),a=r.pop(),i=e;for(let e of r)i=S(i[e])?i[e]:i[e]={};return i[a]=n,e},x=(e,t)=>void 0===e?t:"string"==typeof e?new RegExp(e.replace(/^\/|\/$/g,"")):e,A=e=>{if("function"==typeof e)return e;let t=x(e?.include,/(?:)/),n=x(e?.exclude,/(?!)/);return e=>t.test(e)&&!n.test(e)},E=e=>e.slice(0,Math.max(0,e.lastIndexOf("."))),T=e=>e.slice(e.lastIndexOf(".")+1),$=(e,t)=>e?`${e}.${t}`:t,M=(e,t)=>!t||e===t||e.startsWith(`${t}.`),L=e=>"string"==typeof e,q=()=>{let e=new Map,t=new Map([["",new Set]]),n=new c(0),r=new Map,a=new Set,i=new Map,l=new WeakMap,o=r=>{let a=t.get(r);return a||(e.has(r)&&s(r),t.set(r,a=new Set),o(E(r)).add(T(r)),n.bump()),a},s=a=>{let i=e.get(a);i&&(e.delete(a),t.get(E(a))?.delete(T(a)),r.set(a,null),i.bump(),n.bump())},u=e=>{let r=t.get(e);if(r){for(let t of[...r])f($(e,t));e&&(t.delete(e),t.get(E(e))?.delete(T(e)),i.delete(e)),n.bump()}},f=e=>y(()=>{s(e),u(e)}),m=(r,a)=>y(()=>{t.has(r)&&u(r);let i=e.get(r);e.set(r,a),o(E(r)).add(T(r)),i?.bump(),n.bump()}),h=(n,a)=>y(()=>{if(null==a)return f(n);if(S(a)){let e=o(n);for(let t of[...e])t in a||f($(n,t));for(let e in a)h($(n,e),a[e]);return}t.has(n)&&u(n);let i=e.get(n);if(i instanceof p)throw new Error(`"${n}" is a computed signal and cannot be assigned`);if(i){if(Object.is(i.peek(),a))return;i.value=a}else m(n,new c(a));r.set(n,a)}),g=(n,{at:r="",ifMissing:a=!1}={})=>y(()=>{if(S(n)){o(r);for(let i in n){let l=$(r,i),o=n[i];null===o?a||f(l):S(o)?g(o,{at:l,ifMissing:a}):(!a||!e.has(l)&&!t.has(l))&&!(e.get(l)instanceof p)&&h(l,o)}}}),v=a=>{let i=e.get(a);if(i){let e=i.value;return Array.isArray(e)?((e,t,n)=>{let a=l.get(e);if(!a){let i=()=>{r.set(n,e),t.bump()};a=new Proxy(e,{set:(e,t,n)=>(e[t]=n,i(),!0),deleteProperty:(e,t)=>(delete e[t],i(),!0)}),l.set(e,a)}return a})(e,i,a):e}if(t.has(a))return b(a);n.value},b=e=>{let r=i.get(e);if(!r){let a=()=>(n.value,t.get(e));r=new Proxy({},{get:(t,n)=>L(n)?"toJSON"===n?()=>x(void 0,{at:e}):v($(e,n)):void 0,set:(t,n,r)=>(L(n)&&h($(e,n),r),!0),deleteProperty:(t,n)=>(L(n)&&f($(e,n)),!0),has:(e,t)=>L(t)&&!!a()?.has(t),ownKeys:()=>[...a()??[]],getOwnPropertyDescriptor:(t,n)=>L(n)&&a()?.has(n)?{enumerable:!0,configurable:!0,writable:!0,value:v($(e,n))}:void 0}),i.set(e,r)}return r},w=new Proxy({},{has:(e,t)=>L(t)&&"$"===t[0],get:(e,t)=>L(t)?"$"===t?b(""):v(t.slice(1)):void 0,set:(e,t,n)=>(L(t)&&("$"===t?g(n):h(t.slice(1),n)),!0)}),x=(r,{at:a="",computed:i=!0}={})=>{n.value;let l=A(r),o={},s=e=>a?e.slice(a.length+1):e;for(let[t,n]of e)!M(t,a)||!l(t)||!i&&n instanceof p||k(o,s(t),n.value);for(let e of t.keys())e&&e!==a&&M(e,a)&&l(e)&&!t.get(e).size&&k(o,s(e),{});return o};return d.add(()=>{if(!r.size)return;let e={};for(let[t,n]of r)k(e,t,n);r.clear();for(let t of a)t(e)}),{get:v,set:h,merge:g,remove:f,has:n=>e.has(n)||t.has(n),define:m,paths:t=>{n.value;let r=A(t);return[...e.keys()].filter(r)},snapshot:x,onPatch:e=>(a.add(e),()=>a.delete(e)),get $(){return b("")},scope:w}},O=e=>e.replace(/([a-z0-9])([A-Z])|([A-Z]+)([A-Z][a-z])/g,"$1$3 $2$4").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.toLowerCase()),P=e=>e[0].toUpperCase()+e.slice(1),N=e=>O(e).join("-"),j=e=>O(e).map((e,t)=>t?P(e):e).join(""),H={camel:j,kebab:N,snake:e=>O(e).join("_"),pascal:e=>O(e).map(P).join("")},C=e=>e instanceof HTMLElement||e instanceof SVGElement||e instanceof MathMLElement,R=e=>C(e)?[e,...e.querySelectorAll("*")]:e instanceof ShadowRoot?[...e.querySelectorAll("*")]:[],I=new Map,V=(e,t=0)=>{for(let t of e??[]){let e=/^(\d+(?:\.\d+)?)(ms|s)?$/.exec(t);if(e)return+e[1]*("s"===e[2]?1e3:1)}return t},z=(e,t,n,r,a)=>{let i,l,o=()=>{i=void 0,r&&l&&e(...l),l=void 0};return(...r)=>{if(i)return l=r,void(a&&(clearTimeout(i),i=setTimeout(o,t)));n?e(...r):l=r,i=setTimeout(o,t)}},D=(e,t)=>{let n=t.get("delay");n&&(e=((e,t)=>(...n)=>{setTimeout(e,t,...n)})(e,V(n)));let r=t.get("debounce");r&&(e=((e,t,n=!1,r=!0)=>z(e,t,n,r,!0))(e,V(r,300),r.includes("leading"),!r.includes("notrailing")));let a=t.get("throttle");return a&&(e=((e,t,n=!0,r=!1)=>z(e,t,n,r,!1))(e,V(a,300),!a.includes("noleading"),a.includes("trailing"))),e},B=(e,t)=>t.has("viewtransition")&&"startViewTransition"in document?(...t)=>{document.startViewTransition(()=>e(...t))}:e,F=e=>({type:"attribute",...e}),U=e=>({type:"action",...e}),W=e=>({type:"handler",...e}),J=(e,t,n)=>{!1===n||null==n?e.removeAttribute(t):e.setAttribute(t,!0===n?"":"object"==typeof n?JSON.stringify(n):String(n))},_=F({name:"attr",value:"required",mount({el:e,key:t,cased:n,evaluate:r,effect:a}){a(()=>{if(t)return J(e,n("kebab"),r());let a=r();for(let t in a)J(e,t,a[t])})}}),Z=(e,t,...n)=>({l:e,h:t,y:n}),K=F({name:"bind",mount({el:e,key:t,value:n,cased:r,mods:a,store:i,listen:l,effect:o}){let s,u=t?r():n.trim(),d=()=>i.get(u),c=e=>"number"==typeof d()?+e:e,f=a.get("prop")?.[0];if(f)s=Z(()=>e[f],t=>e[f]=t,"input","change");else if(e instanceof HTMLInputElement){let t=e.type;if("checkbox"===t){let t=e.hasAttribute("value")&&"on"!==e.value;s={l:()=>{let n=d();if(Array.isArray(n)){let t=new Set(n);return e.checked?t.add(e.value):t.delete(e.value),[...t]}return t?e.checked?e.value:"":e.checked},h:n=>{e.checked=Array.isArray(n)?n.includes(e.value):t?n===e.value:!!n},y:["input"]}}else if("radio"===t)e.name||(e.name=u),s=Z(()=>e.checked?c(e.value):d(),t=>e.checked=String(t)===e.value,"input");else{if("file"===t)return void l(e,"change",()=>(e=>Promise.all([...e.files??[]].map(e=>new Promise(t=>{let n=new FileReader;n.onloadend=()=>t({name:e.name,type:e.type,size:e.size,contents:String(n.result).split(",")[1]??""}),n.readAsDataURL(e)}))))(e).then(e=>i.set(u,e)));s=Z("number"===t||"range"===t?()=>""===e.value?"":+e.value:()=>e.value,t=>e.value=String(t??""),"input")}}else s=e instanceof HTMLSelectElement?{l:()=>e.multiple?[...e.selectedOptions].map(e=>c(e.value)):c(e.value),h:t=>{if(e.multiple)for(let n of e.options)n.selected=Array.isArray(t)&&t.map(String).includes(n.value);else e.value=String(t??"")},y:["change"]}:e instanceof HTMLTextAreaElement||"value"in e?Z(()=>e.value,t=>e.value=String(t??""),"input","change"):Z(()=>e.getAttribute("value"),t=>e.setAttribute("value",String(t??"")),"change");if(!i.has(u)){let e=s.l();void 0!==e&&""!==e&&i.set(u,e)}let m=()=>i.set(u,s.l());for(let t of a.get("event")??s.y)l(e,t,m);l(e,"sigmx-prop-change",m),o(()=>{let e=d();void 0!==e&&s.h(e)})}}),G=F({name:"class",value:"required",mount({el:e,key:t,cased:n,evaluate:r,effect:a}){let i=new Set;return a(()=>{let a=t?{[n("kebab")]:r()}:r();for(let t in a)for(let n of t.split(/\s+/).filter(Boolean))e.classList.toggle(n,!!a[t]),a[t]?i.add(n):i.delete(n)}),()=>e.classList.remove(...i)}}),Q=F({name:"computed",value:"required",mount({key:e,cased:t,evaluate:n,store:r,error:a}){if(e)return void r.define(t(),v(()=>n()));let i=n();for(let e in i){if("function"!=typeof i[e])throw a(`"${e}" must be a function`);r.define(e,v(i[e]))}}}),X=F({name:"custom-validity",key:"forbidden",value:"required",mount({el:e,evaluate:t,effect:n,error:r}){if(!("setCustomValidity"in e))throw r("only works on form fields");n(()=>e.setCustomValidity(String(t()??"")))}}),Y=F({name:"effect",key:"forbidden",value:"required",returns:!1,mount:e=>e.effect(()=>e.evaluate())}),ee=F({name:"indicator",mount({el:e,key:t,value:n,cased:r,store:a,listen:i}){let l=t?r():n.trim(),o=new Set;return a.set(l,!1),i(document,"sigmx-fetch",t=>{let{el:n,type:r,rid:i}=t.detail;if("started"!==r||n!==e&&!e.contains(n)){if("finished"!==r)return;o.delete(i)}else o.add(i);a.set(l,o.size>0)}),()=>a.set(l,!1)}}),te=F({name:"init",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){D(B(()=>t(),e),e)()}}),ne=F({name:"json-signals",key:"forbidden",mount({el:e,value:t,mods:n,evaluate:r,effect:a,store:i}){let l=t?r():void 0;a(()=>{e.textContent=JSON.stringify(i.snapshot(l),null,n.has("terse")?0:2)})}}),re=F({name:"match-media",key:"required",value:"required",mount({cased:e,evaluate:t,store:n,listen:r}){let a=String(t()).trim();(!/^[(a-z]/.test(a)||!a.startsWith("(")&&a.includes(":")&&!/^(not|only|all|screen|print)\b/.test(a))&&(a=`(${a})`);let i=window.matchMedia(a),l=e(),o=()=>n.set(l,i.matches);o(),r(i,"change",o)}}),ae=F({name:"on",key:"required",value:"required",returns:!1,mount({el:e,mods:t,cased:n,evaluate:r,listen:a}){let i=n("kebab"),l=t.has("outside"),o=t.has("window")?window:t.has("document")||l||i.startsWith("sigmx-")?document:e,s=D(B(e=>r(e),t),t);a(o,i,n=>{l&&e.contains(n.target)||((t.has("prevent")||"submit"===i&&e instanceof HTMLFormElement)&&n.preventDefault(),t.has("stop")&&n.stopPropagation(),s(n))},{capture:t.has("capture"),passive:t.has("passive"),once:t.has("once")})}}),ie=F({name:"on-intersect",key:"forbidden",value:"required",returns:!1,mount({el:e,mods:t,evaluate:n}){let r=t.get("threshold")?.[0],a=t.has("full")?1:t.has("half")?.5:r?Math.min(100,Math.max(0,+r))/100:0,i=D(B(()=>n(),t),t),l=new IntersectionObserver(e=>{for(let n of e)n.isIntersecting!==t.has("exit")&&(i(),t.has("once")&&l.disconnect())},{threshold:a});return l.observe(e),()=>l.disconnect()}}),le=F({name:"on-interval",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){let n=e.get("duration"),r=B(()=>t(),e);n?.includes("leading")&&r();let a=setInterval(r,V(n,1e3));return()=>clearInterval(a)}}),oe=F({name:"on-raf",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){let n=D(()=>t(),e),r=requestAnimationFrame(function e(){n(),r=requestAnimationFrame(e)});return()=>cancelAnimationFrame(r)}}),se=F({name:"on-resize",key:"forbidden",value:"required",returns:!1,mount({el:e,mods:t,evaluate:n}){let r=D(()=>n(),t),a=new ResizeObserver(()=>r());return a.observe(e),()=>a.disconnect()}}),ue=F({name:"on-signal-patch",value:"required",returns:!1,args:["patch"],mount({key:e,cased:t,mods:n,evaluate:r,listen:a}){let i=e?t():"",l=!1,o=D(e=>{if(!l){l=!0;try{r(void 0,e)}finally{l=!1}}},n);a(document,"sigmx-signal-patch",e=>{(!i||((e,t)=>{let n=e;for(let e of t.split(".")){if(null==n||"object"!=typeof n||!(e in n))return!1;n=n[e]}return!0})(e.detail,i))&&o(e.detail)})}}),de=F({name:"persist",mount({key:e,value:t,mods:n,evaluate:r,store:a,effect:i}){let l=n.has("session")?sessionStorage:localStorage,o=e||"sigmx",s=t?r():void 0,u=l.getItem(o);u&&a.merge(JSON.parse(u)),i(()=>l.setItem(o,JSON.stringify(a.snapshot(s,{computed:!1}))))}}),ce=e=>{try{return JSON.parse(e)}catch{return e}},fe=F({name:"query-string",mount({key:e,value:t,mods:n,evaluate:r,cased:a,store:i,listen:l,effect:o}){let s=n.has("history"),u=e=>{e!==location.pathname+location.search+location.hash&&window.history[s?"pushState":"replaceState"](null,"",e)},d=e=>`${location.pathname}${e.size?`?${e}`:""}${location.hash}`,c=!1,f=e=>{c=!0;try{e()}finally{c=!1}};if(e){let n=a(),m=t?r():"",h=()=>{let t=new URLSearchParams(location.search).get(e);i.set(n,null===t?m:ce(t))};return(!i.has(n)||new URLSearchParams(location.search).has(e))&&h(),o(()=>{let t=i.get(n);if(c)return;let r=new URLSearchParams(location.search);void 0===t||((e,t)=>JSON.stringify(e)===JSON.stringify(t))(t,m)?r.delete(e):r.set(e,"string"==typeof t?t:JSON.stringify(t)),u(d(r))}),void(s&&l(window,"popstate",()=>f(h)))}let m=t?r():void 0,h=A(m),p=()=>{let e={};for(let[t,n]of new URLSearchParams(location.search))h(t)&&k(e,t,ce(n));i.merge(e)};p(),o(()=>{let e=i.snapshot(m,{computed:!1});if(c)return;let t=new URLSearchParams(location.search),r=(e,a)=>{for(let i in e){let l=a?`${a}.${i}`:i,o=e[i];o&&"object"==typeof o&&!Array.isArray(o)?r(o,l):!n.has("filter")||""!==o&&null!=o?t.set(l,"string"==typeof o?o:JSON.stringify(o)):t.delete(l)}};r(e,""),u(d(t))}),s&&l(window,"popstate",()=>f(p))}}),me=F({name:"ref",mount({el:e,key:t,value:n,cased:r,store:a}){let i=t?r():n.trim();return a.set(i,e),()=>a.remove(i)}}),he=F({name:"replace-url",key:"forbidden",value:"required",mount:({evaluate:e,effect:t})=>t(()=>history.replaceState(history.state,"",new URL(String(e()),location.href)))}),pe=(e,t,n)=>t.find(t=>e.has(t))??n,ge=F({name:"scroll-into-view",key:"forbidden",value:"forbidden",mount({el:e,mods:t}){e.scrollIntoView({behavior:pe(t,["smooth","instant","auto"],"smooth"),block:pe(t,["vstart","vcenter","vend","vnearest"],"vcenter").slice(1),inline:pe(t,["hstart","hcenter","hend","hnearest"],"hcenter").slice(1)}),t.has("focus")&&e.focus?.()}}),ve=F({name:"show",key:"forbidden",value:"required",mount({el:e,evaluate:t,effect:n}){let r="none"===e.style.display?"":e.style.display;return n(()=>{e.style.display=t()?r:"none"}),()=>{e.style.display=r}}}),ye=F({name:"signals",value:"required",mount({key:e,cased:t,evaluate:n,store:r,mods:a}){let i=n();r.merge(e?k({},t(),i):i,{ifMissing:a.has("ifmissing")})}}),be=F({name:"style",value:"required",mount({el:e,key:t,cased:n,evaluate:r,effect:a}){let i=new Map,l=(t,n)=>{i.has(t)||i.set(t,e.style.getPropertyValue(t)),n||0===n?e.style.setProperty(t,String(n)):e.style.setProperty(t,i.get(t))};return a(()=>{let e=t?{[n("kebab")]:r()}:r();for(let t of i.keys())t in e||l(t,"");for(let t in e)l(N(t),e[t])}),()=>{for(let[t,n]of i)e.style.setProperty(t,n)}}}),we=F({name:"text",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>{e.textContent=String(t()??"")})}),Se=F({name:"view-transition",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>e.style.setProperty("view-transition-name",String(t())))}),ke=U({name:"clipboard",call:(e,t,n=!1)=>navigator.clipboard.writeText(n?(new TextDecoder).decode(Uint8Array.from(atob(t),e=>e.charCodeAt(0))):t)}),xe=U({name:"fit",call:(e,t,n,r,a,i,l=!1,o=!1)=>{let s=(t-n)/(r-n);l&&(s=Math.min(1,Math.max(0,s)));let u=a+s*(i-a);return o?Math.round(u):u}}),Ae={number:(e,t,n)=>new Intl.NumberFormat(e,n).format(t),datetime:(e,t,n)=>new Intl.DateTimeFormat(e,n).format(t),pluralRules:(e,t,n)=>new Intl.PluralRules(e,n).select(t),relativeTime:(e,t,n)=>new Intl.RelativeTimeFormat(e,n).format(t[0],t[1]),list:(e,t,n)=>new Intl.ListFormat(e,n).format(t),displayNames:(e,t,n)=>new Intl.DisplayNames(e,n).of(t)??""},Ee=U({name:"intl",call:({error:e},t,n,r,a)=>{let i=Ae[t];if(!i)throw e(`unknown @intl type "${t}"`);return i(a,n,r)}}),Te=U({name:"peek",call:(e,t)=>b(t)}),$e=U({name:"setAll",call:({store:e},t,n)=>y(()=>b(()=>{for(let r of e.paths(n))e.set(r,t)}))}),Me=U({name:"toggleAll",call:({store:e},t)=>y(()=>b(()=>{for(let n of e.paths(t))e.set(n,!e.get(n))}))}),Le={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>1-(1-e)*(1-e),"ease-in-out":e=>e<.5?2*e*e:1-(-2*e+2)**2/2},qe=e=>{let t=/^\s*(-?\d*\.?\d+)([a-z%]*)\s*$/i.exec(e);return t?{n:+t[1],unit:t[2]}:void 0},Oe=F({name:"animate",key:"required",value:"required",mount({el:e,mods:t,cased:n,evaluate:r,effect:a,cleanup:i}){let l,o=n("kebab"),s=CSS.supports(o,"inherit"),u=V(t.get("duration"),300),d=Le[t.get("easing")?.[0]??"ease-out"]??Le["ease-out"],c=matchMedia("(prefers-reduced-motion: reduce)").matches,f=t=>s?e.style.setProperty(o,t):e.setAttribute(o,t),m=0,h=!0;a(()=>{let t=String(r());if(t===l)return;l=t,cancelAnimationFrame(m);let n=qe(s?e.style.getPropertyValue(o)||getComputedStyle(e).getPropertyValue(o):e.getAttribute(o)??""),a=qe(t);if(n&&a&&"px"===n.unit&&"%"===a.unit&&("width"===o||"height"===o)&&e.parentElement){let t="width"===o?e.parentElement.clientWidth:e.parentElement.clientHeight;t&&(n={n:n.n/t*100,unit:"%"})}if(h||c||!n||!a||n.unit!==a.unit)return h=!1,f(t);let i=n.n,p=a.n,g=performance.now(),v=e=>{let t=Math.min(1,(e-g)/u);f(`${i+(p-i)*d(t)}${a.unit}`),t<1&&(m=requestAnimationFrame(v))};m=requestAnimationFrame(v)}),i(()=>cancelAnimationFrame(m))}}),Pe=async(e,t)=>{let n,r,a=e.getReader(),i=new TextDecoder,l="",o="",s=[],u=()=>{s.length&&t({event:o||"message",data:s.join("\n"),id:n,retry:r}),o="",s=[]},d=e=>{if(!e)return u();if(":"===e[0])return;let t=e.indexOf(":"),a=t<0?e:e.slice(0,t),i=t<0?"":e.slice(t+1);" "===i[0]&&(i=i.slice(1)),"event"===a?o=i:"data"===a?s.push(i):"id"===a?n=i:"retry"===a&&/^\d+$/.test(i)&&(r=+i)};for(;;){let e,{value:t,done:n}=await a.read();if(n)break;for(l+=i.decode(t,{stream:!0});(e=l.search(/\r\n|\r|\n/))>=0;){let t=l.slice(0,e);l=l.slice(e+("\r"===l[e]&&"\n"===l[e+1]?2:1)),d(t)}}l&&d(l),u()},Ne=new Map,je=0,He=()=>new Promise(e=>document.addEventListener("visibilitychange",()=>!document.hidden&&e(),{once:!0})),Ce=(e,t,n)=>{for(let r of t){let t=e.headers.get(`sigmx-${r}`);t&&(n[j(r)]=t)}return n},Re=e=>{let t=document.createElement("script");t.text=e,document.head.append(t),t.remove()},Ie=(e,t)=>U({name:e,call:(e,n,r)=>(async(e,t,n,r={})=>{let{el:a,evt:i,store:l,runtime:o,error:s}=t;if(!n)throw s(`@${e.toLowerCase()} needs a URL`);let u=`${e} ${n}`,d=r.abort instanceof AbortController?r.abort:new AbortController;"none"!==r.abort&&(Ne.get(u)?.abort(),Ne.set(u,d)),t.cleanup(()=>d.abort());let c,f=++je,m=(t,r={})=>o.emit("fetch",{el:a,type:t,method:e,url:n,rid:f,...r}),h={attempts:5,interval:1e3,factor:2,max:3e4,onStatusError:!1,...r.retry},p=!(r.openWhenHidden??"GET"!==e),g="GET"!==e&&"DELETE"!==e,v=()=>{let t,o=new URL(n,location.href),u={Accept:"text/event-stream, text/html, application/json","Sigmx-Request":"true",...r.headers};if("json"===(r.contentType??"json")){let e=r.payload??b(()=>l.snapshot(r.filter??{exclude:/(^|\.)_/})),n=JSON.stringify(e);g?(t=n,u["Content-Type"]??="application/json"):o.searchParams.set("sigmx",n)}else{let e=r.selector?document.querySelector(r.selector):a.closest("form");if(!e)throw s("no form found",{selector:r.selector});if(!e.noValidate&&!e.checkValidity())return void e.reportValidity();let n=i instanceof SubmitEvent?i.submitter:a instanceof HTMLButtonElement?a:null,l=new FormData(e,n),d="multipart/form-data"===e.enctype;if(g)t=d?l:new URLSearchParams(l),d||(u["Content-Type"]="application/x-www-form-urlencoded");else for(let[e,t]of new URLSearchParams(l))o.searchParams.append(e,t)}return{url:o.toString(),init:{method:e,headers:u,body:t}}},y=(e,t)=>{let n=(e=>{let t={};for(let n of e.split("\n")){let e=n.indexOf(" "),r=e<0?n:n.slice(0,e),a=e<0?"":n.slice(e+1);t[r]=r in t?`${t[r]}\n${a}`:a}return t})(t);o.emit("server-event",{el:a,event:e,data:n}),o.handle(e,n)},w=0,S=h.interval,k=async()=>{if(w++>=h.attempts)throw new Error("retries exhausted");m("retrying",{attempt:w}),await((e,t)=>new Promise(n=>{let r=setTimeout(n,e);t.addEventListener("abort",()=>(clearTimeout(r),n()),{once:!0})}))(S,d.signal),S=Math.min(S*h.factor,h.max)};m("started");try{for(;!d.signal.aborted;){let e=v();if(!e)return;c&&(e.init.headers["Last-Event-ID"]=c);let t=new AbortController,n=()=>document.hidden&&t.abort();p&&document.addEventListener("visibilitychange",n);try{let n=await fetch(e.url,{...e.init,signal:AbortSignal.any([d.signal,t.signal])}),a=n.headers.get("content-type")??"";if(n.status>=400){if(m("error",{status:n.status}),!h.onStatusError)return;await k();continue}if(204===n.status||304===n.status||!n.body)return;if(a.includes("text/event-stream")){if(w=0,S=h.interval,await Pe(n.body,e=>{void 0!==e.id&&(c=e.id),e.retry&&(S=h.interval=e.retry),y(e.event,e.data)}),!r.reconnect)return;await k();continue}let i=await n.text();return void(a.includes("text/html")?o.handle("patch-elements",Ce(n,["selector","mode","use-view-transition"],{elements:i})):a.includes("application/json")?o.handle("patch-signals",Ce(n,["only-if-missing"],{signals:i})):a.includes("javascript")&&Re(i))}catch{if(d.signal.aborted)return;t.signal.aborted?await He():await k()}finally{document.removeEventListener("visibilitychange",n)}}}catch(t){throw m("error",{message:t?.message}),s(`${e} ${n}: ${t?.message??t}`)}finally{m("finished"),Ne.get(u)===d&&Ne.delete(u)}})(t,e,n,r)}),Ve=Ie("get","GET"),ze=Ie("post","POST"),De=Ie("put","PUT"),Be=Ie("patch","PATCH"),Fe=Ie("delete","DELETE"),Ue=new WeakSet,We=e=>!!e&&1===e.nodeType,Je=e=>{if(We(e))for(let t of e.matches("script")?[e]:[...e.querySelectorAll("script")]){if(Ue.has(t))continue;let e=document.createElement("script");for(let{name:n,value:r}of t.attributes)e.setAttribute(n,r);e.text=t.text,Ue.add(e),t.replaceWith(e)}},_e=e=>[...We(e)&&e.id?[e]:[],...e.querySelectorAll("[id]")],Ze=(e,t)=>We(e)&&_e(e).some(e=>t.keep.has(e.id)),Ke=(e,t)=>{Ze(e,t)?t.pantry.append(e):e.remove()},Ge=(e,t,n)=>{let r=e;try{r.moveBefore?r.moveBefore(t,n):e.insertBefore(t,n)}catch{e.insertBefore(t,n)}},Qe=(e,t,n)=>{for(let n=t;n;n=n.nextSibling)if(We(n)&&n.id===e)return n;return n.pantry.querySelector(`#${CSS.escape(e)}`)??document.getElementById(e)},Xe=(e,t,n)=>!(e.nodeType!==t.nodeType||e.nodeName!==t.nodeName||We(e)&&e.id&&e.id!==t.id||We(e)&&n.keep.has(e.id)&&e.id!==t.id),Ye=(e,t,n)=>{if(e.nodeType!==t.nodeType||e.nodeName!==t.nodeName){let n=document.importNode(t,!0);return e.replaceWith(n),void Je(n)}We(e)&&We(t)?e.hasAttribute(n.ignore)&&t.hasAttribute(n.ignore)||(((e,t,n)=>{let r=new Set((t.getAttribute(n.preserve)??e.getAttribute(n.preserve)??"").split(/\s+/).filter(Boolean)),a=!1,i=n=>!r.has(n)&&e.getAttribute(n)!==t.getAttribute(n);e instanceof HTMLInputElement&&t instanceof HTMLInputElement&&"file"!==e.type?(i("value")&&(e.value=t.getAttribute("value")??"",a=!0),i("checked")&&(e.checked=t.hasAttribute("checked"),a=!0)):e instanceof HTMLTextAreaElement&&t instanceof HTMLTextAreaElement?!r.has("value")&&e.defaultValue!==t.defaultValue&&(e.value=t.defaultValue,a=!0):e instanceof HTMLOptionElement&&t instanceof HTMLOptionElement&&i("selected")&&(e.selected=t.hasAttribute("selected"),a=!0);for(let{name:n,value:a}of t.attributes)!r.has(n)&&e.getAttribute(n)!==a&&e.setAttribute(n,a);for(let{name:n}of[...e.attributes])!r.has(n)&&!t.hasAttribute(n)&&e.removeAttribute(n);a&&(e instanceof HTMLOptionElement?e.closest("select"):e)?.dispatchEvent(new Event("sigmx-prop-change",{bubbles:!0}))})(e,t,n),e instanceof HTMLTemplateElement&&t instanceof HTMLTemplateElement?e.innerHTML=t.innerHTML:e.isEqualNode(t)||et(e,t,n)):e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue)},et=(e,t,n)=>{let r=e.firstChild,a=e=>{for(;r&&r!==e;){let e=r;r=r.nextSibling,Ke(e,n)}return r===e};for(let i of[...t.childNodes]){if(We(i)&&i.id&&n.keep.has(i.id)){let t=Qe(i.id,r,n);if(t){a(t)&&r?r=t.nextSibling:Ge(e,t,r),Ye(t,i,n);continue}}let t=r;for(;t&&!Xe(t,i,n);)t=t.nextSibling;if(t)a(t),r=t.nextSibling,Ye(t,i,n);else if(We(i)&&Ze(i,n)){let t=document.createElementNS(i.namespaceURI??"http://www.w3.org/1999/xhtml",i.tagName);e.insertBefore(t,r),Ye(t,i,n)}else{let t=document.importNode(i,!0);e.insertBefore(t,r),Je(t)}}a(null)},tt=(e,t,n)=>{let r=new Set,a=new Map(_e(t).map(e=>[e.id,e.tagName]));for(let t of _e(e))a.get(t.id)===t.tagName&&r.add(t.id);return{keep:r,pantry:document.createDocumentFragment(),ignore:n.ignoreAttr??"data-ignore-morph",preserve:n.preserveAttr??"data-preserve-attr"}},nt=(e,t,n={})=>{let r=tt(e,t,n);Ye(e,t,r)},rt=(e,t,n={})=>{let r=tt(e,t,n);et(e,t,r)},at=["outer","inner","replace","prepend","append","before","after","remove"],it=e=>1===e.nodeType,lt=W({name:"patch-elements",handle(e,{elements:t="",selector:n="",mode:r="outer",useViewTransition:a}){if(!at.includes(r))throw new Error(`patch-elements: unknown mode "${r}"`);let i=()=>((e,t,n,r)=>{let a={ignoreAttr:e.attr("ignore-morph"),preserveAttr:e.attr("preserve-attr")},i=(e=>{if(/<\/(html|head|body)>/i.test(e))return(new DOMParser).parseFromString(e,"text/html");let t=document.createElement("template");return t.innerHTML=e,t.content})(t);if(i instanceof Document)return i.head.childNodes.length&&rt(document.head,i.head,a),void nt(document.body,i.body,a);let l=i;if("remove"===r){for(let e of document.querySelectorAll(n))e.remove();return}if(!n){if("outer"!==r&&"replace"!==r)throw new Error(`patch-elements mode "${r}" needs a selector`);for(let e of[...l.children]){let t=e.id&&document.getElementById(e.id);t?"outer"===r?nt(t,e,a):(t.replaceWith(e),Je(e)):console.warn("patch-elements: no element with id",e.id)}return}let o=[...document.querySelectorAll(n)];o.length||console.warn("patch-elements: no elements match",n),o.forEach((e,t)=>{let n=t===o.length-1?l:l.cloneNode(!0),i=[...n.childNodes];if("outer"===r&&1===i.length&&it(i[0]))nt(e,i[0],a);else if("inner"===r)rt(e,n,a);else{"outer"===r||"replace"===r?e.replaceWith(n):e[r](n);for(let e of i)Je(e)}})})(e,t,n,r);"true"===a&&"startViewTransition"in document?document.startViewTransition(i):i()}}),ot=W({name:"patch-signals",handle(e,{signals:t,onlyIfMissing:n}){if(!t)return;let r;try{r=JSON.parse(t)}catch{r=e.compiler([],`return (${t})`)()}e.store.merge(r,{ifMissing:"true"===n})}}),st=F({name:"boost",key:"forbidden",value:"forbidden",mount({el:e,mods:t,store:n,runtime:r,listen:a,error:i,cleanup:l}){let o={el:e,store:n,runtime:r,error:i,cleanup:l},s=(n,a="get",i,l)=>{let s=l?{contentType:"form",selector:void 0,openWhenHidden:!0}:{openWhenHidden:!0},u=r.call(a,{...o,el:l??e,evt:i},[n,s]);history[t.has("replace")?"replaceState":"pushState"](null,"",n),Promise.resolve(u).then(()=>scrollTo(0,0))};a(e,"click",e=>{let t=e.target.closest("a[href]");!t||e.defaultPrevented||e.button||e.metaKey||e.ctrlKey||e.shiftKey||t.target||t.hasAttribute("download")||t.origin!==location.origin||t.hash&&t.pathname===location.pathname||(e.preventDefault(),s(t.href,"get",e))}),a(e,"submit",e=>{let t=e.target;if(e.defaultPrevented||t.target)return;let n=new URL(t.action||location.href);n.origin===location.origin&&(e.preventDefault(),s(n.href,"post"===t.method.toLowerCase()?"post":"get",e,t))}),a(window,"popstate",()=>r.call("get",o,[location.href,{openWhenHidden:!0}]))}}),ut=F({name:"cloak",key:"forbidden",value:"forbidden",mount:({el:e,attr:t})=>e.removeAttribute(t)}),dt=F({name:"collapse",key:"forbidden",value:"required",mount({el:e,mods:t,evaluate:n,effect:r,cleanup:a}){let i,l,o=e.style,s=V(t.get("duration"),250),u=t.get("min")?.[0]??"0px",d=matchMedia("(prefers-reduced-motion: reduce)").matches,c=!0,f=e=>{o.transition="",o.overflow=e?"":"hidden",o.height=e?"":u};r(()=>{let t=!!n();if(t===l)return;if(l=t,clearTimeout(i),c||d)return c=!1,f(t);let r=`${e.getBoundingClientRect().height}px`;o.overflow="hidden",o.height=t?u:r,e.getBoundingClientRect(),o.transition=`height ${s}ms ease`,o.height=t?`${e.scrollHeight}px`:u,i=setTimeout(()=>f(t),s+20)}),a(()=>clearTimeout(i))}}),ct=F({name:"html",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>{e.innerHTML=String(t()??"")})}),ft={9:/\d/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},mt=((e={})=>(e=>{let r=[].concat(e.prefix??"data-"),a=[].concat(e.eventPrefix??"sigmx-"),i=e.store??q(),l=e.compile??n,{expressions:s}=e,u=e.onError??((e,t)=>console.error(e,t)),d=Object.create(null),c=Object.create(null),f=Object.create(null),m={prefixes:r,attr:e=>r[0]+e,store:i,compiler:l,emit:(e,t)=>document.dispatchEvent(new CustomEvent(`sigmx-${e}`,{detail:t})),call:(e,t,n)=>{let r=c[e];if(!r)throw t.error(`unknown action @${e}`);return r.call(t,...n)},eventPrefixes:a,handle:(e,t)=>{let n=a.find(t=>e.startsWith(t)),r=f[n?e.slice(n.length):e];return r?.handle(m,t),!!r},attributes:d,actions:c,handlers:f},h=new Map,p=new Set,v=r.map(e=>`[${e}ignore__self]`).join(),y=r.map(e=>`[${e}ignore]`).join(),b=e=>e.matches(v)||!!e.closest(y),S=e=>{for(let t of r)if(e.startsWith(t))return e.slice(t.length)},k=e=>{for(let t of e){let e=h.get(t);if(e&&h.delete(t))for(let t of e.values())t()}},x=(e,t)=>{let n=h.get(e);n?.get(t)?.(),n?.delete(t)},A=(e,n,a,l,c)=>{let{plugin:f,key:p,mods:v}=(e=>{let t=I.get(e);if(!t){let[n,...r]=e.split("__"),a=n.indexOf(":"),i=new Map;for(let e of r){let[t,...n]=e.split(".");i.set(t,n)}t={plugin:a<0?n:n.slice(0,a),key:a<0?void 0:n.slice(a+1),mods:i},I.set(e,t)}return t})(a),y=d[f];if(!y||c&&!c.has(f))return;x(e,n);let b,S=[],k={plugin:f,el:e,attr:n},A=(e,t)=>((e,t)=>Object.assign(new Error(e),{info:t}))(`${r[0]}${f}: ${e}`,{...k,...t}),E=e=>u(e,k),T={el:e,plugin:f,attr:n,key:p,value:l,mods:v,cased:(e="camel")=>((e,t)=>e.split(".").map(H[t]).join("."))(p??"",v.get("case")?.[0]||e),evaluate:(t,...n)=>(b??=s(l,["el","evt",...y.args??[]],y.returns??!0),b(i,((e,t,n,r)=>{let a={el:e,evt:t,store:i,runtime:m,error:n,cleanup:r};return new Proxy({},{get:(e,t)=>(...e)=>m.call(t,a,e)})})(e,t,A,T.cleanup),e,t,...n)),effect:e=>S.push(((e,n)=>{let r=new g(e,n);return t?.o.add(r),r.b(),o||w(),()=>r.g()})(e,E)),listen:(e,t,n,r)=>{let a=e=>{try{n(e)}catch(e){E(e)}};e.addEventListener(t,a,r),S.push(()=>e.removeEventListener(t,a,r))},cleanup:e=>S.push(e),error:A,store:i,runtime:m},$=h.get(e);$||h.set(e,$=new Map),$.set(n,()=>{for(let e of S.splice(0))e()});try{if("required"===y.key&&!p)throw A("needs a key");if("forbidden"===y.key&&p)throw A("takes no key");if("required"===y.value&&!l)throw A("needs a value");if("forbidden"===y.value&&l)throw A("takes no value");let e=y.mount(T);"function"==typeof e&&S.push(e)}catch(e){E(e)}},E=(e,t)=>{for(let n of e)if(!b(n))for(let{name:e,value:r}of[...n.attributes]){let a=S(e);a&&A(n,e,a,r,t)}},T=new MutationObserver(e=>{for(let{type:t,target:n,attributeName:r,addedNodes:a,removedNodes:i}of e)if("childList"===t){for(let e of i)k(R(e));for(let e of a)E(R(e))}else if(r&&C(n)&&!b(n)){let e=S(r);if(!e)continue;let t=n.getAttribute(r);null===t?x(n,r):A(n,r,e,t)}}),$=!1,M=(e=document.documentElement,t=!0,n)=>{E(R(e),n),t&&!p.has(e)&&(T.observe(e,{subtree:!0,childList:!0,attributes:!0}),p.add(e)),!$&&p.has(document.documentElement)&&($=!0,m.emit("ready"))},L=(...e)=>{let t=new Set;for(let n of e)"attribute"===n.type?(d[n.name]=n,t.add(n.name)):"action"===n.type?c[n.name]=n:f[n.name]=n;if(t.size)for(let e of p)M(e,!1,t)},O=i.onPatch(e=>m.emit("signal-patch",e));L(...e.plugins??[]);let P={runtime:m,store:i,get $(){return i.$},apply:(e,t)=>M(e,t),use:L,destroy:()=>{T.disconnect(),O(),k([...h.keys()]),p.clear()}};return(e.autoStart??!0)&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>P.apply(),{once:!0}):P.apply()),P})({...e,expressions:e.expressions??l(e.compile??n)}))({plugins:[_,K,G,Q,X,Y,ee,te,ne,re,ae,ie,le,oe,se,ue,de,fe,me,he,ge,ve,ye,be,we,Se,ke,xe,Ee,Te,$e,Me,Oe,Fe,Ve,Be,ze,De,lt,ot,st,ut,dt,ct,F({name:"mask",key:"forbidden",value:"required",mount({el:e,value:t,mods:n,evaluate:r,listen:a,effect:i}){let l=e,o=t,s=()=>{let e=((e,t)=>{let n="",r=0;for(let a of e){if(r>=t.length)break;let e=ft[a];if(e){for(;r<t.length&&!e.test(t[r]);)r++;if(r>=t.length)break;n+=t[r++]}else n+=a,t[r]===a&&r++}return n})(o,l.value);e!==l.value&&(l.value=e,l.dispatchEvent(new Event("input",{bubbles:!0})))};a(l,"input",s),n.has("dynamic")?i(()=>{o=String(r()??""),s()}):s()}}),F({name:"remove-me",key:"forbidden",mount({el:e,value:t,cleanup:n}){let r=setTimeout(()=>e.remove(),V([t],0));n(()=>clearTimeout(r))}}),F({name:"teleport",key:"forbidden",value:"required",mount({el:e,value:t,mods:n,error:r}){let a=document.querySelector(t);if(!a)throw r(`no element matches "${t}"`);if(e.parentElement===a)return;let i=n.has("prepend")?a.firstChild:null,l=a;l.moveBefore?l.moveBefore(e,i):a.insertBefore(e,i)}}),F({name:"transition",key:"forbidden",value:"required",mount({el:e,mods:t,evaluate:n,effect:r}){let a=e.style,i=matchMedia("(prefers-reduced-motion: reduce)").matches?0:V(t.get("duration"),200),l=t.has("scale")?+(t.get("scale")?.[0]??95)/100:1,o=t.get("origin")?.join(" ");o&&(a.transformOrigin=o);let s,u,d={opacity:0,transform:`scale(${l})`},c={opacity:1,transform:"scale(1)"},f="none"===a.display?"":a.display,m=!0;r(()=>{let t=!!n();if(t!==u){if(u=t,s?.cancel(),m)return m=!1,void(a.display=t?f:"none");t&&(a.display=f),s=e.animate(t?[d,c]:[c,d],{duration:i,easing:"ease-out",fill:"forwards"}),s.onfinish=()=>{s?.cancel(),t||(a.display="none")}}})}}),F({name:"trap",key:"forbidden",value:"required",mount({el:e,mods:t,evaluate:n,effect:r,listen:a,cleanup:i}){let l=null,o=!1,s=[],u=()=>[...e.querySelectorAll('a[href],button:not([disabled]),input:not([disabled]):not([type=hidden]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"]),[contenteditable]')].filter(e=>null!==e.offsetParent||e===document.activeElement),d=()=>{if(o){o=!1;for(let e of s.splice(0))e.removeAttribute("inert");l?.focus?.()}};a(document,"keydown",e=>{if(!o||"Tab"!==e.key)return;let t=u();if(!t.length)return e.preventDefault();let n=t.indexOf(document.activeElement),r=e.shiftKey?n<=0?t.length-1:n-1:n===t.length-1?0:n+1;(n<0||r!==n+(e.shiftKey?-1:1))&&(e.preventDefault(),t[r].focus())}),r(()=>{if(n()){if(o)return;if(o=!0,l=document.activeElement,t.has("inert"))for(let t=e;t&&t!==document.body;t=t.parentElement)for(let e of t.parentElement?.children??[])e!==t&&!e.hasAttribute("inert")&&(e.setAttribute("inert",""),s.push(e));queueMicrotask(()=>(u()[0]??e).focus?.())}else d()}),i(d)}}),U({name:"confirm",call:(e,t)=>window.confirm(t)}),U({name:"dispatch",call:({el:e},t,n)=>e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}),U({name:"ws",call({el:e,runtime:t,cleanup:n},r,a={}){let i=new WebSocket(new URL(r,location.href.replace(/^http/,"ws")),a.protocols);return i.onmessage=n=>{for(let r of String(n.data).split(/\n\n+/)){let n="message",a={};for(let e of r.split("\n")){let t=e.indexOf(":");if(t<0)continue;let r=e.slice(0,t),i=e.slice(t+1).trimStart();if("event"===r)n=i;else if("data"===r){let e=i.indexOf(" "),t=e<0?i:i.slice(0,e),n=e<0?"":i.slice(e+1);a[t]=t in a?`${a[t]}\n${n}`:n}}t.emit("server-event",{el:e,event:n,data:a}),t.handle(n,a)}},n(()=>i.close()),{send:e=>i.send("string"==typeof e?e:JSON.stringify(e)),close:()=>i.close(),socket:i}}})]});globalThis.sigmx=mt;export{mt as sigmx};
|
|
1
|
+
var e,t,r=e=>e.replace(/([a-z0-9])([A-Z])|([A-Z]+)([A-Z][a-z])/g,"$1$3 $2$4").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.toLowerCase()),l=e=>e[0].toUpperCase()+e.slice(1),n=e=>r(e).join("-"),a=e=>r(e).map((e,t)=>t?l(e):e).join(""),i={camel:a,kebab:n,snake:e=>r(e).join("_"),pascal:e=>r(e).map(l).join("")},o=e=>{if(null===e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||null===t},s=e=>"__proto__"!==e&&"constructor"!==e&&"prototype"!==e,c=(e,t,r)=>{let l=t.split(".");if(!l.every(s))return e;let n=l.pop(),a=e;for(let e of l)(!o(a[e])||!Object.hasOwn(a,e))&&(a[e]={}),a=a[e];return a[n]=r,e},u=(e,t=0)=>{for(let t of e?.length?[e.join("."),...e]:[]){let e=/^(\d+(?:\.\d+)?)(ms|s)?$/.exec(t);if(e)return+e[1]*("s"===e[2]?1e3:1)}return t},d=(e,t,r,l,n)=>{let a,i,o=()=>{a=void 0,l&&i&&e(...i),i=void 0},s=(...l)=>{if(a)return i=l,void(n&&(clearTimeout(a),a=setTimeout(o,t)));r?e(...l):i=l,a=setTimeout(o,t)};return s.cancel=()=>{clearTimeout(a),a=i=void 0},s},f=(e,t,r)=>{let l=t.get("debounce"),n=t.get("throttle");return l&&(e=d(e,u(l,300),l.includes("leading"),!l.includes("notrailing"),!0)),n&&(e=d(e,u(n,300),!n.includes("noleading"),n.includes("trailing"),!1)),(l||n)&&r?.(e.cancel),e},h=(e,t)=>Function(...e,t),p=/[A-Za-z_$]/,m=/[\w$]/,g=/(^|[(,=:[!&|?{};+\-*%<>~^]|\b(?:return|typeof|case|in|of|do|else|void|delete|throw|new))$/,v=(e,t,r)=>{let l="",n=t,a=0,i=e.length,o=()=>l.trimEnd();for(;n<i;){let t=e[n],s=e[n+1];if('"'===t||"'"===t){let r=n+1;for(;r<i&&e[r]!==t;)r+="\\"===e[r]?2:1;l+=e.slice(n,r+1),n=r+1}else if("`"===t){for(l+=t,n++;n<i&&"`"!==e[n];)if("\\"===e[n])l+=e.slice(n,n+2),n+=2;else if("$"===e[n]&&"{"===e[n+1]){let[t,r]=v(e,n+2,!0);l+=`\${${t}}`,n=r}else l+=e[n++];l+="`",n++}else if("/"===t&&"/"===s){let t=e.indexOf("\n",n);n=t<0?i:t}else if("/"===t&&"*"===s){let t=e.indexOf("*/",n+2);n=t<0?i:t+2}else if("/"===t&&g.test(o())){let t=n+1,r=!1;for(;t<i&&(r||"/"!==e[t]);t++)"\\"===e[t]?t++:"["===e[t]?r=!0:"]"===e[t]&&(r=!1);for(t++;t<i&&/[a-z]/i.test(e[t]);t++);l+=e.slice(n,t),n=t}else if(!r||"{"!==t&&"}"!==t)if("$"===t&&p.test(s??"")&&"$"!==s&&!m.test(l.at(-1)??"")){let r=o();if(r.endsWith(".")&&!r.endsWith("...")){l+=t,n++;continue}let a=n+1;for(;a<i&&m.test(e[a]);)a++;l+=`$.${e.slice(n+1,a)}`,n=a}else if("@"===t&&p.test(s??"")){let r=n+1;for(;r<i&&m.test(e[r]);)r++;let a=r;for(;a<i&&/\s/.test(e[a]);)a++;"("===e[a]?(l+=`__a.${e.slice(n+1,r)}(`,n=a+1):(l+=t,n++)}else l+=t,n++;else{if("{"===t)a++;else{if(!a)return[l,n+1];a--}l+=t,n++}}return[l,n]},y=new Map,w=e=>(t,r)=>{let l=((e,t,r)=>{let l=`${r.join()}|${t}`,n=y.get(l);return n||(n=((e,t,r)=>{let l;for(let n of(e=>{let t=[`return(${e}\n)`];for(let r=e.lastIndexOf(";");r>=0;r=e.lastIndexOf(";",r-1))t.push(`${e.slice(0,r)};return(${e.slice(r+1)}\n)`);return t.push(e),t.map(e=>`"use strict";${e}`)})((e=>v(e,0,!1)[0])(t.trim())))try{return[n,e(["$","__a",...r],n)]}catch(e){l=e}throw l})(e,t,r)[1],y.size>=2e3&&y.delete(y.keys().next().value),y.set(l,n)),n})(e,t,r);return(e,t,...r)=>l(e.$,t,...r)},b=0,x=!1,S=new Set,$=new Set,A=class{i=0;c=new Set;constructor(e){this.t=e}get value(){return e&&(e.e.set(this,this.i),this.c.add(e)),this.t}set value(e){Object.is(e,this.t)||(this.t=e,this.bump())}peek(){return this.t}bump(){this.i++;for(let e of this.c)e.p();b||j()}},k=e=>{for(let t of e.e.keys())t.c.delete(e);e.e.clear()},E=(t,r)=>{k(t);let l=e;e=t;try{return r()}finally{e=l}},M=e=>{if(!e.e.size)return!0;for(let[t,r]of e.e)if(t instanceof T&&t.g(),t.i!==r)return!0;return!1},T=class extends A{e=new Map;o=!0;constructor(e){super(void 0),this.f=e}g(){if(!this.o||(this.o=!1,!M(this)))return;let e=E(this,this.f);Object.is(e,this.t)||(this.t=e,this.i++)}get value(){return this.g(),super.value}set value(e){throw new Error("computed is read-only")}p(){if(!this.o){this.o=!0;for(let e of this.c)e.p()}}dispose(){k(this),this.o=!1}},L=class{e=new Map;l=!1;u=!1;d=new Set;constructor(e,t){this.f=e,this.h=t}p(){!this.u&&!this.l&&(this.l=!0,S.add(this))}y(){if(this.l=!1,this.u)return;let e=t;t=this,b++;try{M(this)&&(this.x(),E(this,this.f))}catch(e){if(!this.h)throw e;this.h(e)}finally{b--,t=e}}x(){for(let e of this.d)e.m();this.d.clear()}m(){this.u=!0,k(this),e===this&&(e=void 0),this.x(),S.delete(this)}},O=e=>{b++;try{return e()}finally{--b||j()}},P=t=>{let r=e;e=void 0;try{return t()}finally{e=r}},j=()=>{if(x||b)return;x=!0;let e,t=!1;try{let r=0;for(;S.size;){if(++r>1e5){for(let e of S)e.l=!1;throw S.clear(),new Error("effect loop")}let l=S.values().next().value;S.delete(l);try{l.y()}catch(r){t||(t=!0,e=r)}}}finally{x=!1}for(let e of $)e();if(t)throw e},N=e=>{let t=e.lastIndexOf(".");return[t<0?"":e.slice(0,t),e.slice(t+1)]},C=(e,t)=>e?`${e}.${t}`:t,I=(e,t)=>!t||e.startsWith(`${t}.`),q=e=>"string"==typeof e,R=new WeakMap,z=()=>{let e=new Map,t=new Map([["",new Set]]),r=new A(0),l=new Map,n=new Set,a=new Map,i=new WeakMap,u=e=>{let[t,l]=N(e);f(t).add(l),r.bump()},d=e=>{let[l,n]=N(e);t.get(l)?.delete(n),r.bump()},f=r=>{let l=t.get(r);return l||(e.has(r)&&h(r),l=new Set,t.set(r,l),u(r)),l},h=t=>{let r=e.get(t);r&&(e.delete(t),d(t),l.set(t,null),r.bump(),r instanceof T&&r.dispose())},p=e=>{let r=t.get(e);if(r){for(let t of[...r])m(C(e,t));e&&(t.delete(e),a.delete(e),d(e))}},m=e=>O(()=>{h(e),p(e)}),g=(t,r)=>O(()=>{p(t);let l=e.get(t);e.set(t,r),u(t),l&&(l.bump(),l instanceof T&&l.dispose())}),v=(t,r)=>O(()=>{if(null==r)return m(t);if(r=(r&&R.get(r))??r,o(r)){for(let e of[...f(t)])e in r||m(C(t,e));for(let e in r)s(e)&&v(C(t,e),r[e]);return}p(t);let n=e.get(t);if(n instanceof T)throw new Error(`computed "${t}" is read-only`);if(n){if(Object.is(n.peek(),r))return;n.value=r}else g(t,new A(r));l.set(t,r)}),y=(r,{at:l="",ifMissing:n=!1}={})=>O(()=>{if(!o(r))return;let a=Object.keys(r).filter(s);a.length&&f(l);for(let i of a){let a=C(l,i),s=r[i],c=e.get(a);c&&(n||c instanceof T)||(null===s?n||m(a):o(s)?y(s,{at:a,ifMissing:n}):n&&t.has(a)||v(a,s))}}),w=n=>{let a=e.get(n);if(a){let e=a.value;return Array.isArray(e)?((e,t,r)=>{let n=i.get(t);n||(n=new WeakMap,i.set(t,n));let a=()=>(l.set(r,e),t.bump(),!0),s=e=>{let t=n?.get(e);return t||(t=new Proxy(e,{get:(e,t,r)=>{let l=Reflect.get(e,t,r);if("function"==typeof l&&Array.isArray(e))return(...e)=>O(()=>l.apply(r,e));if(!l||"object"!=typeof l||!Array.isArray(l)&&!o(l))return l;let n=Object.getOwnPropertyDescriptor(e,t);return!n||n.configurable||n.writable?s(l):l},set:(e,t,r)=>(e[t]=(r&&R.get(r))??r,a()),deleteProperty:(e,t)=>(delete e[t],a())}),n?.set(e,t),R.set(t,e)),t};return s(e)})(e,a,n):e}if(r.value,t.has(n))return b(n)},b=e=>{let l=a.get(e);if(!l){let n=l=>(r.value,q(l)&&!!t.get(e)?.has(l));l=new Proxy({},{get:(t,r)=>q(r)?"toJSON"===r?()=>S(void 0,{at:e}):w(C(e,r)):void 0,set:(t,r,l)=>(q(r)&&v(C(e,r),l),!0),deleteProperty:(t,r)=>(q(r)&&m(C(e,r)),!0),has:(e,t)=>n(t),ownKeys:()=>(r.value,[...t.get(e)??[]]),getOwnPropertyDescriptor:(t,r)=>n(r)?{enumerable:!0,configurable:!0,writable:!0,value:w(C(e,r))}:void 0}),a.set(e,l)}return l},x=(t,{computed:l=!0}={})=>{r.value;let n=(e=>{if("function"==typeof e)return e;let t=(e,t)=>{if(e)return e.lastIndex=0,e.test(t)};return r=>(t(e?.include,r)??!0)&&!t(e?.exclude,r)})(t);return[...e].filter(([e,t])=>n(e)&&(l||!(t instanceof T))).map(([e])=>e)},S=(t,{at:r="",computed:l=!0}={})=>{let n={};for(let a of x(t,{computed:l}))I(a,r)&&c(n,r?a.slice(r.length+1):a,e.get(a)?.value);return n};return $.add(()=>{if(!l.size)return;let e={};for(let[t,r]of l)c(e,t,r);l.clear();for(let t of n)t(e)}),{get:w,set:v,merge:y,remove:m,has:r=>e.has(r)||t.has(r),define:g,paths:x,snapshot:S,onPatch:e=>(n.add(e),()=>n.delete(e)),get $(){return b("")}}},V=e=>1===e.nodeType,H=e=>e.querySelectorAll?[...V(e)?[e]:[],...e.querySelectorAll("*")]:[],W=(e,t)=>{for(let r of e)if(t.startsWith(r))return t.slice(r.length)},D=e=>{let r=[].concat(e.prefix??"data-"),l=[].concat(e.eventPrefix??"sigmx-"),n=e.store??z(),{expressions:a}=e,o=e.onError??((e,t)=>console.error(e,t)),s=Object.create(null),c={prefixes:r,attr:e=>r[0]+e,store:n,compiler:e.compile??h,emit:(e,t)=>document.dispatchEvent(new CustomEvent(`sigmx-${e}`,{detail:t})),call:(e,t,r)=>{let l=c.actions[e];if(!l)throw t.error(`unknown action @${e}`);return l.call(t,...r)},eventPrefixes:l,handle:(e,t)=>{let r=c.handlers[W(l,e)??e];return r?.handle(c,t),!!r},attributes:s,actions:Object.create(null),handlers:Object.create(null)},u=new Map,d=new Set,f=r.map(e=>`[${e}ignore]`).join(),p=e=>!!e.closest(f),m=!1,g=e=>{for(let t of e){let e=u.get(t);if(e&&u.delete(t))for(let t of e.values())t()}},v=(e,t)=>{let r=u.get(e);r?.get(t)?.(),r?.delete(t)},y=(e,l,d,f,h)=>{let{plugin:p,key:m,mods:g}=(e=>{let[t,...r]=e.split("__"),[,l,n]=/^([^:]*)(?::(.*))?$/.exec(t);return{plugin:l,key:n,mods:new Map(r.map(e=>{let[t,...r]=e.split(".");return[t,r]}))}})(d),y=s[p];if(!y||h&&!h.has(p))return;v(e,l);let w,x=[],S=e=>(x.push(e),()=>{let t=x.indexOf(e);t>=0&&x.splice(t,1)}),$={plugin:p,el:e,attr:l},A=(e,t)=>Object.assign(new Error(`${r[0]}${p}: ${e}`),{info:{...$,...t}}),k=e=>o(e,$),E=new WeakSet,M=e=>{e instanceof Promise&&!E.has(e)&&(E.add(e),e.catch(k))},T={el:e,plugin:p,attr:l,key:m,value:f,mods:g,cased:(e="camel")=>((e,t)=>{let r=i[t];if(!r)throw new Error(`unknown case "${t}"`);return e.split(".").map(e=>{let t=/^_+/.exec(e)?.[0]??"";return t+r(e.slice(t.length))}).join(".")})(m??"",g.get("case")?.[0]||e),evaluate:(t,...r)=>{if(y.literal&&!g.has("dynamic"))return f;w??=a(f,["el","evt",...y.args??[]]);let l={el:e,evt:t,store:n,runtime:c,error:A,cleanup:S,report:k},i=new Proxy({},{get:(e,t)=>(...e)=>{let r=c.call(t,l,e);return M(r),r}}),o=w(n,i,e,t,...r);return M(o),o},effect:e=>{S(((e,r)=>{let l=t;t=void 0;try{return((e,r)=>{let l=new L(e,r);t?.d.add(l);try{l.y(),b||j()}catch(e){throw l.m(),e}return()=>l.m()})(e,r)}finally{t=l}})(e,k))},listen:(e,t,r,l)=>{let n=e=>{try{r(e)}catch(e){k(e)}};e.addEventListener(t,n,l),S(()=>e.removeEventListener(t,n,l))},cleanup:S,error:A,report:k,store:n,runtime:c},O=u.get(e);O||(O=new Map,u.set(e,O)),O.set(l,()=>{for(let e of x.splice(0))e()});try{for(let[e,t]of[["key",m],["value",f]]){let r=y[e];if(r&&"required"===r==!t)throw A(`${"required"===r?"needs a":"takes no"} ${e}`)}let e=y.mount(T);"function"==typeof e?S(e):M(e)}catch(e){k(e)}},w=(e,t)=>{for(let l of e)if(!p(l))for(let{name:e,value:n}of[...l.attributes]){let a=W(r,e);a&&!u.get(l)?.has(e)&&y(l,e,a,n,t)}},x=new MutationObserver(e=>{for(let{type:t,target:l,attributeName:n,addedNodes:a,removedNodes:i}of e)if("childList"===t){for(let e of i)e.isConnected||g(H(e));for(let e of a)w(H(e))}else if(n&&V(l)&&!p(l)){let e=W(r,n);if(!e)continue;let t=l.getAttribute(n);null===t?v(l,n):y(l,n,e,t)}}),S=(e=document.documentElement,t=!0,r)=>{m||(w(H(e),r),t&&!d.has(e)&&(x.observe(e,{subtree:!0,childList:!0,attributes:!0}),d.add(e)))},$=(...e)=>{let t=new Set;for(let r of e)c[`${r.type}s`][r.name]=r,"attribute"===r.type&&t.add(r.name);if(t.size)for(let e of d)S(e,!1,t)},A=n.onPatch(e=>c.emit("signal-patch",e));$(...e.plugins??[]);let k={runtime:c,store:n,get $(){return n.$},apply:(e,t)=>S(e,t),use:$,destroy:()=>{m=!0,x.disconnect(),A(),g([...u.keys()]),d.clear()}};return(e.autoStart??!0)&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>k.apply(),{once:!0}):k.apply()),k},F=(e,t,r)=>e&t?"required":e&r?"forbidden":void 0,_=(e,t,r,l)=>({type:"attribute",name:e,key:F(t,1,2),value:F(t,4,8),literal:!!(32&t),args:l,mount:r}),U=(e,t)=>({type:"action",name:e,call:t}),B=(e,t)=>({type:"handler",name:e,handle:t}),J=(e,t,r)=>{!1===r||null==r?e.removeAttribute(t):e.setAttribute(t,!0===r?"":String(r))},Z=_("attr",4,({el:e,key:t,cased:r,evaluate:l,effect:n})=>{n(()=>{if(t)return J(e,r("kebab"),l());let n=l();for(let t in n)J(e,t,n[t])})}),K=_("boost",10,({el:e,store:t,runtime:r,listen:l,error:n,cleanup:a,report:i})=>{let o={el:e,store:t,runtime:r,error:n,cleanup:a,report:i},s=location.pathname+location.search,c=(t,l,n,a)=>{n.preventDefault();let c=r.call(l,{...o,el:a??e,evt:n},[t.href,{contentType:a&&"form"}]);Promise.resolve(c).then(e=>{let r=new URL(e&&(e.redirected||a&&"get"===l)?e.url:t.href);s=r.pathname+r.search,history.pushState(null,"",r.href);let n=r.hash&&document.querySelector(r.hash);n?n.scrollIntoView():scrollTo(0,0)},i)};l(e,"click",e=>{let t=e.target.closest("a[href]");t&&!(e.defaultPrevented||e.button||e.metaKey||e.ctrlKey||e.shiftKey||t.target)&&!t.hasAttribute("download")&&t.origin===location.origin&&(!t.hash||t.pathname!==location.pathname||t.search!==location.search)&&c(new URL(t.href),"get",e)}),l(e,"submit",e=>{let t=e.target,r=r=>e.submitter?.getAttribute(`form${r}`)??t.getAttribute(r),l=(r("method")??"get").toLowerCase(),n=new URL(r("action")||location.href,location.href);!e.defaultPrevented&&!t.target&&"dialog"!==l&&n.origin===location.origin&&c(n,"post"===l?"post":"get",e,t)}),l(window,"popstate",()=>{let e=location.pathname+location.search;e!==s&&(s=e,Promise.resolve(r.call("get",o,[location.href,{}])).then(void 0,i))})}),G=_("indicator",0,({el:e,key:t,value:r,cased:l,store:n,listen:a})=>{let i=t?l():r.trim(),o=new Set;return n.set(i,!1),a(document,"sigmx-fetch",t=>{let{el:r,type:l,rid:a}=t.detail;if("started"===l&&e.contains(r))o.add(a);else{if("finished"!==l)return;o.delete(a)}n.set(i,o.size>0)}),()=>n.set(i,!1)}),Q=_("class",4,({el:e,key:t,cased:r,evaluate:l,effect:n})=>{let a=new Set;return n(()=>{let n=t?{[r("kebab")]:l()}:l(),i=new Set;for(let t in n)for(let r of t.split(/\s+/).filter(Boolean))i.add(r),n[t]?(e.classList.contains(r)||a.add(r),e.classList.add(r)):a.delete(r)&&e.classList.remove(r);for(let t of a)!i.has(t)&&a.delete(t)&&e.classList.remove(t)}),()=>e.classList.remove(...a)}),X=_("cloak",10,({el:e,attr:t})=>e.removeAttribute(t)),Y=_("collapse",6,({el:e,mods:t,evaluate:r,effect:l,cleanup:n})=>{let a,i,o=e.style,s=u(t.get("duration"),250),c=matchMedia("(prefers-reduced-motion: reduce)").matches,d=[o.height,o.overflow,o.transition],f=!0,h=e=>{o.transition="",o.overflow=e?"":"hidden",o.height=e?"":"0px"};l(()=>{let t=!!r();if(t===i)return;if(i=t,clearTimeout(a),f||c)return f=!1,h(t);let l=`${e.getBoundingClientRect().height}px`;o.overflow="hidden",o.height=t?"0px":l,e.getBoundingClientRect(),o.transition=`height ${s}ms ease`,o.height=t?`${e.scrollHeight}px`:"0px",a=setTimeout(()=>h(t),s+20)}),n(()=>{clearTimeout(a),[o.height,o.overflow,o.transition]=d})}),ee=_("signals",4,({key:e,cased:t,evaluate:r,store:l,mods:n})=>{let a=r();l.merge(e?c({},t(),a):a,{ifMissing:n.has("ifmissing")})}),te=_("computed",5,({cased:e,evaluate:t,store:r})=>{let l=e();return r.define(l,new T(()=>t())),()=>r.remove(l)}),re=_("ref",0,({el:e,key:t,value:r,cased:l,store:n})=>{let a=t?l():r.trim();return n.set(a,e),()=>{P(()=>n.get(a))===e&&n.remove(a)}}),le=_("on",21,({el:e,mods:t,cased:r,evaluate:l,listen:n,cleanup:a})=>{let i=r("kebab"),o=t.has("outside"),s=t.has("window")?window:t.has("document")||o||i.startsWith("sigmx-")?document:e,c=f(e=>l(e),t,a);n(s,i,r=>{o&&e.contains(r.target)||((t.has("prevent")||"submit"===i&&e instanceof HTMLFormElement)&&r.preventDefault(),t.has("stop")&&r.stopPropagation(),c(r))},{once:t.has("once")})}),ne=_("on-raf",22,({mods:e,evaluate:t,cleanup:r})=>{let l=f(()=>t(),e,r),n=requestAnimationFrame(function e(){l(),n=requestAnimationFrame(e)});return()=>cancelAnimationFrame(n)}),ae=_("html",6,({el:e,evaluate:t,effect:r})=>r(()=>{e.innerHTML=String(t()??"")})),ie=_("style",4,({el:e,key:t,cased:r,evaluate:l,effect:a})=>{let i=new Map,o=(t,r)=>{i.has(t)||i.set(t,e.style.getPropertyValue(t)),r||0===r?e.style.setProperty(t,String(r)):e.style.setProperty(t,i.get(t)??"")};return a(()=>{let e=t?{[r("kebab")]:l()}:l();for(let t of i.keys())t in e||o(t,"");for(let t in e)o(t.startsWith("--")?t:n(t),e[t])}),()=>{for(let[t,r]of i)e.style.setProperty(t,r)}}),oe={9:/\d/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},se=_("mask",38,({el:e,evaluate:t,listen:r,effect:l})=>{let n=e,a="",i=()=>{let e=((e,t)=>{let r="",l=0;for(let n of e){if(l>=t.length)break;let e=oe[n];if(e){for(;l<t.length&&!e.test(t[l]);)l++;if(l>=t.length)break;r+=t[l++]}else r+=n,t[l]===n&&l++}return r})(a,n.value);if(e!==n.value){let t=n.selectionStart,r=null===t||t>=n.value.length;n.value=e,r||n.setSelectionRange(t,t),n.dispatchEvent(new Event("input",{bubbles:!0}))}};r(n,"input",i),l(()=>{a=String(t()??""),i()})}),ce=_("match-media",37,({cased:e,evaluate:t,store:r,effect:l,cleanup:n})=>{let a,i=e(),o=()=>r.set(i,!!a?.matches),s=()=>a?.removeEventListener("change",o);l(()=>{let e=String(t()).trim();/^[\w-]+\s*:/.test(e)&&(e=`(${e})`),s(),a=window.matchMedia(e),o(),a.addEventListener("change",o)}),n(s)}),ue=_("init",22,({mods:e,evaluate:t,cleanup:r})=>{f(()=>t(),e,r)()}),de=_("on-signal-patch",20,({key:e,cased:t,mods:r,evaluate:l,listen:n,cleanup:a})=>{let i=e?t():"",o=!1,s=f(e=>{if(!o){o=!0;try{l(void 0,e)}finally{o=!1}}},r,a);n(document,"sigmx-signal-patch",e=>{(!i||((e,t)=>{let r=e;for(let e of t.split(".")){if(null===r)return!0;if("object"!=typeof r||!(e in r))return!1;r=r[e]}return!0})(e.detail,i))&&s(e.detail)})},["patch"]),fe=_("remove-me",34,({el:e,evaluate:t,value:r,cleanup:l,error:n})=>{let a=r?String(t()):"";if(a&&u([a],-1)<0)throw n(`bad delay "${a}"`);let i=setTimeout(()=>e.remove(),u([a],0));l(()=>clearTimeout(i))}),he=(e,t,r)=>[...e.keys()].find(e=>t.test(e))??r,pe=_("scroll-into-view",10,({el:e,mods:t})=>{e.scrollIntoView({behavior:he(t,/^(smooth|instant|auto)$/,"smooth"),block:he(t,/^v(start|center|end|nearest)$/,"vcenter").slice(1)}),t.has("focus")&&e.focus?.()}),me=_("on-resize",22,({el:e,mods:t,evaluate:r,cleanup:l})=>{let n=f(()=>r(),t,l),a=new ResizeObserver(()=>n());return a.observe(e),()=>a.disconnect()}),ge=_("json-signals",2,({el:e,value:t,evaluate:r,effect:l,store:n})=>{let a=t?r():void 0;l(()=>{e.textContent=JSON.stringify(n.snapshot(a),null,2)})}),ve=_("persist",0,({key:e,value:t,evaluate:r,store:l,effect:n})=>{let a=e||"sigmx",i=t?r():void 0;try{let e=localStorage.getItem(a);e&&l.merge(JSON.parse(e))}catch{}n(()=>{try{localStorage.setItem(a,JSON.stringify(l.snapshot(i,{computed:!1})))}catch{}})}),ye=_("teleport",38,({el:e,evaluate:t,error:r})=>{let l=String(t()),n=document.querySelector(l);if(!n)throw r(`no element matches "${l}"`);if(e.parentElement===n)return;let a=n;(a.moveBefore??a.insertBefore).call(a,e,null)}),we=_("text",6,({el:e,evaluate:t,effect:r})=>r(()=>{e.textContent=String(t()??"")})),be=_("on-interval",22,({mods:e,evaluate:t})=>{let r=e.get("duration"),l=setInterval(()=>t(),u(r,1e3));return()=>clearInterval(l)}),xe=_("transition",6,({el:e,mods:t,evaluate:r,effect:l,cleanup:n})=>{let a,i,o=e.style,s=matchMedia("(prefers-reduced-motion: reduce)").matches?0:u(t.get("duration"),200),c={opacity:0},d={opacity:1},f=o.display,h="none"===f?"":f,p=!0;l(()=>{let t=!!r();if(t!==i){if(i=t,a?.cancel(),p||!e.animate)return p=!1,void(o.display=t?h:"none");t&&(o.display=h),a=e.animate(t?[c,d]:[d,c],{duration:s,easing:"ease-out",fill:"forwards"}),a.onfinish=()=>{a?.cancel(),t||(o.display="none")}}}),n(()=>{a?.cancel(),o.display=f})}),Se=e=>{let t=/^\s*(-?\d*\.?\d+)([a-z%]*)\s*$/i.exec(e);return t?[+t[1],t[2]]:void 0},$e=_("animate",5,({el:e,mods:t,cased:r,evaluate:l,effect:n,cleanup:a})=>{let i,o=r("kebab"),s=u(t.get("duration"),300),c=matchMedia("(prefers-reduced-motion: reduce)").matches,d=t=>e.style.setProperty(o,t),f=0,h=!0;n(()=>{let t=String(l());if(t===i)return;i=t,cancelAnimationFrame(f);let r=Se(e.style.getPropertyValue(o)||getComputedStyle(e).getPropertyValue(o)),n=Se(t);if(h||c||s<=0||!r||!n||r[1]!==n[1])return h=!1,d(t);let[a,u]=r,p=n[0],m=performance.now(),g=e=>{let t=Math.min(1,(e-m)/s);d(`${a+(p-a)*(1-(1-t)**2)}${u}`),t<1&&(f=requestAnimationFrame(g))};f=requestAnimationFrame(g)}),a(()=>cancelAnimationFrame(f))}),Ae=e=>String(e??""),ke=_("bind",0,({el:e,key:t,value:r,cased:l,mods:n,store:a,listen:i,effect:o})=>{let s,c=t?l():r.trim(),u=()=>a.get(c),d=e=>"number"==typeof u()?+e:e,f=e,h=e instanceof HTMLInputElement?f.type:"",p=(e,...t)=>({n:e,r:e=>{Ae(e)!==f.value&&!f.validity?.badInput&&(f.value=Ae(e))},s:t});if("checkbox"===h){let t=e.hasAttribute("value")&&"on"!==f.value;s={n:()=>{let e=u();if(Array.isArray(e)){let t=new Set(e);return f.checked?t.add(f.value):t.delete(f.value),[...t]}return t?f.checked?f.value:"":f.checked},r:e=>{f.checked=Array.isArray(e)?e.includes(f.value):t?e===f.value:!!e},s:["input"]}}else if("radio"===h)f.name||=c,s={n:()=>f.checked?d(f.value):u(),r:e=>f.checked=String(e)===f.value,s:["input"]};else{if("file"===h)return void i(e,"change",()=>(e=>Promise.all([...e.files??[]].map(e=>new Promise(t=>{let r=new FileReader;r.onloadend=()=>t({name:e.name,type:e.type,size:e.size,contents:String(r.result).split(",")[1]??""}),r.readAsDataURL(e)}))))(f).then(e=>a.set(c,e)));if(h){let e="number"===h||"range"===h;s=p(()=>e&&""!==f.value?+f.value:f.value,"input")}else s=e instanceof HTMLSelectElement?{n:()=>e.multiple?[...e.selectedOptions].map(e=>d(e.value)):d(e.value),r:t=>{if(e.multiple)for(let r of e.options)r.selected=Array.isArray(t)&&t.map(String).includes(r.value);else e.value=Ae(t)},s:["change"]}:"value"in e?p(()=>f.value,"input","change"):{n:()=>e.getAttribute("value"),r:t=>e.setAttribute("value",Ae(t)),s:["change"]}}if(!a.has(c)){let e=s.n();void 0!==e&&""!==e&&a.set(c,e)}let m=()=>a.set(c,s.n());for(let t of[...n.get("event")??s.s,"sigmx-prop-change"])i(e,t,m);o(()=>s.r(u()))}),Ee=e=>"string"==typeof e?e:JSON.stringify(e),Me=()=>new URLSearchParams(location.search),Te=_("query-string",1,({key:e,value:t,mods:r,evaluate:l,cased:n,store:a,listen:i,effect:o})=>{let s=r.has("history"),c=!1;{let r=e,u=n(),d=t?l():"",f=e=>{let t=e.get(r);a.set(u,null===t?d:"string"==typeof d?t:(e=>{try{return JSON.parse(e)}catch{return e}})(t))};(!a.has(u)||Me().has(r))&&f(Me()),((e,t)=>{o(()=>{let e=Me();if(t(e),c)return;let r=String(e),l=`${location.pathname}${r?`?${r}`:""}${location.hash}`;l!==location.pathname+location.search+location.hash&&window.history[s?"pushState":"replaceState"](null,"",l)}),s&&i(window,"popstate",()=>{c=!0;try{e(Me())}finally{c=!1}})})(f,e=>{let t=a.get(u);void 0===t||((e,t)=>Ee(e)===Ee(t))(t,d)?e.delete(r):e.set(r,Ee(t))})}}),Le=_("replace-url",6,({evaluate:e,effect:t})=>t(()=>history.replaceState(history.state,"",new URL(String(e()),location.href)))),Oe=_("custom-validity",6,({el:e,evaluate:t,effect:r,error:l})=>{if(!("setCustomValidity"in e))throw l("only works on form fields");let n=e;return r(()=>n.setCustomValidity(String(t()??""))),()=>n.setCustomValidity("")}),Pe=_("on-intersect",22,({el:e,mods:t,evaluate:r,cleanup:l})=>{let n=+(t.get("threshold")?.join(".")??0),a=Number.isFinite(n)?Math.min(100,Math.max(0,n))/100:0,i=f(()=>r(),t,l),o=new IntersectionObserver(e=>{for(let r of e)r.isIntersecting!==t.has("exit")&&(i(),t.has("once")&&o.disconnect())},{threshold:a});return o.observe(e),()=>o.disconnect()}),je=_("show",6,({el:e,evaluate:t,effect:r})=>{let l="none"===e.style.display?"":e.style.display;return r(()=>{e.style.display=t()?l:"none"}),()=>{e.style.display=l}}),Ne=_("effect",22,e=>e.effect(()=>e.evaluate())),Ce=U("setAll",({store:e},t,r)=>O(()=>P(()=>{for(let l of e.paths(r,{computed:!1}))e.set(l,t)}))),Ie=U("toggleAll",({store:e},t)=>O(()=>P(()=>{for(let r of e.paths(t,{computed:!1}))e.set(r,!e.get(r))}))),qe=U("confirm",(e,t)=>window.confirm(t)),Re=U("clipboard",(e,t,r=!1)=>navigator.clipboard.writeText(r?(new TextDecoder).decode(Uint8Array.from(atob(t),e=>e.charCodeAt(0))):t)),ze=U("dispatch",({el:e},t,r)=>e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0}))),Ve=U("intl",({error:e},t,r,l,n)=>{let a=Intl[t];if(!a)throw e(`unknown @intl type "${t}"`);let i=new a(n,l);return(i.select??i.of??i.format).call(i,..."RelativeTimeFormat"===t?r:[r])??""}),He=U("fit",(e,t,r,l,n,a,i=!1,o=!1)=>{let s=l===r?0:(t-r)/(l-r);i&&(s=Math.min(1,Math.max(0,s)));let c=n+s*(a-n);return o?Math.round(c):c}),We=(e,t={})=>{let r="",l=[];for(let n of e.split(/\r?\n/)){let e=n.indexOf(":");if(!e)continue;let a=e<0?n:n.slice(0,e),i=(e<0?"":n.slice(e+1)).replace(/^ /,"");"event"===a?r=i:"data"===a?l.push(i):"id"===a?t.id=i:"retry"===a&&/^\d+$/.test(i)&&(t.retry=+i)}if(l.length)return{event:r||"message",data:l.join("\n"),id:t.id,retry:t.retry}},De=async(e,t)=>{let r=e.getReader(),l=new TextDecoder,n={},a="",i=0,o=e=>{let r=We(e,n);r&&t(r)};for(;;){let{value:e,done:t}=await r.read();a+=l.decode(e,{stream:!t});let n=/\r?\n\r?\n/g;n.lastIndex=i;for(let e=n.exec(a);e;e=n.exec(a))o(a.slice(0,e.index)),a=a.slice(e.index+e[0].length),n.lastIndex=0;if(i=Math.max(0,a.length-3),t){o(a);break}}},Fe=e=>{let t={};for(let r of e.split("\n")){let e=r.indexOf(" "),l=e<0?r:r.slice(0,e),n=e<0?"":r.slice(e+1);t[l]=l in t?`${t[l]}\n${n}`:n}return t},_e=new Map,Ue=0,Be=(e,t,r)=>{for(let l of t){let t=e.headers.get(`sigmx-${l}`);t&&(r[a(l)]=t)}return r},Je=(e,t)=>U(e,(e,r,l)=>(async(e,t,r,l={})=>{let{el:n,evt:a,store:i,runtime:o,error:s}=t;if(!r)throw s(`@${e.toLowerCase()} needs a URL`);let c=new URL(r,location.href),u=`${e} ${c.href}`,d="GET"!==e&&"DELETE"!==e,f=new Headers({Accept:"text/event-stream, text/html, application/json","Sigmx-Request":"true"});for(let[e,t]of new Headers(l.headers))f.set(e,t);let h,p=e=>{d&&!f.has("Content-Type")&&f.set("Content-Type",e)};if("json"===(l.contentType??"json")){let e=JSON.stringify(l.payload??P(()=>i.snapshot(l.filter??{exclude:/(^|\.)_/})));d?(h=e,p("application/json")):c.searchParams.set("sigmx",e)}else{let e=l.selector?document.querySelector(l.selector):n.closest("form");if(!e)throw s("no form found",{selector:l.selector});if(!e.noValidate&&!e.checkValidity())return void e.reportValidity();let t=a instanceof SubmitEvent?a.submitter:n instanceof HTMLButtonElement&&n.form===e&&"submit"===n.type?n:null,r=new FormData(e,t),i=new URLSearchParams(r);if(d)"multipart/form-data"===e.enctype?h=r:(h=i,p("application/x-www-form-urlencoded"));else for(let[e,t]of i)c.searchParams.append(e,t)}let m=new AbortController;"none"!==l.abort&&(_e.get(u)?.abort(),_e.set(u,m));let g,v,y,w=t.cleanup(()=>m.abort()),b=++Ue,x=(t,l)=>o.emit("fetch",{el:n,type:t,method:e,url:r,rid:b,...l}),S={attempts:5,interval:1e3,factor:2,max:3e4,...l.retry},$=0,A=S.interval,k=e=>{try{e()}catch(e){throw y=e,e}},E=async()=>{if($++>=S.attempts)throw new Error("retries exhausted");await((e,t)=>new Promise(r=>{if(t.aborted)return r();let l=setTimeout(r,e);t.addEventListener("abort",()=>{clearTimeout(l),r()},{once:!0})}))(A,m.signal),A=Math.min(A*S.factor,S.max)};x("started");try{for(;!m.signal.aborted;){g&&f.set("Last-Event-ID",g);try{let t=await fetch(c.href,{method:e,headers:f,body:h,signal:m.signal});v={url:t.url,status:t.status,redirected:t.redirected};let r=t.headers.get("content-type")??"";if(!t.ok){if(x("error",{status:t.status}),!S.onStatusError)return v;await E();continue}if(!t.body)return v;if(r.includes("text/event-stream")){if($=0,A=S.interval,await De(t.body,e=>{void 0!==e.id&&(g=e.id),e.retry&&(A=S.interval=e.retry);let t=Fe(e.data);k(()=>{o.emit("server-event",{el:n,event:e.event,data:t}),o.handle(e.event,t)})}),!l.reconnect)return v;await E();continue}let a=await t.text();return k(()=>{r.includes("text/html")?o.handle("patch-elements",Be(t,["selector","mode"],{elements:a})):r.includes("application/json")&&o.handle("patch-signals",Be(t,["only-if-missing"],{signals:a}))}),v}catch(e){if(m.signal.aborted)return v;if(y)throw e;await E()}}return v}catch(t){throw x("error",{message:t?.message}),s(`${e} ${r}: ${t?.message??t}`)}finally{m.abort(),w(),x("finished",v),_e.get(u)===m&&_e.delete(u)}})(t,e,r,l)),Ze=Je("get","GET"),Ke=Je("post","POST"),Ge=Je("put","PUT"),Qe=Je("patch","PATCH"),Xe=Je("delete","DELETE"),Ye=U("peek",(e,t)=>"function"==typeof t?P(t):t),et=U("ws",({el:e,runtime:t,cleanup:r},l,n={})=>{let a=new WebSocket(new URL(l,location.href.replace(/^http/,"ws")),n.protocols);return a.onmessage=r=>{if("string"==typeof r.data)for(let l of r.data.split(/(?:\r?\n){2,}/)){let r=We(l);if(!r)continue;let n=Fe(r.data);t.emit("server-event",{el:e,event:r.event,data:n}),t.handle(r.event,n)}},r(()=>a.close()),{send:e=>a.send("string"==typeof e?e:JSON.stringify(e)),close:()=>a.close(),socket:a}}),tt=new WeakSet,rt=e=>1===e?.nodeType,lt=e=>{if(rt(e))for(let t of[e,...e.querySelectorAll("script")]){if(!t.matches("script")||tt.has(t))continue;let e=document.createElement("script");for(let{name:r,value:l}of t.attributes)e.setAttribute(r,l);e.text=t.text,tt.add(e),t.replaceWith(e)}},nt=(e,t)=>{let r=document.importNode(e,!0);t(r),lt(r)},at=e=>[e,...e.querySelectorAll?.("[id]")??[]].filter(e=>rt(e)&&e.id),it=(e,t)=>at(e).some(e=>t.keep.has(e.id)),ot=(e,t,r)=>{try{e.moveBefore(t,r)}catch{e.insertBefore(t,r)}},st=(e,t)=>!(e.nodeName!==t.nodeName||rt(e)&&e.id&&e.id!==t.id),ct=(e,t,r)=>{e.nodeName===t.nodeName?rt(e)&&rt(t)?"script"!==t.localName||e.isEqualNode(t)?e.hasAttribute(r.ignore)&&t.hasAttribute(r.ignore)||(((e,t,r)=>{let l=new Set((t.getAttribute(r.preserve)??e.getAttribute(r.preserve)??"").split(/\s+/)),n=r=>!l.has(r)&&e.getAttribute(r)!==t.getAttribute(r),a=!1,i=e instanceof HTMLInputElement&&"file"!==e.type?["value","checked"]:e instanceof HTMLOptionElement?["selected"]:[];for(let r of i)n(r)&&(e[r]="value"===r?t.getAttribute(r)??"":t.hasAttribute(r),a=!0);e instanceof HTMLTextAreaElement&&!l.has("value")&&e.defaultValue!==t.defaultValue&&(e.value=t.defaultValue,a=!0);for(let{name:r,value:n}of t.attributes)!l.has(r)&&e.getAttribute(r)!==n&&e.setAttribute(r,n);for(let{name:r}of[...e.attributes])!l.has(r)&&!t.hasAttribute(r)&&e.removeAttribute(r);a&&(e instanceof HTMLOptionElement?e.closest("select"):e)?.dispatchEvent(new Event("sigmx-prop-change",{bubbles:!0}))})(e,t,r),e instanceof HTMLTemplateElement?e.innerHTML=t.innerHTML:e.isEqualNode(t)||ut(e,t,r)):nt(t,t=>e.replaceWith(t)):e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue):nt(t,t=>e.replaceWith(t))},ut=(e,t,r)=>{let l=e.firstChild,n=e=>{for(;l&&l!==e;){let e=l;l=l.nextSibling,rt(e)&&r.keep.get(e.id)===e||e.remove()}return l===e};for(let a of[...t.childNodes]){let t=rt(a)&&r.keep.get(a.id);if(t){let i=l;for(;i&&i!==t;)i=i.nextSibling;i?(n(t),l=t.nextSibling):ot(e,t,l),ct(t,a,r);continue}let i=l;for(;i&&!st(i,a);)i=i.nextSibling;if(i)n(i),l=i.nextSibling,ct(i,a,r);else if(rt(a)&&it(a,r)){let t=document.importNode(a,!1);e.insertBefore(t,l),ct(t,a,r)}else nt(a,t=>e.insertBefore(t,l))}n(null)},dt=(e,t,r)=>{let l=new Map(at(t).map(e=>[e.id,e.tagName]));return{keep:new Map(at(e).flatMap(e=>l.get(e.id)===e.tagName?[[e.id,e]]:[])),ignore:r.ignoreAttr??"data-ignore-morph",preserve:r.preserveAttr??"data-preserve-attr"}},ft=(e,t,r={})=>{ct(e,t,dt(e,t,r))},ht=((e={})=>D({...e,expressions:e.expressions??w(e.compile??h)}))({plugins:[Z,ke,Q,te,Oe,Ne,G,ue,ge,ce,le,Pe,be,ne,me,de,ve,Te,re,Le,pe,je,ee,ie,we,Re,He,Ve,Ye,Ce,Ie,$e,Xe,Ze,Qe,Ke,Ge,B("patch-elements",(e,{elements:t="",selector:r="",mode:l="outer"})=>{let n={ignoreAttr:e.attr("ignore-morph"),preserveAttr:e.attr("preserve-attr")},a=(e=>{if(/^\s*<(!doctype|html)[\s>]|<\/(html|head|body)>/i.test(e))return(new DOMParser).parseFromString(e,"text/html");let t=document.createElement("template");return t.innerHTML=e,t.content})(t);if(a instanceof Document){for(let{name:e,value:t}of a.documentElement.attributes)document.documentElement.setAttribute(e,t);return a.head.childNodes.length&&((e,t)=>{let r=[...t.children];for(let t of[...e.children]){let e=r.findIndex(e=>e.isEqualNode(t));e<0?t.remove():r.splice(e,1)}for(let t of r){let r=document.importNode(t,!0);e.append(r),lt(r)}})(document.head,a.head),void ft(document.body,a.body,n)}let i=(e,t)=>{let r=[...t.childNodes];if("outer"===l&&1===r.length&&1===r[0].nodeType)ft(e,r[0],n);else if("inner"===l)((e,t,r={})=>{ut(e,t,dt(e,t,r))})(e,t,n);else{"outer"===l||"replace"===l?e.replaceWith(t):e[l](t);for(let e of r)lt(e)}};if(r){let e=[...document.querySelectorAll(r)];if("remove"===l)for(let t of e)t.remove();else e.forEach((t,r)=>{i(t,r+1<e.length?a.cloneNode(!0):a)})}else{if("outer"!==l&&"replace"!==l)throw new Error(`mode "${l}" needs a selector`);for(let e of[...a.children]){let t=e.id&&document.getElementById(e.id);if(t){let r=document.createDocumentFragment();r.append(e),i(t,r)}}}}),B("patch-signals",(e,{signals:t,onlyIfMissing:r})=>{if(!t)return;let l;try{l=JSON.parse(t)}catch{l=e.compiler([],`return (${t})`)()}e.store.merge(l,{ifMissing:"true"===r})}),K,X,Y,ae,se,fe,ye,xe,qe,ze,et]});globalThis.sigmx=ht;export{ht as sigmx};
|
package/dist/standalone.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/standalone.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { createSigmx } from './kernel/index.js';\nimport { all } from './presets/all.js';\n\nexport const sigmx = createSigmx({ plugins: all });\n(globalThis as any).sigmx = sigmx;\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,mBAAmB;AAC5B,SAAS,WAAW;AAEb,MAAM,QAAQ,YAAY,EAAE,SAAS,IAAI,CAAC;AAChD,WAAmB,QAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/vite.d.ts
CHANGED
|
@@ -31,12 +31,12 @@ export declare const EXPRESSIONS_ID = "virtual:sigmx-expressions";
|
|
|
31
31
|
/** Serves `virtual:sigmx-plugins`, exporting the `plugins` array your source actually uses. */
|
|
32
32
|
export declare const sigmxAuto: (o?: AutoOptions) => {
|
|
33
33
|
name: string;
|
|
34
|
-
resolveId: (id: string) =>
|
|
34
|
+
resolveId: (id: string) => "\0virtual:sigmx-plugins" | undefined;
|
|
35
35
|
load(this: any, id: string): string | undefined;
|
|
36
36
|
};
|
|
37
37
|
/** Serves `virtual:sigmx-expressions`, a table of every attribute expression compiled at build time. */
|
|
38
38
|
export declare const sigmxPrecompile: (o?: PrecompileOptions) => {
|
|
39
39
|
name: string;
|
|
40
|
-
resolveId: (id: string) =>
|
|
40
|
+
resolveId: (id: string) => "\0virtual:sigmx-expressions" | undefined;
|
|
41
41
|
load(this: any, id: string): string | undefined;
|
|
42
42
|
};
|
package/dist/vite.js
CHANGED
|
@@ -1,38 +1,71 @@
|
|
|
1
1
|
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
2
|
import { isAbsolute, join, relative } from "node:path";
|
|
3
|
-
import { extractExpressions, generateTable } from "./kernel/precompile.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
3
|
+
import { extractExpressions, generateTable, lintSource } from "./kernel/precompile.js";
|
|
4
|
+
import {
|
|
5
|
+
builtinPlugins,
|
|
6
|
+
customPluginMeta,
|
|
7
|
+
generatePluginsModule,
|
|
8
|
+
selectPlugins
|
|
9
|
+
} from "./kernel/scan.js";
|
|
10
|
+
const DEFAULT_EXTENSIONS = [
|
|
11
|
+
".astro",
|
|
12
|
+
".html",
|
|
13
|
+
".mdx",
|
|
14
|
+
".md",
|
|
15
|
+
".ts",
|
|
16
|
+
".tsx",
|
|
17
|
+
".js",
|
|
18
|
+
".jsx",
|
|
19
|
+
".svelte",
|
|
20
|
+
".vue",
|
|
21
|
+
".php",
|
|
22
|
+
".erb",
|
|
23
|
+
".twig",
|
|
24
|
+
".hbs"
|
|
25
|
+
];
|
|
6
26
|
const walk = (dir, exts, out = []) => {
|
|
27
|
+
const self = statSync(dir, { throwIfNoEntry: false });
|
|
28
|
+
if (self?.isFile()) {
|
|
29
|
+
if (exts.some((x) => dir.endsWith(x))) out.push(dir);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
7
32
|
let entries = [];
|
|
8
33
|
try {
|
|
9
|
-
entries = readdirSync(dir);
|
|
34
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
10
35
|
} catch {
|
|
11
36
|
return out;
|
|
12
37
|
}
|
|
13
38
|
for (const e of entries) {
|
|
14
|
-
if (e === "node_modules" || e.startsWith(".")) continue;
|
|
15
|
-
const p = join(dir, e);
|
|
16
|
-
if (
|
|
17
|
-
else if (exts.some((x) => p.endsWith(x))) out.push(p);
|
|
39
|
+
if (e.name === "node_modules" || e.name.startsWith(".")) continue;
|
|
40
|
+
const p = join(dir, e.name);
|
|
41
|
+
if (e.isDirectory()) walk(p, exts, out);
|
|
42
|
+
else if (e.isFile() && exts.some((x) => p.endsWith(x))) out.push(p);
|
|
18
43
|
}
|
|
19
44
|
return out;
|
|
20
45
|
};
|
|
21
46
|
const files = (o) => {
|
|
22
47
|
const root = o.root ?? process.cwd();
|
|
23
48
|
const exts = o.extensions ?? DEFAULT_EXTENSIONS;
|
|
24
|
-
|
|
49
|
+
const found = (o.include ?? ["src", "index.html"]).flatMap((d) => walk(join(root, d), exts));
|
|
50
|
+
if (!found.length) console.warn("[sigmx] no source files found to scan; check the `include` option");
|
|
51
|
+
return found;
|
|
25
52
|
};
|
|
26
53
|
const customMeta = (root, custom = {}) => Object.entries(custom).flatMap(([exp, path]) => {
|
|
27
54
|
const abs = isAbsolute(path) ? path : join(root, path);
|
|
28
|
-
const meta = customPluginMeta(exp, readFileSync(abs, "utf8"),
|
|
29
|
-
if (!meta)
|
|
55
|
+
const meta = customPluginMeta(exp, readFileSync(abs, "utf8"), `/${relative(root, abs).replace(/\\/g, "/")}`);
|
|
56
|
+
if (!meta)
|
|
57
|
+
console.warn(
|
|
58
|
+
`[sigmx] could not read plugin metadata for "${exp}" in ${path}; include it via "always" if it must ship`
|
|
59
|
+
);
|
|
30
60
|
return meta ? [meta] : [];
|
|
31
61
|
});
|
|
32
62
|
const scanProject = (o = {}) => {
|
|
33
63
|
const root = o.root ?? process.cwd();
|
|
34
64
|
const list = files(o);
|
|
35
65
|
const sources = list.map((f) => readFileSync(f, "utf8"));
|
|
66
|
+
list.forEach((f, i) => {
|
|
67
|
+
for (const w of lintSource(sources[i], o.prefixes)) console.warn(`[sigmx] ${relative(root, f)}: ${w}`);
|
|
68
|
+
});
|
|
36
69
|
const sel = selectPlugins(sources, { prefixes: o.prefixes, always: o.always, custom: customMeta(root, o.custom) });
|
|
37
70
|
return { ...sel, files: list };
|
|
38
71
|
};
|
|
@@ -40,9 +73,9 @@ const AUTO_ID = "virtual:sigmx-plugins";
|
|
|
40
73
|
const EXPRESSIONS_ID = "virtual:sigmx-expressions";
|
|
41
74
|
const sigmxAuto = (o = {}) => ({
|
|
42
75
|
name: "sigmx-auto",
|
|
43
|
-
resolveId: (id) => id === AUTO_ID ?
|
|
76
|
+
resolveId: (id) => id === AUTO_ID ? `\0${AUTO_ID}` : void 0,
|
|
44
77
|
load(id) {
|
|
45
|
-
if (id !==
|
|
78
|
+
if (id !== `\0${AUTO_ID}`) return;
|
|
46
79
|
const sel = scanProject(o);
|
|
47
80
|
for (const f of sel.files) this.addWatchFile?.(f);
|
|
48
81
|
if (o.log ?? true) {
|
|
@@ -54,9 +87,9 @@ const sigmxAuto = (o = {}) => ({
|
|
|
54
87
|
});
|
|
55
88
|
const sigmxPrecompile = (o = {}) => ({
|
|
56
89
|
name: "sigmx-precompile",
|
|
57
|
-
resolveId: (id) => id === EXPRESSIONS_ID ?
|
|
90
|
+
resolveId: (id) => id === EXPRESSIONS_ID ? `\0${EXPRESSIONS_ID}` : void 0,
|
|
58
91
|
load(id) {
|
|
59
|
-
if (id !==
|
|
92
|
+
if (id !== `\0${EXPRESSIONS_ID}`) return;
|
|
60
93
|
const root = o.root ?? process.cwd();
|
|
61
94
|
const meta = [...builtinPlugins(), ...customMeta(root, o.custom)].filter((p) => p.type === "attribute");
|
|
62
95
|
const items = [];
|
package/dist/vite.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/vite.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { readdirSync, readFileSync, statSync } from 'node:fs';\nimport { isAbsolute, join, relative } from 'node:path';\nimport { extractExpressions, generateTable, lintSource } from './kernel/precompile.js';\nimport {\n builtinPlugins,\n customPluginMeta,\n generatePluginsModule,\n type PluginMeta,\n type Selection,\n selectPlugins,\n} from './kernel/scan.js';\n\nexport type ScanOptions = {\n /** Project root; defaults to the current working directory. */\n root?: string;\n /** Directories to scan, relative to root. Default `['src']`. */\n include?: string[];\n extensions?: string[];\n /** Attribute prefixes in use. Default `['data-']`. */\n prefixes?: string[];\n};\nexport type AutoOptions = ScanOptions & {\n /** Export names that ship no matter what, e.g. `['signals', 'httpGet']`. */\n always?: string[];\n /** Custom plugins: export name \u2192 module path (absolute or root-relative), e.g. `{ upper: 'src/plugins/upper.ts' }`. */\n custom?: Record<string, string>;\n /** Print the selection at build time. Default true. */\n log?: boolean;\n};\nexport type PrecompileOptions = ScanOptions & {\n /** Custom plugins whose expressions should be precompiled too. */\n custom?: Record<string, string>;\n};\n\nexport const DEFAULT_EXTENSIONS = [\n '.astro',\n '.html',\n '.mdx',\n '.md',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.svelte',\n '.vue',\n '.php',\n '.erb',\n '.twig',\n '.hbs',\n];\n\nexport const walk = (dir: string, exts: string[], out: string[] = []): string[] => {\n // `include` entries may be files (index.html) as well as directories.\n const self = statSync(dir, { throwIfNoEntry: false });\n if (self?.isFile()) {\n if (exts.some((x) => dir.endsWith(x))) out.push(dir);\n return out;\n }\n let entries: import('node:fs').Dirent[] = [];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const e of entries) {\n if (e.name === 'node_modules' || e.name.startsWith('.')) continue;\n const p = join(dir, e.name);\n if (e.isDirectory()) walk(p, exts, out);\n else if (e.isFile() && exts.some((x) => p.endsWith(x))) out.push(p);\n }\n return out;\n};\n\nconst files = (o: ScanOptions) => {\n const root = o.root ?? process.cwd();\n const exts = o.extensions ?? DEFAULT_EXTENSIONS;\n const found = (o.include ?? ['src', 'index.html']).flatMap((d) => walk(join(root, d), exts));\n if (!found.length) console.warn('[sigmx] no source files found to scan; check the `include` option');\n return found;\n};\n\nconst customMeta = (root: string, custom: Record<string, string> = {}): PluginMeta[] =>\n Object.entries(custom).flatMap(([exp, path]) => {\n const abs = isAbsolute(path) ? path : join(root, path);\n const meta = customPluginMeta(exp, readFileSync(abs, 'utf8'), `/${relative(root, abs).replace(/\\\\/g, '/')}`);\n if (!meta)\n console.warn(\n `[sigmx] could not read plugin metadata for \"${exp}\" in ${path}; include it via \"always\" if it must ship`,\n );\n return meta ? [meta] : [];\n });\n\n/** Scan once and pick plugins: what the Vite plugin and the CLI both do. */\nexport const scanProject = (o: AutoOptions = {}): Selection & { files: string[] } => {\n const root = o.root ?? process.cwd();\n const list = files(o);\n const sources = list.map((f) => readFileSync(f, 'utf8'));\n list.forEach((f, i) => {\n for (const w of lintSource(sources[i], o.prefixes)) console.warn(`[sigmx] ${relative(root, f)}: ${w}`);\n });\n const sel = selectPlugins(sources, { prefixes: o.prefixes, always: o.always, custom: customMeta(root, o.custom) });\n return { ...sel, files: list };\n};\n\nexport const AUTO_ID = 'virtual:sigmx-plugins';\nexport const EXPRESSIONS_ID = 'virtual:sigmx-expressions';\n\n/** Serves `virtual:sigmx-plugins`, exporting the `plugins` array your source actually uses. */\nexport const sigmxAuto = (o: AutoOptions = {}) => ({\n name: 'sigmx-auto',\n resolveId: (id: string) => (id === AUTO_ID ? `\\0${AUTO_ID}` : undefined),\n load(this: any, id: string) {\n if (id !== `\\0${AUTO_ID}`) return;\n const sel = scanProject(o);\n for (const f of sel.files) this.addWatchFile?.(f);\n if (o.log ?? true) {\n const names = sel.plugins.map((p) => p.export);\n console.info(`[sigmx] auto: ${names.length} plugins (${names.join(', ')}); ${sel.unused.length} unused`);\n }\n return generatePluginsModule(sel);\n },\n});\n\n/** Serves `virtual:sigmx-expressions`, a table of every attribute expression compiled at build time. */\nexport const sigmxPrecompile = (o: PrecompileOptions = {}) => ({\n name: 'sigmx-precompile',\n resolveId: (id: string) => (id === EXPRESSIONS_ID ? `\\0${EXPRESSIONS_ID}` : undefined),\n load(this: any, id: string) {\n if (id !== `\\0${EXPRESSIONS_ID}`) return;\n const root = o.root ?? process.cwd();\n const meta = [...builtinPlugins(), ...customMeta(root, o.custom)].filter((p) => p.type === 'attribute');\n const items = [];\n for (const f of files(o)) {\n this.addWatchFile?.(f);\n items.push(...extractExpressions(readFileSync(f, 'utf8'), meta, o.prefixes ?? ['data-']));\n }\n return generateTable(items);\n },\n});\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,aAAa,cAAc,gBAAgB;AACpD,SAAS,YAAY,MAAM,gBAAgB;AAC3C,SAAS,oBAAoB,eAAe,kBAAkB;AAC9D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,OACK;AAwBA,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,OAAO,CAAC,KAAa,MAAgB,MAAgB,CAAC,MAAgB;AAEjF,QAAM,OAAO,SAAS,KAAK,EAAE,gBAAgB,MAAM,CAAC;AACpD,MAAI,MAAM,OAAO,GAAG;AAClB,QAAI,KAAK,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,EAAG,KAAI,KAAK,GAAG;AACnD,WAAO;AAAA,EACT;AACA,MAAI,UAAsC,CAAC;AAC3C,MAAI;AACF,cAAU,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,EACpD,QAAQ;AACN,WAAO;AAAA,EACT;AACA,aAAW,KAAK,SAAS;AACvB,QAAI,EAAE,SAAS,kBAAkB,EAAE,KAAK,WAAW,GAAG,EAAG;AACzD,UAAM,IAAI,KAAK,KAAK,EAAE,IAAI;AAC1B,QAAI,EAAE,YAAY,EAAG,MAAK,GAAG,MAAM,GAAG;AAAA,aAC7B,EAAE,OAAO,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAG,KAAI,KAAK,CAAC;AAAA,EACpE;AACA,SAAO;AACT;AAEA,MAAM,QAAQ,CAAC,MAAmB;AAChC,QAAM,OAAO,EAAE,QAAQ,QAAQ,IAAI;AACnC,QAAM,OAAO,EAAE,cAAc;AAC7B,QAAM,SAAS,EAAE,WAAW,CAAC,OAAO,YAAY,GAAG,QAAQ,CAAC,MAAM,KAAK,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC;AAC3F,MAAI,CAAC,MAAM,OAAQ,SAAQ,KAAK,mEAAmE;AACnG,SAAO;AACT;AAEA,MAAM,aAAa,CAAC,MAAc,SAAiC,CAAC,MAClE,OAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAM;AAC9C,QAAM,MAAM,WAAW,IAAI,IAAI,OAAO,KAAK,MAAM,IAAI;AACrD,QAAM,OAAO,iBAAiB,KAAK,aAAa,KAAK,MAAM,GAAG,IAAI,SAAS,MAAM,GAAG,EAAE,QAAQ,OAAO,GAAG,CAAC,EAAE;AAC3G,MAAI,CAAC;AACH,YAAQ;AAAA,MACN,+CAA+C,GAAG,QAAQ,IAAI;AAAA,IAChE;AACF,SAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AAC1B,CAAC;AAGI,MAAM,cAAc,CAAC,IAAiB,CAAC,MAAuC;AACnF,QAAM,OAAO,EAAE,QAAQ,QAAQ,IAAI;AACnC,QAAM,OAAO,MAAM,CAAC;AACpB,QAAM,UAAU,KAAK,IAAI,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;AACvD,OAAK,QAAQ,CAAC,GAAG,MAAM;AACrB,eAAW,KAAK,WAAW,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAG,SAAQ,KAAK,WAAW,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE;AAAA,EACvG,CAAC;AACD,QAAM,MAAM,cAAc,SAAS,EAAE,UAAU,EAAE,UAAU,QAAQ,EAAE,QAAQ,QAAQ,WAAW,MAAM,EAAE,MAAM,EAAE,CAAC;AACjH,SAAO,EAAE,GAAG,KAAK,OAAO,KAAK;AAC/B;AAEO,MAAM,UAAU;AAChB,MAAM,iBAAiB;AAGvB,MAAM,YAAY,CAAC,IAAiB,CAAC,OAAO;AAAA,EACjD,MAAM;AAAA,EACN,WAAW,CAAC,OAAgB,OAAO,UAAU,KAAK,OAAO,KAAK;AAAA,EAC9D,KAAgB,IAAY;AAC1B,QAAI,OAAO,KAAK,OAAO,GAAI;AAC3B,UAAM,MAAM,YAAY,CAAC;AACzB,eAAW,KAAK,IAAI,MAAO,MAAK,eAAe,CAAC;AAChD,QAAI,EAAE,OAAO,MAAM;AACjB,YAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM;AAC7C,cAAQ,KAAK,iBAAiB,MAAM,MAAM,aAAa,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,SAAS;AAAA,IACzG;AACA,WAAO,sBAAsB,GAAG;AAAA,EAClC;AACF;AAGO,MAAM,kBAAkB,CAAC,IAAuB,CAAC,OAAO;AAAA,EAC7D,MAAM;AAAA,EACN,WAAW,CAAC,OAAgB,OAAO,iBAAiB,KAAK,cAAc,KAAK;AAAA,EAC5E,KAAgB,IAAY;AAC1B,QAAI,OAAO,KAAK,cAAc,GAAI;AAClC,UAAM,OAAO,EAAE,QAAQ,QAAQ,IAAI;AACnC,UAAM,OAAO,CAAC,GAAG,eAAe,GAAG,GAAG,WAAW,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,WAAW;AACtG,UAAM,QAAQ,CAAC;AACf,eAAW,KAAK,MAAM,CAAC,GAAG;AACxB,WAAK,eAAe,CAAC;AACrB,YAAM,KAAK,GAAG,mBAAmB,aAAa,GAAG,MAAM,GAAG,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AAAA,IAC1F;AACA,WAAO,cAAc,KAAK;AAAA,EAC5B;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sigmx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "htmx on steroids in a runtime smaller than htmx: server-driven HTML, streaming patches, signals and a state-preserving morph from a 4 KB core. Zero dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hypermedia",
|
|
@@ -74,6 +74,11 @@
|
|
|
74
74
|
"import": "./dist/kernel/precompile.js",
|
|
75
75
|
"default": "./dist/kernel/precompile.js"
|
|
76
76
|
},
|
|
77
|
+
"./server": {
|
|
78
|
+
"types": "./dist/server.d.ts",
|
|
79
|
+
"import": "./dist/server.js",
|
|
80
|
+
"default": "./dist/server.js"
|
|
81
|
+
},
|
|
77
82
|
"./scan": {
|
|
78
83
|
"types": "./dist/kernel/scan.d.ts",
|
|
79
84
|
"import": "./dist/kernel/scan.js",
|
|
@@ -94,17 +99,31 @@
|
|
|
94
99
|
},
|
|
95
100
|
"scripts": {
|
|
96
101
|
"check": "tsc --noEmit",
|
|
102
|
+
"lint": "biome check .",
|
|
103
|
+
"format": "biome format --write .",
|
|
97
104
|
"build": "node scripts/build.mjs",
|
|
98
105
|
"size": "node scripts/size.mjs",
|
|
99
|
-
"test": "node scripts/build.mjs && node --test tests/*.test.mjs",
|
|
106
|
+
"test": "node scripts/build.mjs && node --test tests/unit/*.test.mjs tests/dom/*.test.mjs tests/dom/*/*.test.mjs tests/audit/*.test.mjs",
|
|
107
|
+
"audit": "node tests/audit/run.mjs",
|
|
108
|
+
"test:unit": "node --test tests/unit/*.test.mjs",
|
|
109
|
+
"test:dom": "node --test tests/dom/*.test.mjs tests/dom/*/*.test.mjs",
|
|
110
|
+
"test:audit": "node --test tests/audit/*.test.mjs",
|
|
111
|
+
"test:browser": "playwright test",
|
|
112
|
+
"test:coverage": "node --test --experimental-test-coverage tests/unit/*.test.mjs tests/dom/*.test.mjs tests/dom/*/*.test.mjs",
|
|
113
|
+
"test:sdks": "npm --prefix sdks/astro test && npm --prefix sdks/hono test",
|
|
114
|
+
"test:all": "npm test && npm run test:browser && npm run test:sdks",
|
|
100
115
|
"dev": "node scripts/dev.mjs",
|
|
101
116
|
"compare": "node scripts/compare.mjs website/src/data/compare.json",
|
|
102
117
|
"prepublishOnly": "npm run check && npm test",
|
|
103
118
|
"prepack": "npm run build"
|
|
104
119
|
},
|
|
105
120
|
"devDependencies": {
|
|
121
|
+
"@biomejs/biome": "2.5.12",
|
|
122
|
+
"@happy-dom/global-registrator": "^20.14.0",
|
|
123
|
+
"@playwright/test": "^1.63.0",
|
|
106
124
|
"@types/node": "^22.20.1",
|
|
107
125
|
"esbuild": "^0.28.2",
|
|
126
|
+
"happy-dom": "^20.14.0",
|
|
108
127
|
"terser": "^5.51.2",
|
|
109
128
|
"typescript": "^5.9.0"
|
|
110
129
|
}
|
package/dist/auto.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const sigmx: import("./core/types.js").Sigmx;
|
package/dist/auto.js
DELETED
package/dist/auto.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/auto.ts"],
|
|
4
|
-
"sourcesContent": ["// Script-tag entry: registers every plugin and starts on DOM ready.\nimport { createSigmx } from './core/index.js'\nimport { all } from './presets/all.js'\n\nexport const sigmx = createSigmx({ plugins: all })\n"],
|
|
5
|
-
"mappings": "AACA,SAAS,mBAAmB;AAC5B,SAAS,WAAW;AAEb,MAAM,QAAQ,YAAY,EAAE,SAAS,IAAI,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/core/csp.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Compiler } from './expr.js';
|
|
2
|
-
/**
|
|
3
|
-
* Compiler for pages with a strict Content-Security-Policy: compiles through a nonce-bearing
|
|
4
|
-
* inline `<script>` (and a Trusted Types policy when present) instead of `new Function`.
|
|
5
|
-
* Pass as `createSigmx({ compile: cspCompiler(nonce) })`.
|
|
6
|
-
*/
|
|
7
|
-
export declare const cspCompiler: (nonce: string) => Compiler;
|
package/dist/core/csp.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const cspCompiler = (nonce) => {
|
|
2
|
-
if (!nonce) throw new Error("cspCompiler needs the page nonce");
|
|
3
|
-
const tt = window.trustedTypes;
|
|
4
|
-
const policy = tt?.createPolicy("sigmx", { createScript: (s) => s });
|
|
5
|
-
return (params, body) => {
|
|
6
|
-
const script = document.createElement("script");
|
|
7
|
-
script.nonce = nonce;
|
|
8
|
-
const text = `document.currentScript.f=function(${params.join(",")}){${body}}`;
|
|
9
|
-
script.text = policy ? policy.createScript(text) : text;
|
|
10
|
-
document.head.append(script);
|
|
11
|
-
script.remove();
|
|
12
|
-
const fn = script.f;
|
|
13
|
-
if (!fn) throw new Error("the Content-Security-Policy blocked expression compilation");
|
|
14
|
-
return fn;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export {
|
|
18
|
-
cspCompiler
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=csp.js.map
|
package/dist/core/csp.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/core/csp.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Compiler } from './expr.js'\n\n/**\n * Compiler for pages with a strict Content-Security-Policy: compiles through a nonce-bearing\n * inline `<script>` (and a Trusted Types policy when present) instead of `new Function`.\n * Pass as `createSigmx({ compile: cspCompiler(nonce) })`.\n */\nexport const cspCompiler = (nonce: string): Compiler => {\n if (!nonce) throw new Error('cspCompiler needs the page nonce')\n const tt = (window as any).trustedTypes\n const policy = tt?.createPolicy('sigmx', { createScript: (s: string) => s })\n return (params, body) => {\n const script = document.createElement('script')\n script.nonce = nonce\n const text = `document.currentScript.f=function(${params.join(',')}){${body}}`\n script.text = policy ? policy.createScript(text) : text\n document.head.append(script)\n script.remove()\n const fn = (script as any).f\n if (!fn) throw new Error('the Content-Security-Policy blocked expression compilation')\n return fn\n }\n}\n"],
|
|
5
|
-
"mappings": "AAOO,MAAM,cAAc,CAAC,UAA4B;AACtD,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,kCAAkC;AAC9D,QAAM,KAAM,OAAe;AAC3B,QAAM,SAAS,IAAI,aAAa,SAAS,EAAE,cAAc,CAAC,MAAc,EAAE,CAAC;AAC3E,SAAO,CAAC,QAAQ,SAAS;AACvB,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,QAAQ;AACf,UAAM,OAAO,qCAAqC,OAAO,KAAK,GAAG,CAAC,KAAK,IAAI;AAC3E,WAAO,OAAO,SAAS,OAAO,aAAa,IAAI,IAAI;AACnD,aAAS,KAAK,OAAO,MAAM;AAC3B,WAAO,OAAO;AACd,UAAM,KAAM,OAAe;AAC3B,QAAI,CAAC,GAAI,OAAM,IAAI,MAAM,4DAA4D;AACrF,WAAO;AAAA,EACT;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/core/engine.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Mods, Sigmx, SigmxOptions } from './types.js';
|
|
2
|
-
type Parsed = {
|
|
3
|
-
plugin: string;
|
|
4
|
-
key: string | undefined;
|
|
5
|
-
mods: Mods;
|
|
6
|
-
};
|
|
7
|
-
/** 'on:click__debounce.300ms__prevent' → { plugin: 'on', key: 'click', mods: {debounce: ['300ms'], prevent: []} } */
|
|
8
|
-
export declare const parseAttr: (raw: string) => Parsed;
|
|
9
|
-
export declare const createSigmx: (options?: SigmxOptions) => Sigmx;
|
|
10
|
-
export {};
|