sigmx 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/README.md +52 -41
  2. package/dist/cli.js +3 -1
  3. package/dist/cli.js.map +2 -2
  4. package/dist/kernel/compile.js.map +2 -2
  5. package/dist/kernel/contracts.d.ts +1 -8
  6. package/dist/kernel/index.d.ts +10 -11
  7. package/dist/kernel/index.js +10 -7
  8. package/dist/kernel/index.js.map +3 -3
  9. package/dist/kernel/precompile.d.ts +0 -2
  10. package/dist/kernel/precompile.js +11 -4
  11. package/dist/kernel/precompile.js.map +2 -2
  12. package/dist/kernel/precompiled.js.map +2 -2
  13. package/dist/kernel/reactive.d.ts +6 -10
  14. package/dist/kernel/reactive.js +4 -8
  15. package/dist/kernel/reactive.js.map +2 -2
  16. package/dist/kernel/runtime.js +19 -7
  17. package/dist/kernel/runtime.js.map +2 -2
  18. package/dist/kernel/scan.d.ts +1 -10
  19. package/dist/kernel/scan.js +24 -7
  20. package/dist/kernel/scan.js.map +2 -2
  21. package/dist/kernel/state.d.ts +1 -5
  22. package/dist/kernel/state.js +49 -22
  23. package/dist/kernel/state.js.map +2 -2
  24. package/dist/kernel/strict-csp.js.map +1 -1
  25. package/dist/lib/casing.js.map +2 -2
  26. package/dist/lib/objects.d.ts +0 -1
  27. package/dist/lib/objects.js +4 -1
  28. package/dist/lib/objects.js.map +2 -2
  29. package/dist/lib/schedule.d.ts +0 -2
  30. package/dist/lib/schedule.js.map +2 -2
  31. package/dist/lib/sse.d.ts +0 -1
  32. package/dist/lib/sse.js +3 -2
  33. package/dist/lib/sse.js.map +2 -2
  34. package/dist/plugins/directives/attribute-sync.js.map +1 -1
  35. package/dist/plugins/directives/boost.js +2 -1
  36. package/dist/plugins/directives/boost.js.map +2 -2
  37. package/dist/plugins/directives/busy-flag.js.map +1 -1
  38. package/dist/plugins/directives/class-toggle.js.map +1 -1
  39. package/dist/plugins/directives/cloak.js.map +1 -1
  40. package/dist/plugins/directives/collapse.js.map +1 -1
  41. package/dist/plugins/directives/declare.js.map +1 -1
  42. package/dist/plugins/directives/derive.js +4 -1
  43. package/dist/plugins/directives/derive.js.map +2 -2
  44. package/dist/plugins/directives/element-ref.js.map +1 -1
  45. package/dist/plugins/directives/event-listener.js +4 -1
  46. package/dist/plugins/directives/event-listener.js.map +2 -2
  47. package/dist/plugins/directives/frame-loop.js.map +1 -1
  48. package/dist/plugins/directives/html.js.map +1 -1
  49. package/dist/plugins/directives/inline-style.js +1 -1
  50. package/dist/plugins/directives/inline-style.js.map +2 -2
  51. package/dist/plugins/directives/mask.js.map +1 -1
  52. package/dist/plugins/directives/media-query.js +2 -1
  53. package/dist/plugins/directives/media-query.js.map +2 -2
  54. package/dist/plugins/directives/on-mount.js +4 -1
  55. package/dist/plugins/directives/on-mount.js.map +2 -2
  56. package/dist/plugins/directives/patch-listener.js.map +1 -1
  57. package/dist/plugins/directives/remove-me.js.map +1 -1
  58. package/dist/plugins/directives/scroll-to.js.map +1 -1
  59. package/dist/plugins/directives/size-watch.js.map +1 -1
  60. package/dist/plugins/directives/state-dump.js.map +1 -1
  61. package/dist/plugins/directives/storage-sync.js.map +1 -1
  62. package/dist/plugins/directives/teleport.js.map +1 -1
  63. package/dist/plugins/directives/text-content.js.map +1 -1
  64. package/dist/plugins/directives/timer.js.map +1 -1
  65. package/dist/plugins/directives/transition-name.js.map +1 -1
  66. package/dist/plugins/directives/transition.js.map +1 -1
  67. package/dist/plugins/directives/trap.js +8 -2
  68. package/dist/plugins/directives/trap.js.map +2 -2
  69. package/dist/plugins/directives/tween.js.map +2 -2
  70. package/dist/plugins/directives/two-way-bind.js +37 -7
  71. package/dist/plugins/directives/two-way-bind.js.map +2 -2
  72. package/dist/plugins/directives/url-params.js +2 -1
  73. package/dist/plugins/directives/url-params.js.map +2 -2
  74. package/dist/plugins/directives/url-replace.js.map +1 -1
  75. package/dist/plugins/directives/validity.js.map +1 -1
  76. package/dist/plugins/directives/viewport.js +4 -1
  77. package/dist/plugins/directives/viewport.js.map +2 -2
  78. package/dist/plugins/directives/visibility.js.map +1 -1
  79. package/dist/plugins/directives/watch.d.ts +0 -1
  80. package/dist/plugins/directives/watch.js.map +2 -2
  81. package/dist/plugins/functions/bulk-set.js +5 -3
  82. package/dist/plugins/functions/bulk-set.js.map +2 -2
  83. package/dist/plugins/functions/bulk-toggle.js +5 -3
  84. package/dist/plugins/functions/bulk-toggle.js.map +2 -2
  85. package/dist/plugins/functions/confirm.js.map +1 -1
  86. package/dist/plugins/functions/copy-text.js.map +1 -1
  87. package/dist/plugins/functions/dispatch.js.map +2 -2
  88. package/dist/plugins/functions/locale-format.js.map +1 -1
  89. package/dist/plugins/functions/range-map.js.map +1 -1
  90. package/dist/plugins/functions/request.js +19 -5
  91. package/dist/plugins/functions/request.js.map +2 -2
  92. package/dist/plugins/functions/untracked-read.js.map +1 -1
  93. package/dist/plugins/functions/websocket.js +5 -1
  94. package/dist/plugins/functions/websocket.js.map +2 -2
  95. package/dist/plugins/index.d.ts +36 -36
  96. package/dist/plugins/index.js +33 -33
  97. package/dist/plugins/index.js.map +2 -2
  98. package/dist/plugins/server-events/apply-elements.js +4 -1
  99. package/dist/plugins/server-events/apply-elements.js.map +2 -2
  100. package/dist/plugins/server-events/apply-state.js.map +1 -1
  101. package/dist/plugins/server-events/morph.d.ts +0 -2
  102. package/dist/plugins/server-events/morph.js +31 -8
  103. package/dist/plugins/server-events/morph.js.map +2 -2
  104. package/dist/presets/all.d.ts +0 -1
  105. package/dist/presets/all.js +23 -23
  106. package/dist/presets/all.js.map +2 -2
  107. package/dist/presets/essentials.d.ts +0 -1
  108. package/dist/presets/essentials.js +27 -9
  109. package/dist/presets/essentials.js.map +2 -2
  110. package/dist/presets/minimal.d.ts +0 -1
  111. package/dist/presets/minimal.js +2 -2
  112. package/dist/presets/minimal.js.map +2 -2
  113. package/dist/server.d.ts +102 -0
  114. package/dist/server.js +190 -0
  115. package/dist/server.js.map +7 -0
  116. package/dist/sigmx.standalone.js +1 -1
  117. package/dist/standalone.js.map +2 -2
  118. package/dist/vite.d.ts +2 -2
  119. package/dist/vite.js +31 -8
  120. package/dist/vite.js.map +2 -2
  121. package/package.json +19 -2
  122. package/dist/auto.d.ts +0 -1
  123. package/dist/auto.js +0 -7
  124. package/dist/auto.js.map +0 -7
  125. package/dist/core/csp.d.ts +0 -7
  126. package/dist/core/csp.js +0 -20
  127. package/dist/core/csp.js.map +0 -7
  128. package/dist/core/engine.d.ts +0 -10
  129. package/dist/core/engine.js +0 -200
  130. package/dist/core/engine.js.map +0 -7
  131. package/dist/core/expr.d.ts +0 -12
  132. package/dist/core/expr.js +0 -94
  133. package/dist/core/expr.js.map +0 -7
  134. package/dist/core/index.d.ts +0 -16
  135. package/dist/core/index.js +0 -46
  136. package/dist/core/index.js.map +0 -7
  137. package/dist/core/signals.d.ts +0 -42
  138. package/dist/core/signals.js +0 -195
  139. package/dist/core/signals.js.map +0 -7
  140. package/dist/core/store.d.ts +0 -32
  141. package/dist/core/store.js +0 -185
  142. package/dist/core/store.js.map +0 -7
  143. package/dist/core/types.d.ts +0 -101
  144. package/dist/core/types.js +0 -1
  145. package/dist/core/types.js.map +0 -7
  146. package/dist/plugins/actions/clipboard.d.ts +0 -2
  147. package/dist/plugins/actions/clipboard.js +0 -11
  148. package/dist/plugins/actions/clipboard.js.map +0 -7
  149. package/dist/plugins/actions/fit.d.ts +0 -2
  150. package/dist/plugins/actions/fit.js +0 -14
  151. package/dist/plugins/actions/fit.js.map +0 -7
  152. package/dist/plugins/actions/intl.d.ts +0 -2
  153. package/dist/plugins/actions/intl.js +0 -21
  154. package/dist/plugins/actions/intl.js.map +0 -7
  155. package/dist/plugins/actions/peek.d.ts +0 -2
  156. package/dist/plugins/actions/peek.js +0 -6
  157. package/dist/plugins/actions/peek.js.map +0 -7
  158. package/dist/plugins/actions/setAll.d.ts +0 -2
  159. package/dist/plugins/actions/setAll.js +0 -11
  160. package/dist/plugins/actions/setAll.js.map +0 -7
  161. package/dist/plugins/actions/toggleAll.d.ts +0 -2
  162. package/dist/plugins/actions/toggleAll.js +0 -11
  163. package/dist/plugins/actions/toggleAll.js.map +0 -7
  164. package/dist/plugins/attributes/attr.d.ts +0 -2
  165. package/dist/plugins/attributes/attr.js +0 -20
  166. package/dist/plugins/attributes/attr.js.map +0 -7
  167. package/dist/plugins/attributes/bind.d.ts +0 -6
  168. package/dist/plugins/attributes/bind.js +0 -81
  169. package/dist/plugins/attributes/bind.js.map +0 -7
  170. package/dist/plugins/attributes/class.d.ts +0 -2
  171. package/dist/plugins/attributes/class.js +0 -22
  172. package/dist/plugins/attributes/class.js.map +0 -7
  173. package/dist/plugins/attributes/computed.d.ts +0 -2
  174. package/dist/plugins/attributes/computed.js +0 -20
  175. package/dist/plugins/attributes/computed.js.map +0 -7
  176. package/dist/plugins/attributes/customValidity.d.ts +0 -2
  177. package/dist/plugins/attributes/customValidity.js +0 -14
  178. package/dist/plugins/attributes/customValidity.js.map +0 -7
  179. package/dist/plugins/attributes/effect.d.ts +0 -2
  180. package/dist/plugins/attributes/effect.js +0 -12
  181. package/dist/plugins/attributes/effect.js.map +0 -7
  182. package/dist/plugins/attributes/indicator.d.ts +0 -2
  183. package/dist/plugins/attributes/indicator.js +0 -20
  184. package/dist/plugins/attributes/indicator.js.map +0 -7
  185. package/dist/plugins/attributes/init.d.ts +0 -2
  186. package/dist/plugins/attributes/init.js +0 -14
  187. package/dist/plugins/attributes/init.js.map +0 -7
  188. package/dist/plugins/attributes/jsonSignals.d.ts +0 -2
  189. package/dist/plugins/attributes/jsonSignals.js +0 -15
  190. package/dist/plugins/attributes/jsonSignals.js.map +0 -7
  191. package/dist/plugins/attributes/matchMedia.d.ts +0 -2
  192. package/dist/plugins/attributes/matchMedia.js +0 -19
  193. package/dist/plugins/attributes/matchMedia.js.map +0 -7
  194. package/dist/plugins/attributes/on.d.ts +0 -5
  195. package/dist/plugins/attributes/on.js +0 -28
  196. package/dist/plugins/attributes/on.js.map +0 -7
  197. package/dist/plugins/attributes/onIntersect.d.ts +0 -2
  198. package/dist/plugins/attributes/onIntersect.js +0 -28
  199. package/dist/plugins/attributes/onIntersect.js.map +0 -7
  200. package/dist/plugins/attributes/onInterval.d.ts +0 -2
  201. package/dist/plugins/attributes/onInterval.js +0 -18
  202. package/dist/plugins/attributes/onInterval.js.map +0 -7
  203. package/dist/plugins/attributes/onRaf.d.ts +0 -1
  204. package/dist/plugins/attributes/onRaf.js +0 -19
  205. package/dist/plugins/attributes/onRaf.js.map +0 -7
  206. package/dist/plugins/attributes/onResize.d.ts +0 -1
  207. package/dist/plugins/attributes/onResize.js +0 -17
  208. package/dist/plugins/attributes/onResize.js.map +0 -7
  209. package/dist/plugins/attributes/onSignalPatch.d.ts +0 -5
  210. package/dist/plugins/attributes/onSignalPatch.js +0 -35
  211. package/dist/plugins/attributes/onSignalPatch.js.map +0 -7
  212. package/dist/plugins/attributes/persist.d.ts +0 -6
  213. package/dist/plugins/attributes/persist.js +0 -16
  214. package/dist/plugins/attributes/persist.js.map +0 -7
  215. package/dist/plugins/attributes/queryString.d.ts +0 -5
  216. package/dist/plugins/attributes/queryString.js +0 -54
  217. package/dist/plugins/attributes/queryString.js.map +0 -7
  218. package/dist/plugins/attributes/ref.d.ts +0 -2
  219. package/dist/plugins/attributes/ref.js +0 -13
  220. package/dist/plugins/attributes/ref.js.map +0 -7
  221. package/dist/plugins/attributes/replaceUrl.d.ts +0 -1
  222. package/dist/plugins/attributes/replaceUrl.js +0 -11
  223. package/dist/plugins/attributes/replaceUrl.js.map +0 -7
  224. package/dist/plugins/attributes/scrollIntoView.d.ts +0 -2
  225. package/dist/plugins/attributes/scrollIntoView.js +0 -19
  226. package/dist/plugins/attributes/scrollIntoView.js.map +0 -7
  227. package/dist/plugins/attributes/show.d.ts +0 -2
  228. package/dist/plugins/attributes/show.js +0 -19
  229. package/dist/plugins/attributes/show.js.map +0 -7
  230. package/dist/plugins/attributes/signals.d.ts +0 -2
  231. package/dist/plugins/attributes/signals.js +0 -13
  232. package/dist/plugins/attributes/signals.js.map +0 -7
  233. package/dist/plugins/attributes/style.d.ts +0 -2
  234. package/dist/plugins/attributes/style.js +0 -25
  235. package/dist/plugins/attributes/style.js.map +0 -7
  236. package/dist/plugins/attributes/text.d.ts +0 -1
  237. package/dist/plugins/attributes/text.js +0 -13
  238. package/dist/plugins/attributes/text.js.map +0 -7
  239. package/dist/plugins/attributes/viewTransition.d.ts +0 -1
  240. package/dist/plugins/attributes/viewTransition.js +0 -11
  241. package/dist/plugins/attributes/viewTransition.js.map +0 -7
  242. package/dist/sigmx.auto.js +0 -5
  243. package/dist/utils/object.d.ts +0 -9
  244. package/dist/utils/object.js +0 -26
  245. package/dist/utils/object.js.map +0 -7
  246. package/dist/utils/text.d.ts +0 -7
  247. package/dist/utils/text.js +0 -15
  248. package/dist/utils/text.js.map +0 -7
  249. package/dist/utils/timing.d.ts +0 -14
  250. package/dist/utils/timing.js +0 -58
  251. package/dist/utils/timing.js.map +0 -7
@@ -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,n=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()),r=e=>e[0].toUpperCase()+e.slice(1),a=e=>n(e).join("-"),i=e=>n(e).map((e,t)=>t?r(e):e).join(""),l={camel:i,kebab:a,snake:e=>n(e).join("_"),pascal:e=>n(e).map(r).join("")},o=e=>{if(null===e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||null===t},s=(e,t,n)=>{let r=t.split("."),a=r.pop(),i=e;for(let e of r)o(i[e])||(i[e]={}),i=i[e];return i[a]=n,e},u=(e,t)=>void 0===e?t:"string"==typeof e?new RegExp(e.replace(/^\/|\/$/g,"")):e,d=e=>{if("function"==typeof e)return e;let t=u(e?.include,/(?:)/),n=u(e?.exclude,/(?!)/);return e=>t.test(e)&&!n.test(e)},c=(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},f=(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)}},m=(e,t)=>{let n=t.get("delay");n&&(e=((e,t)=>(...n)=>{setTimeout(e,t,...n)})(e,c(n)));let r=t.get("debounce");r&&(e=((e,t,n=!1,r=!0)=>f(e,t,n,r,!0))(e,c(r,300),r.includes("leading"),!r.includes("notrailing")));let a=t.get("throttle");return a&&(e=((e,t,n=!0,r=!1)=>f(e,t,n,r,!1))(e,c(a,300),!a.includes("noleading"),a.includes("trailing"))),e},h=(e,t)=>t.has("viewtransition")&&"startViewTransition"in document?(...t)=>{document.startViewTransition(()=>e(...t))}:e,p=(e,t)=>Function(...e,t),g=new Map,v=e=>/[A-Za-z0-9_$]/.test(e),y=(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}},b=e=>(t,n,r)=>((e,t,n,r)=>{let a=`${+r}|${n.join()}|${t}`,i=g.get(a);if(i)return i;let l,o=(e=>{let t="";return y(e,(n,r)=>{if("@"===n){let n=r+1;for(;n<e.length&&v(e[n]);)n++;let a=n;for(;a<e.length&&/\s/.test(e[a]);)a++;if(n>r+1&&"("===e[a])return t+=`__a.${e.slice(r+1,n)}(`,a+1-r}t+=n}),t})(t.trim()),s=t=>e(["$","__a",...n],`with($.scope){${t}\n}`);if(r)try{l=s(`return(${o}\n)`)}catch{let e=(e=>{let t=[],n=0,r=0;return y(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())})(o),t=e.pop()??"";try{l=s(`${e.join(";")};return(${t}\n)`)}catch{l=s(o)}}else l=s(o);return g.set(a,l),l})(e,t,n,r),w=0,k=!1,S=new Set,x=new Set,A=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();w||N()}},E=e=>{for(let t of e.t.keys())t.s.delete(e);e.t.clear()},T=e=>{for(let[t,n]of e.t)if(t instanceof M&&t.f(),t.i!==n)return!0;return!1},$=(t,n)=>{E(t);let r=e;e=t;try{return n()}finally{e=r}},M=class extends A{t=new Map;c=!0;r;constructor(e){super(void 0),this.r=e}f(){if(!this.c||(this.c=!1,this.t.size&&!T(this)))return;let e=$(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()}}},L=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,S.add(this))}b(){if(this.d=!1,this.p||this.t.size&&!T(this))return;for(let e of this.o)e.g();this.o.clear();let e=t;t=this,w++;try{$(this,this.r)}catch(e){if(!this.m)throw e;this.m(e)}finally{w--,t=e}}g(){this.p=!0,E(this);for(let e of this.o)e.g();this.o.clear(),S.delete(this)}},q=e=>new M(e),O=e=>{w++;try{return e()}finally{--w||N()}},P=t=>{let n=e;e=void 0;try{return t()}finally{e=n}},N=()=>{if(!k&&!w){k=!0;try{let e=0;for(;S.size;){if(++e>1e5)throw S.clear(),new Error("effect loop");let t=S.values().next().value;S.delete(t),t.b()}}finally{k=!1}for(let e of x)e()}},j=e=>e.slice(0,Math.max(0,e.lastIndexOf("."))),C=e=>e.slice(e.lastIndexOf(".")+1),H=(e,t)=>e?`${e}.${t}`:t,R=(e,t)=>!t||e===t||e.startsWith(`${t}.`),I=e=>"string"==typeof e,V=()=>{let e=new Map,t=new Map([["",new Set]]),n=new A(0),r=new Map,a=new Set,i=new Map,l=new WeakMap,u=r=>{let a=t.get(r);return a||(e.has(r)&&c(r),a=new Set,t.set(r,a),u(j(r)).add(C(r)),n.bump()),a},c=a=>{let i=e.get(a);i&&(e.delete(a),t.get(j(a))?.delete(C(a)),r.set(a,null),i.bump(),n.bump())},f=e=>{let r=t.get(e);if(r){for(let t of[...r])m(H(e,t));e&&(t.delete(e),t.get(j(e))?.delete(C(e)),i.delete(e)),n.bump()}},m=e=>O(()=>{c(e),f(e)}),h=(r,a)=>O(()=>{t.has(r)&&f(r);let i=e.get(r);e.set(r,a),u(j(r)).add(C(r)),i?.bump(),n.bump()}),p=(n,a)=>O(()=>{if(null==a)return m(n);if(o(a)){let e=u(n);for(let t of[...e])t in a||m(H(n,t));for(let e in a)p(H(n,e),a[e]);return}t.has(n)&&f(n);let i=e.get(n);if(i instanceof M)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 h(n,new A(a));r.set(n,a)}),g=(n,{at:r="",ifMissing:a=!1}={})=>O(()=>{if(o(n)){u(r);for(let i in n){let l=H(r,i),s=n[i];null===s?a||m(l):o(s)?g(s,{at:l,ifMissing:a}):(!a||!e.has(l)&&!t.has(l))&&!(e.get(l)instanceof M)&&p(l,s)}}}),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 y(a);n.value},y=e=>{let r=i.get(e);if(!r){let a=()=>(n.value,t.get(e));r=new Proxy({},{get:(t,n)=>I(n)?"toJSON"===n?()=>w(void 0,{at:e}):v(H(e,n)):void 0,set:(t,n,r)=>(I(n)&&p(H(e,n),r),!0),deleteProperty:(t,n)=>(I(n)&&m(H(e,n)),!0),has:(e,t)=>I(t)&&!!a()?.has(t),ownKeys:()=>[...a()??[]],getOwnPropertyDescriptor:(t,n)=>I(n)&&a()?.has(n)?{enumerable:!0,configurable:!0,writable:!0,value:v(H(e,n))}:void 0}),i.set(e,r)}return r},b=new Proxy({},{has:(e,t)=>I(t)&&"$"===t[0],get:(e,t)=>I(t)?"$"===t?y(""):v(t.slice(1)):void 0,set:(e,t,n)=>(I(t)&&("$"===t?g(n):p(t.slice(1),n)),!0)}),w=(r,{at:a="",computed:i=!0}={})=>{n.value;let l=d(r),o={},u=e=>a?e.slice(a.length+1):e;for(let[t,n]of e)!R(t,a)||!l(t)||!i&&n instanceof M||s(o,u(t),n.value);for(let e of t.keys())e&&e!==a&&R(e,a)&&l(e)&&!t.get(e)?.size&&s(o,u(e),{});return o};return x.add(()=>{if(!r.size)return;let e={};for(let[t,n]of r)s(e,t,n);r.clear();for(let t of a)t(e)}),{get:v,set:p,merge:g,remove:m,has:n=>e.has(n)||t.has(n),define:h,paths:t=>{n.value;let r=d(t);return[...e.keys()].filter(r)},snapshot:w,onPatch:e=>(a.add(e),()=>a.delete(e)),get $(){return y("")},scope:b}},z=e=>1===e.nodeType,D=e=>z(e)?[e,...e.querySelectorAll("*")]:e instanceof ShadowRoot?[...e.querySelectorAll("*")]:[],B=new Map,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=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}]))}}),K=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)}}),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:"cloak",key:"forbidden",value:"forbidden",mount:({el:e,attr:t})=>e.removeAttribute(t)}),X=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=c(t.get("duration"),250),u=t.get("min")?.[0]??"0px",d=matchMedia("(prefers-reduced-motion: reduce)").matches,f=!0,m=e=>{o.transition="",o.overflow=e?"":"hidden",o.height=e?"":u};r(()=>{let t=!!n();if(t===l)return;if(l=t,clearTimeout(i),f||d)return f=!1,m(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(()=>m(t),s+20)}),a(()=>clearTimeout(i))}}),Y=F({name:"signals",value:"required",mount({key:e,cased:t,evaluate:n,store:r,mods:a}){let i=n();r.merge(e?s({},t(),i):i,{ifMissing:a.has("ifmissing")})}}),ee=F({name:"computed",value:"required",mount({key:e,cased:t,evaluate:n,store:r,error:a}){if(e)return void r.define(t(),q(()=>n()));let i=n();for(let e in i){if("function"!=typeof i[e])throw a(`"${e}" must be a function`);r.define(e,q(i[e]))}}}),te=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)}}),ne=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=m(h(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")})}}),re=F({name:"on-raf",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){let n=m(()=>t(),e),r=requestAnimationFrame(function e(){n(),r=requestAnimationFrame(e)});return()=>cancelAnimationFrame(r)}}),ae=F({name:"html",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>{e.innerHTML=String(t()??"")})}),ie=F({name:"style",value:"required",mount({el:e,key:t,cased:n,evaluate:r,effect:i}){let l=new Map,o=(t,n)=>{l.has(t)||l.set(t,e.style.getPropertyValue(t)),n||0===n?e.style.setProperty(t,String(n)):e.style.setProperty(t,l.get(t)??"")};return i(()=>{let e=t?{[n("kebab")]:r()}:r();for(let t of l.keys())t in e||o(t,"");for(let t in e)o(a(t),e[t])}),()=>{for(let[t,n]of l)e.style.setProperty(t,n)}}}),le={9:/\d/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},oe=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=le[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()}}),se=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)}}),ue=F({name:"init",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){m(h(()=>t(),e),e)()}}),de=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=m(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)})}}),ce=F({name:"remove-me",key:"forbidden",mount({el:e,value:t,cleanup:n}){let r=setTimeout(()=>e.remove(),c([t],0));n(()=>clearTimeout(r))}}),fe=(e,t,n)=>t.find(t=>e.has(t))??n,me=F({name:"scroll-into-view",key:"forbidden",value:"forbidden",mount({el:e,mods:t}){e.scrollIntoView({behavior:fe(t,["smooth","instant","auto"],"smooth"),block:fe(t,["vstart","vcenter","vend","vnearest"],"vcenter").slice(1),inline:fe(t,["hstart","hcenter","hend","hnearest"],"hcenter").slice(1)}),t.has("focus")&&e.focus?.()}}),he=F({name:"on-resize",key:"forbidden",value:"required",returns:!1,mount({el:e,mods:t,evaluate:n}){let r=m(()=>n(),t),a=new ResizeObserver(()=>r());return a.observe(e),()=>a.disconnect()}}),pe=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)})}}),ge=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}))))}}),ve=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)}}),ye=F({name:"text",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>{e.textContent=String(t()??"")})}),be=F({name:"on-interval",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){let n=e.get("duration"),r=h(()=>t(),e);n?.includes("leading")&&r();let a=setInterval(r,c(n,1e3));return()=>clearInterval(a)}}),we=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:c(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})`},f={opacity:1,transform:"scale(1)"},m="none"===a.display?"":a.display,h=!0;r(()=>{let t=!!n();if(t!==u){if(u=t,s?.cancel(),h)return h=!1,void(a.display=t?m:"none");t&&(a.display=m),s=e.animate(t?[d,f]:[f,d],{duration:i,easing:"ease-out",fill:"forwards"}),s.onfinish=()=>{s?.cancel(),t||(a.display="none")}}})}}),ke=F({name:"view-transition",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>e.style.setProperty("view-transition-name",String(t())))}),Se=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)}}),xe={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},Ae=e=>{let t=/^\s*(-?\d*\.?\d+)([a-z%]*)\s*$/i.exec(e);return t?{n:+t[1],unit:t[2]}:void 0},Ee=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=c(t.get("duration"),300),d=xe[t.get("easing")?.[0]??"ease-out"]??xe["ease-out"],f=matchMedia("(prefers-reduced-motion: reduce)").matches,m=t=>s?e.style.setProperty(o,t):e.setAttribute(o,t),h=0,p=!0;a(()=>{let t=String(r());if(t===l)return;l=t,cancelAnimationFrame(h);let n=Ae(s?e.style.getPropertyValue(o)||getComputedStyle(e).getPropertyValue(o):e.getAttribute(o)??""),a=Ae(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(p||f||!n||!a||n.unit!==a.unit)return p=!1,m(t);let i=n.n,c=a.n,g=performance.now(),v=e=>{let t=Math.min(1,(e-g)/u);m(`${i+(c-i)*d(t)}${a.unit}`),t<1&&(h=requestAnimationFrame(v))};h=requestAnimationFrame(v)}),i(()=>cancelAnimationFrame(h))}}),Te=(e,t,...n)=>({l:e,h:t,y:n}),$e=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=Te(()=>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=Te(()=>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=Te("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?Te(()=>e.value,t=>e.value=String(t??""),"input","change"):Te(()=>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)})}}),Me=e=>{try{return JSON.parse(e)}catch{return e}},Le=F({name:"query-string",mount({key:e,value:t,mods:n,evaluate:r,cased:a,store:i,listen:l,effect:o}){let u=n.has("history"),c=e=>{e!==location.pathname+location.search+location.hash&&window.history[u?"pushState":"replaceState"](null,"",e)},f=e=>`${location.pathname}${e.size?`?${e}`:""}${location.hash}`,m=!1,h=e=>{m=!0;try{e()}finally{m=!1}};if(e){let n=a(),s=t?r():"",d=()=>{let t=new URLSearchParams(location.search).get(e);i.set(n,null===t?s:Me(t))};return(!i.has(n)||new URLSearchParams(location.search).has(e))&&d(),o(()=>{let t=i.get(n);if(m)return;let r=new URLSearchParams(location.search);void 0===t||((e,t)=>JSON.stringify(e)===JSON.stringify(t))(t,s)?r.delete(e):r.set(e,"string"==typeof t?t:JSON.stringify(t)),c(f(r))}),void(u&&l(window,"popstate",()=>h(d)))}let p=t?r():void 0,g=d(p),v=()=>{let e={};for(let[t,n]of new URLSearchParams(location.search))g(t)&&s(e,t,Me(n));i.merge(e)};v(),o(()=>{let e=i.snapshot(p,{computed:!1});if(m)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,""),c(f(t))}),u&&l(window,"popstate",()=>h(v))}}),qe=F({name:"replace-url",key:"forbidden",value:"required",mount:({evaluate:e,effect:t})=>t(()=>history.replaceState(history.state,"",new URL(String(e()),location.href)))}),Oe=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()??"")))}}),Pe=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=m(h(()=>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()}}),Ne=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}}}),je=F({name:"effect",key:"forbidden",value:"required",returns:!1,mount:e=>e.effect(()=>e.evaluate())}),Ce=U({name:"setAll",call:({store:e},t,n)=>O(()=>P(()=>{for(let r of e.paths(n))e.set(r,t)}))}),He=U({name:"toggleAll",call:({store:e},t)=>O(()=>P(()=>{for(let n of e.paths(t))e.set(n,!e.get(n))}))}),Re=U({name:"confirm",call:(e,t)=>window.confirm(t)}),Ie=U({name:"clipboard",call:(e,t,n=!1)=>navigator.clipboard.writeText(n?(new TextDecoder).decode(Uint8Array.from(atob(t),e=>e.charCodeAt(0))):t)}),Ve=U({name:"dispatch",call:({el:e},t,n)=>e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}),ze={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)??""},De=U({name:"intl",call:({error:e},t,n,r,a)=>{let i=ze[t];if(!i)throw e(`unknown @intl type "${t}"`);return i(a,n,r)}}),Be=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}}),Fe=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{value:e,done:t}=await a.read();if(t)break;for(l+=i.decode(e,{stream:!0});;){let e=l.search(/\r\n|\r|\n/);if(e<0)break;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()},Ue=new Map,We=0,Je=()=>new Promise(e=>document.addEventListener("visibilitychange",()=>!document.hidden&&e(),{once:!0})),_e=(e,t,n)=>{for(let r of t){let t=e.headers.get(`sigmx-${r}`);t&&(n[i(r)]=t)}return n},Ze=e=>{let t=document.createElement("script");t.text=e,document.head.append(t),t.remove()},Ke=(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&&(Ue.get(u)?.abort(),Ue.set(u,d)),t.cleanup(()=>d.abort());let c,f=++We,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??P(()=>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.form===e?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)},b=0,w=h.interval,k=async()=>{if(b++>=h.attempts)throw new Error("retries exhausted");m("retrying",{attempt:b}),await((e,t)=>new Promise(n=>{let r=setTimeout(n,e);t.addEventListener("abort",()=>{clearTimeout(r),n()},{once:!0})}))(w,d.signal),w=Math.min(w*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(b=0,w=h.interval,await Fe(n.body,e=>{void 0!==e.id&&(c=e.id),e.retry&&(w=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",_e(n,["selector","mode","use-view-transition"],{elements:i})):a.includes("application/json")?o.handle("patch-signals",_e(n,["only-if-missing"],{signals:i})):a.includes("javascript")&&Ze(i))}catch{if(d.signal.aborted)return;t.signal.aborted?await Je():await k()}finally{document.removeEventListener("visibilitychange",n)}}}catch(t){throw m("error",{message:t?.message}),s(`${e} ${n}: ${t?.message??t}`)}finally{m("finished"),Ue.get(u)===d&&Ue.delete(u)}})(t,e,n,r)}),Ge=Ke("get","GET"),Qe=Ke("post","POST"),Xe=Ke("put","PUT"),Ye=Ke("patch","PATCH"),et=Ke("delete","DELETE"),tt=U({name:"peek",call:(e,t)=>P(t)}),nt=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}}}),rt=new WeakSet,at=e=>!!e&&1===e.nodeType,it=e=>{if(at(e))for(let t of e.matches("script")?[e]:[...e.querySelectorAll("script")]){if(rt.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,rt.add(e),t.replaceWith(e)}},lt=e=>[...at(e)&&e.id?[e]:[],...e.querySelectorAll("[id]")],ot=(e,t)=>at(e)&&lt(e).some(e=>t.keep.has(e.id)),st=(e,t)=>{ot(e,t)?t.pantry.append(e):e.remove()},ut=(e,t,n)=>{let r=e;try{r.moveBefore?r.moveBefore(t,n):e.insertBefore(t,n)}catch{e.insertBefore(t,n)}},dt=(e,t,n)=>{for(let n=t;n;n=n.nextSibling)if(at(n)&&n.id===e)return n;return n.pantry.querySelector(`#${CSS.escape(e)}`)??document.getElementById(e)},ct=(e,t,n)=>!(e.nodeType!==t.nodeType||e.nodeName!==t.nodeName||at(e)&&e.id&&e.id!==t.id||at(e)&&n.keep.has(e.id)&&e.id!==t.id),ft=(e,t,n)=>{if(e.nodeType!==t.nodeType||e.nodeName!==t.nodeName){let n=document.importNode(t,!0);return e.replaceWith(n),void it(n)}at(e)&&at(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)||mt(e,t,n)):e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue)},mt=(e,t,n)=>{let r=e.firstChild,a=e=>{for(;r&&r!==e;){let e=r;r=r.nextSibling,st(e,n)}return r===e};for(let i of[...t.childNodes]){if(at(i)&&i.id&&n.keep.has(i.id)){let t=dt(i.id,r,n);if(t){a(t)&&r?r=t.nextSibling:ut(e,t,r),ft(t,i,n);continue}}let t=r;for(;t&&!ct(t,i,n);)t=t.nextSibling;if(t)a(t),r=t.nextSibling,ft(t,i,n);else if(at(i)&&ot(i,n)){let t=document.createElementNS(i.namespaceURI??"http://www.w3.org/1999/xhtml",i.tagName);e.insertBefore(t,r),ft(t,i,n)}else{let t=document.importNode(i,!0);e.insertBefore(t,r),it(t)}}a(null)},ht=(e,t,n)=>{let r=new Set,a=new Map(lt(t).map(e=>[e.id,e.tagName]));for(let t of lt(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"}},pt=(e,t,n={})=>{let r=ht(e,t,n);ft(e,t,r)},gt=(e,t,n={})=>{let r=ht(e,t,n);mt(e,t,r)},vt=["outer","inner","replace","prepend","append","before","after","remove"],yt=e=>1===e.nodeType,bt=((e={})=>(e=>{let n=[].concat(e.prefix??"data-"),r=[].concat(e.eventPrefix??"sigmx-"),a=e.store??V(),i=e.compile??p,{expressions:o}=e,s=e.onError??((e,t)=>console.error(e,t)),u=Object.create(null),d=Object.create(null),c=Object.create(null),f={prefixes:n,attr:e=>n[0]+e,store:a,compiler:i,emit:(e,t)=>document.dispatchEvent(new CustomEvent(`sigmx-${e}`,{detail:t})),call:(e,t,n)=>{let r=d[e];if(!r)throw t.error(`unknown action @${e}`);return r.call(t,...n)},eventPrefixes:r,handle:(e,t)=>{let n=r.find(t=>e.startsWith(t)),a=c[n?e.slice(n.length):e];return a?.handle(f,t),!!a},attributes:u,actions:d,handlers:c},m=new Map,h=new Set,g=n.map(e=>`[${e}ignore__self]`).join(),v=n.map(e=>`[${e}ignore]`).join(),y=e=>e.matches(g)||!!e.closest(v),b=e=>{for(let t of n)if(e.startsWith(t))return e.slice(t.length)},k=e=>{for(let t of e){let e=m.get(t);if(e&&m.delete(t))for(let t of e.values())t()}},S=(e,t)=>{let n=m.get(e);n?.get(t)?.(),n?.delete(t)},x=(e,r,i,d,c)=>{let{plugin:h,key:p,mods:g}=(e=>{let t=B.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},B.set(e,t)}return t})(i),v=u[h];if(!v||c&&!c.has(h))return;S(e,r);let y,b=[],k={plugin:h,el:e,attr:r},x=(e,t)=>((e,t)=>Object.assign(new Error(e),{info:t}))(`${n[0]}${h}: ${e}`,{...k,...t}),A=e=>s(e,k),E={el:e,plugin:h,attr:r,key:p,value:d,mods:g,cased:(e="camel")=>((e,t)=>e.split(".").map(l[t]).join("."))(p??"",g.get("case")?.[0]||e),evaluate:(t,...n)=>(y??=o(d,["el","evt",...v.args??[]],v.returns??!0),y(a,((e,t,n,r,i)=>{let l={el:e,evt:t,store:a,runtime:f,error:n,cleanup:r};return new Proxy({},{get:(e,t)=>(...e)=>{let n=f.call(t,l,e);return n instanceof Promise&&n.catch(i),n}})})(e,t,x,E.cleanup,A),e,t,...n)),effect:e=>b.push(((e,n)=>{let r=new L(e,n);return t?.o.add(r),r.b(),w||N(),()=>r.g()})(e,A)),listen:(e,t,n,r)=>{let a=e=>{try{n(e)}catch(e){A(e)}};e.addEventListener(t,a,r),b.push(()=>e.removeEventListener(t,a,r))},cleanup:e=>b.push(e),error:x,store:a,runtime:f},T=m.get(e);T||(T=new Map,m.set(e,T)),T.set(r,()=>{for(let e of b.splice(0))e()});try{if("required"===v.key&&!p)throw x("needs a key");if("forbidden"===v.key&&p)throw x("takes no key");if("required"===v.value&&!d)throw x("needs a value");if("forbidden"===v.value&&d)throw x("takes no value");let e=v.mount(E);"function"==typeof e&&b.push(e)}catch(e){A(e)}},A=(e,t)=>{for(let n of e)if(!y(n))for(let{name:e,value:r}of[...n.attributes]){let a=b(e);a&&!m.get(n)?.has(e)&&x(n,e,a,r,t)}},E=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(D(e));for(let e of a)A(D(e))}else if(r&&z(n)&&!y(n)){let e=b(r);if(!e)continue;let t=n.getAttribute(r);null===t?S(n,r):x(n,r,e,t)}}),T=!1,$=(e=document.documentElement,t=!0,n)=>{A(D(e),n),t&&!h.has(e)&&(E.observe(e,{subtree:!0,childList:!0,attributes:!0}),h.add(e)),!T&&h.has(document.documentElement)&&(T=!0,f.emit("ready"))},M=(...e)=>{let t=new Set;for(let n of e)"attribute"===n.type?(u[n.name]=n,t.add(n.name)):"action"===n.type?d[n.name]=n:c[n.name]=n;if(t.size)for(let e of h)$(e,!1,t)},q=a.onPatch(e=>f.emit("signal-patch",e));M(...e.plugins??[]);let O={runtime:f,store:a,get $(){return a.$},apply:(e,t)=>$(e,t),use:M,destroy:()=>{E.disconnect(),q(),k([...m.keys()]),h.clear()}};return(e.autoStart??!0)&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>O.apply(),{once:!0}):O.apply()),O})({...e,expressions:e.expressions??b(e.compile??p)}))({plugins:[_,$e,G,ee,Oe,je,K,ue,pe,se,ne,Pe,be,re,he,de,ge,Le,te,qe,me,Ne,Y,ie,ye,ke,Ie,Be,De,tt,Ce,He,Ee,et,Ge,Ye,Qe,Xe,W({name:"patch-elements",handle(e,{elements:t="",selector:n="",mode:r="outer",useViewTransition:a}){if(!vt.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&&gt(document.head,i.head,a),void pt(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?pt(t,e,a):(t.replaceWith(e),it(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&&yt(i[0]))pt(e,i[0],a);else if("inner"===r)gt(e,n,a);else{"outer"===r||"replace"===r?e.replaceWith(n):e[r](n);for(let e of i)it(e)}})})(e,t,n,r);"true"===a&&"startViewTransition"in document?document.startViewTransition(i):i()}}),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})}}),Z,Q,X,ae,oe,ce,ve,we,Se,Re,Ve,nt]});globalThis.sigmx=bt;export{bt as sigmx};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/standalone.ts"],
4
- "sourcesContent": ["// Script-tag entry: registers every plugin, starts on DOM ready, and exposes the instance as `window.sigmx`.\nimport { 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": "AACA,SAAS,mBAAmB;AAC5B,SAAS,WAAW;AAEb,MAAM,QAAQ,YAAY,EAAE,SAAS,IAAI,CAAC;AAC/C,WAAmB,QAAQ;",
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) => string | undefined;
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) => string | undefined;
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,8 +1,28 @@
1
1
  import { readdirSync, readFileSync, statSync } from "node:fs";
2
2
  import { isAbsolute, join, relative } from "node:path";
3
3
  import { extractExpressions, generateTable } from "./kernel/precompile.js";
4
- import { builtinPlugins, customPluginMeta, generatePluginsModule, selectPlugins } from "./kernel/scan.js";
5
- const DEFAULT_EXTENSIONS = [".astro", ".html", ".mdx", ".md", ".ts", ".tsx", ".js", ".jsx", ".svelte", ".vue", ".php", ".erb", ".twig", ".hbs"];
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 = []) => {
7
27
  let entries = [];
8
28
  try {
@@ -25,8 +45,11 @@ const files = (o) => {
25
45
  };
26
46
  const customMeta = (root, custom = {}) => Object.entries(custom).flatMap(([exp, path]) => {
27
47
  const abs = isAbsolute(path) ? path : join(root, path);
28
- const meta = customPluginMeta(exp, readFileSync(abs, "utf8"), "/" + relative(root, abs).replace(/\\/g, "/"));
29
- if (!meta) console.warn(`[sigmx] could not read plugin metadata for "${exp}" in ${path}; include it via "always" if it must ship`);
48
+ const meta = customPluginMeta(exp, readFileSync(abs, "utf8"), `/${relative(root, abs).replace(/\\/g, "/")}`);
49
+ if (!meta)
50
+ console.warn(
51
+ `[sigmx] could not read plugin metadata for "${exp}" in ${path}; include it via "always" if it must ship`
52
+ );
30
53
  return meta ? [meta] : [];
31
54
  });
32
55
  const scanProject = (o = {}) => {
@@ -40,9 +63,9 @@ const AUTO_ID = "virtual:sigmx-plugins";
40
63
  const EXPRESSIONS_ID = "virtual:sigmx-expressions";
41
64
  const sigmxAuto = (o = {}) => ({
42
65
  name: "sigmx-auto",
43
- resolveId: (id) => id === AUTO_ID ? "\0" + AUTO_ID : void 0,
66
+ resolveId: (id) => id === AUTO_ID ? `\0${AUTO_ID}` : void 0,
44
67
  load(id) {
45
- if (id !== "\0" + AUTO_ID) return;
68
+ if (id !== `\0${AUTO_ID}`) return;
46
69
  const sel = scanProject(o);
47
70
  for (const f of sel.files) this.addWatchFile?.(f);
48
71
  if (o.log ?? true) {
@@ -54,9 +77,9 @@ const sigmxAuto = (o = {}) => ({
54
77
  });
55
78
  const sigmxPrecompile = (o = {}) => ({
56
79
  name: "sigmx-precompile",
57
- resolveId: (id) => id === EXPRESSIONS_ID ? "\0" + EXPRESSIONS_ID : void 0,
80
+ resolveId: (id) => id === EXPRESSIONS_ID ? `\0${EXPRESSIONS_ID}` : void 0,
58
81
  load(id) {
59
- if (id !== "\0" + EXPRESSIONS_ID) return;
82
+ if (id !== `\0${EXPRESSIONS_ID}`) return;
60
83
  const root = o.root ?? process.cwd();
61
84
  const meta = [...builtinPlugins(), ...customMeta(root, o.custom)].filter((p) => p.type === "attribute");
62
85
  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": ["// Vite plugins for auto mode and precompiled expressions. Node only.\nimport { readdirSync, readFileSync, statSync } from 'node:fs'\nimport { isAbsolute, join, relative } from 'node:path'\nimport { extractExpressions, generateTable } from './kernel/precompile.js'\nimport { builtinPlugins, customPluginMeta, generatePluginsModule, selectPlugins, type PluginMeta, type Selection } 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 = ['.astro', '.html', '.mdx', '.md', '.ts', '.tsx', '.js', '.jsx', '.svelte', '.vue', '.php', '.erb', '.twig', '.hbs']\n\nexport const walk = (dir: string, exts: string[], out: string[] = []): string[] => {\n let entries: string[] = []\n try {\n entries = readdirSync(dir)\n } catch {\n return out\n }\n for (const e of entries) {\n if (e === 'node_modules' || e.startsWith('.')) continue\n const p = join(dir, e)\n if (statSync(p).isDirectory()) walk(p, exts, out)\n else if (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 return (o.include ?? ['src']).flatMap((d) => walk(join(root, d), exts))\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) console.warn(`[sigmx] could not read plugin metadata for \"${exp}\" in ${path}; include it via \"always\" if it must ship`)\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 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": "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",
4
+ "sourcesContent": ["import { readdirSync, readFileSync, statSync } from 'node:fs';\nimport { isAbsolute, join, relative } from 'node:path';\nimport { extractExpressions, generateTable } 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 let entries: string[] = [];\n try {\n entries = readdirSync(dir);\n } catch {\n return out;\n }\n for (const e of entries) {\n if (e === 'node_modules' || e.startsWith('.')) continue;\n const p = join(dir, e);\n if (statSync(p).isDirectory()) walk(p, exts, out);\n else if (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 return (o.include ?? ['src']).flatMap((d) => walk(join(root, d), exts));\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 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": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigmx",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
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,29 @@
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",
107
+ "test:unit": "node --test tests/unit/*.test.mjs",
108
+ "test:dom": "node --test tests/dom/*.test.mjs tests/dom/*/*.test.mjs",
109
+ "test:browser": "playwright test",
110
+ "test:coverage": "node --test --experimental-test-coverage tests/unit/*.test.mjs tests/dom/*.test.mjs tests/dom/*/*.test.mjs",
111
+ "test:sdks": "npm --prefix sdks/astro test && npm --prefix sdks/hono test",
112
+ "test:all": "npm test && npm run test:browser && npm run test:sdks",
100
113
  "dev": "node scripts/dev.mjs",
101
114
  "compare": "node scripts/compare.mjs website/src/data/compare.json",
102
115
  "prepublishOnly": "npm run check && npm test",
103
116
  "prepack": "npm run build"
104
117
  },
105
118
  "devDependencies": {
119
+ "@biomejs/biome": "2.5.12",
120
+ "@happy-dom/global-registrator": "^20.14.0",
121
+ "@playwright/test": "^1.63.0",
106
122
  "@types/node": "^22.20.1",
107
123
  "esbuild": "^0.28.2",
124
+ "happy-dom": "^20.14.0",
108
125
  "terser": "^5.51.2",
109
126
  "typescript": "^5.9.0"
110
127
  }
package/dist/auto.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare const sigmx: import("./core/types.js").Sigmx;
package/dist/auto.js DELETED
@@ -1,7 +0,0 @@
1
- import { createSigmx } from "./core/index.js";
2
- import { all } from "./presets/all.js";
3
- const sigmx = createSigmx({ plugins: all });
4
- export {
5
- sigmx
6
- };
7
- //# sourceMappingURL=auto.js.map
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
- }
@@ -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
@@ -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
- }
@@ -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 {};