@devwareng/vanilla-ts 1.6.108 → 1.6.110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,26 @@
1
- "use strict";var De=Object.create;var Y=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,Oe=Object.prototype.hasOwnProperty;var rt=(s,t)=>()=>(s&&(t=s(s=0)),t);var jt=(s,t)=>{for(var e in t)Y(s,e,{get:t[e],enumerable:!0})},Ut=(s,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ae(t))!Oe.call(s,n)&&n!==e&&Y(s,n,{get:()=>t[n],enumerable:!(r=xe(t,n))||r.enumerable});return s};var R=(s,t,e)=>(e=s!=null?De(Me(s)):{},Ut(t||!s||!s.__esModule?Y(e,"default",{value:s,enumerable:!0}):e,s)),Ie=s=>Ut(Y({},"__esModule",{value:!0}),s);function ae(s,t={}){let e=t.entryType||t.type;if(e==="both"&&(e=L.FILE_DIR_TYPE),e&&(t.type=e),s){if(typeof s!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(e&&!se.includes(e))throw new Error(`readdirp: Invalid type passed. Use one of ${se.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return t.root=s,new It(t)}var A,ie,M,L,Ot,oe,ze,se,We,je,Ue,qe,ne,re,It,ce=rt(()=>{"use strict";A=require("fs/promises"),ie=require("stream"),M=require("path"),L={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},Ot={root:".",fileFilter:s=>!0,directoryFilter:s=>!0,type:L.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(Ot);oe="READDIRP_RECURSIVE_ERROR",ze=new Set(["ENOENT","EPERM","EACCES","ELOOP",oe]),se=[L.DIR_TYPE,L.EVERYTHING_TYPE,L.FILE_DIR_TYPE,L.FILE_TYPE],We=new Set([L.DIR_TYPE,L.EVERYTHING_TYPE,L.FILE_DIR_TYPE]),je=new Set([L.EVERYTHING_TYPE,L.FILE_DIR_TYPE,L.FILE_TYPE]),Ue=s=>ze.has(s.code),qe=process.platform==="win32",ne=s=>!0,re=s=>{if(s===void 0)return ne;if(typeof s=="function")return s;if(typeof s=="string"){let t=s.trim();return e=>e.basename===t}if(Array.isArray(s)){let t=s.map(e=>e.trim());return e=>t.some(r=>e.basename===r)}return ne},It=class extends ie.Readable{constructor(t={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:t.highWaterMark});let e={...Ot,...t},{root:r,type:n}=e;this._fileFilter=re(e.fileFilter),this._directoryFilter=re(e.directoryFilter);let i=e.lstat?A.lstat:A.stat;qe?this._stat=a=>i(a,{bigint:!0}):this._stat=i,this._maxDepth=e.depth??Ot.depth,this._wantsDir=n?We.has(n):!1,this._wantsFile=n?je.has(n):!1,this._wantsEverything=n===L.EVERYTHING_TYPE,this._root=(0,M.resolve)(r),this._isDirent=!e.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(r,1)],this.reading=!1,this.parent=void 0}async _read(t){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&t>0;){let e=this.parent,r=e&&e.files;if(r&&r.length>0){let{path:n,depth:i}=e,a=r.splice(0,t).map(c=>this._formatEntry(c,n)),o=await Promise.all(a);for(let c of o){if(!c)continue;if(this.destroyed)return;let l=await this._getEntryType(c);l==="directory"&&this._directoryFilter(c)?(i<=this._maxDepth&&this.parents.push(this._exploreDir(c.fullPath,i+1)),this._wantsDir&&(this.push(c),t--)):(l==="file"||this._includeAsFile(c))&&this._fileFilter(c)&&this._wantsFile&&(this.push(c),t--)}}else{let n=this.parents.pop();if(!n){this.push(null);break}if(this.parent=await n,this.destroyed)return}}}catch(e){this.destroy(e)}finally{this.reading=!1}}}async _exploreDir(t,e){let r;try{r=await(0,A.readdir)(t,this._rdOptions)}catch(n){this._onError(n)}return{files:r,depth:e,path:t}}async _formatEntry(t,e){let r,n=this._isDirent?t.name:t;try{let i=(0,M.resolve)((0,M.join)(e,n));r={path:(0,M.relative)(this._root,i),fullPath:i,basename:n},r[this._statsProp]=this._isDirent?t:await this._stat(i)}catch(i){this._onError(i);return}return r}_onError(t){Ue(t)&&!this.destroyed?this.emit("warn",t):this.destroy(t)}async _getEntryType(t){if(!t&&this._statsProp in t)return"";let e=t[this._statsProp];if(e.isFile())return"file";if(e.isDirectory())return"directory";if(e&&e.isSymbolicLink()){let r=t.fullPath;try{let n=await(0,A.realpath)(r),i=await(0,A.lstat)(n);if(i.isFile())return"file";if(i.isDirectory()){let a=n.length;if(r.startsWith(n)&&r.substr(a,1)===M.sep){let o=new Error(`Circular symlink detected: "${r}" points to "${n}"`);return o.code=oe,this._onError(o)}return"directory"}}catch(n){return this._onError(n),""}}}_includeAsFile(t){let e=t&&t[this._statsProp];return e&&this._wantsEverything&&!e.isDirectory()}}});function le(s,t,e,r,n){let i=(a,o)=>{e(s),n(a,o,{watchedPath:s}),o&&s!==o&&J(p.resolve(s,o),F,p.join(s,o))};try{return(0,H.watch)(s,{persistent:t.persistent},i)}catch(a){r(a);return}}var H,x,p,ue,Ye,Ht,de,Z,tt,Nt,Be,Ge,Ve,he,w,D,Ke,Qe,F,K,$,Je,Xe,Ze,Ft,j,ts,U,fe,Q,J,es,Ct,ss,X,me=rt(()=>{"use strict";H=require("fs"),x=require("fs/promises"),p=R(require("path"),1),ue=require("os"),Ye="data",Ht="end",de="close",Z=()=>{},tt=process.platform,Nt=tt==="win32",Be=tt==="darwin",Ge=tt==="linux",Ve=tt==="freebsd",he=(0,ue.type)()==="OS400",w={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},D=w,Ke="watch",Qe={lstat:x.lstat,stat:x.stat},F="listeners",K="errHandlers",$="rawEmitters",Je=[F,K,$],Xe=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),Ze=s=>Xe.has(p.extname(s).slice(1).toLowerCase()),Ft=(s,t)=>{s instanceof Set?s.forEach(t):t(s)},j=(s,t,e)=>{let r=s[t];r instanceof Set||(s[t]=r=new Set([r])),r.add(e)},ts=s=>t=>{let e=s[t];e instanceof Set?e.clear():delete s[t]},U=(s,t,e)=>{let r=s[t];r instanceof Set?r.delete(e):r===e&&delete s[t]},fe=s=>s instanceof Set?s.size===0:!s,Q=new Map;J=(s,t,e,r,n)=>{let i=Q.get(s);i&&Ft(i[t],a=>{a(e,r,n)})},es=(s,t,e,r)=>{let{listener:n,errHandler:i,rawEmitter:a}=r,o=Q.get(t),c;if(!e.persistent)return c=le(s,e,n,i,a),c?c.close.bind(c):void 0;if(o)j(o,F,n),j(o,K,i),j(o,$,a);else{if(c=le(s,e,J.bind(null,t,F),i,J.bind(null,t,$)),!c)return;c.on(D.ERROR,async l=>{let u=J.bind(null,t,K);if(o&&(o.watcherUnusable=!0),Nt&&l.code==="EPERM")try{await(await(0,x.open)(s,"r")).close(),u(l)}catch{}else u(l)}),o={listeners:n,errHandlers:i,rawEmitters:a,watcher:c},Q.set(t,o)}return()=>{U(o,F,n),U(o,K,i),U(o,$,a),fe(o.listeners)&&(o.watcher.close(),Q.delete(t),Je.forEach(ts(o)),o.watcher=void 0,Object.freeze(o))}},Ct=new Map,ss=(s,t,e,r)=>{let{listener:n,rawEmitter:i}=r,a=Ct.get(t),o=a&&a.options;return o&&(o.persistent<e.persistent||o.interval>e.interval)&&((0,H.unwatchFile)(t),a=void 0),a?(j(a,F,n),j(a,$,i)):(a={listeners:n,rawEmitters:i,options:e,watcher:(0,H.watchFile)(t,e,(c,l)=>{Ft(a.rawEmitters,d=>{d(D.CHANGE,t,{curr:c,prev:l})});let u=c.mtimeMs;(c.size!==l.size||u>l.mtimeMs||u===0)&&Ft(a.listeners,d=>d(s,c))})},Ct.set(t,a)),()=>{U(a,F,n),U(a,$,i),fe(a.listeners)&&(Ct.delete(t),(0,H.unwatchFile)(t),a.options=a.watcher=void 0,Object.freeze(a))}},X=class{constructor(t){this.fsw=t,this._boundHandleError=e=>t._handleError(e)}_watchWithNodeFs(t,e){let r=this.fsw.options,n=p.dirname(t),i=p.basename(t);this.fsw._getWatchedDir(n).add(i);let o=p.resolve(t),c={persistent:r.persistent};e||(e=Z);let l;if(r.usePolling){let u=r.interval!==r.binaryInterval;c.interval=u&&Ze(i)?r.binaryInterval:r.interval,l=ss(t,o,c,{listener:e,rawEmitter:this.fsw._emitRaw})}else l=es(t,o,c,{listener:e,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return l}_handleFile(t,e,r){if(this.fsw.closed)return;let n=p.dirname(t),i=p.basename(t),a=this.fsw._getWatchedDir(n),o=e;if(a.has(i))return;let c=async(u,d)=>{if(this.fsw._throttle(Ke,t,5)){if(!d||d.mtimeMs===0)try{let h=await(0,x.stat)(t);if(this.fsw.closed)return;let f=h.atimeMs,E=h.mtimeMs;if((!f||f<=E||E!==o.mtimeMs)&&this.fsw._emit(D.CHANGE,t,h),(Be||Ge||Ve)&&o.ino!==h.ino){this.fsw._closeFile(u),o=h;let S=this._watchWithNodeFs(t,c);S&&this.fsw._addPathCloser(u,S)}else o=h}catch{this.fsw._remove(n,i)}else if(a.has(i)){let h=d.atimeMs,f=d.mtimeMs;(!h||h<=f||f!==o.mtimeMs)&&this.fsw._emit(D.CHANGE,t,d),o=d}}},l=this._watchWithNodeFs(t,c);if(!(r&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(t)){if(!this.fsw._throttle(D.ADD,t,0))return;this.fsw._emit(D.ADD,t,e)}return l}async _handleSymlink(t,e,r,n){if(this.fsw.closed)return;let i=t.fullPath,a=this.fsw._getWatchedDir(e);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let o;try{o=await(0,x.realpath)(r)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(a.has(n)?this.fsw._symlinkPaths.get(i)!==o&&(this.fsw._symlinkPaths.set(i,o),this.fsw._emit(D.CHANGE,r,t.stats)):(a.add(n),this.fsw._symlinkPaths.set(i,o),this.fsw._emit(D.ADD,r,t.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(i))return!0;this.fsw._symlinkPaths.set(i,!0)}_handleRead(t,e,r,n,i,a,o){if(t=p.join(t,""),o=this.fsw._throttle("readdir",t,1e3),!o)return;let c=this.fsw._getWatchedDir(r.path),l=new Set,u=this.fsw._readdirp(t,{fileFilter:d=>r.filterPath(d),directoryFilter:d=>r.filterDir(d)});if(u)return u.on(Ye,async d=>{if(this.fsw.closed){u=void 0;return}let h=d.path,f=p.join(t,h);if(l.add(h),!(d.stats.isSymbolicLink()&&await this._handleSymlink(d,t,f,h))){if(this.fsw.closed){u=void 0;return}(h===n||!n&&!c.has(h))&&(this.fsw._incrReadyCount(),f=p.join(i,p.relative(i,f)),this._addToNodeFs(f,e,r,a+1))}}).on(D.ERROR,this._boundHandleError),new Promise((d,h)=>{if(!u)return h();u.once(Ht,()=>{if(this.fsw.closed){u=void 0;return}let f=o?o.clear():!1;d(void 0),c.getChildren().filter(E=>E!==t&&!l.has(E)).forEach(E=>{this.fsw._remove(t,E)}),u=void 0,f&&this._handleRead(t,!1,r,n,i,a,o)})})}async _handleDir(t,e,r,n,i,a,o){let c=this.fsw._getWatchedDir(p.dirname(t)),l=c.has(p.basename(t));!(r&&this.fsw.options.ignoreInitial)&&!i&&!l&&this.fsw._emit(D.ADD_DIR,t,e),c.add(p.basename(t)),this.fsw._getWatchedDir(t);let u,d,h=this.fsw.options.depth;if((h==null||n<=h)&&!this.fsw._symlinkPaths.has(o)){if(!i&&(await this._handleRead(t,r,a,i,t,n,u),this.fsw.closed))return;d=this._watchWithNodeFs(t,(f,E)=>{E&&E.mtimeMs===0||this._handleRead(f,!1,a,i,t,n,u)})}return d}async _addToNodeFs(t,e,r,n,i){let a=this.fsw._emitReady;if(this.fsw._isIgnored(t)||this.fsw.closed)return a(),!1;let o=this.fsw._getWatchHelpers(t);r&&(o.filterPath=c=>r.filterPath(c),o.filterDir=c=>r.filterDir(c));try{let c=await Qe[o.statMethod](o.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(o.watchPath,c))return a(),!1;let l=this.fsw.options.followSymlinks,u;if(c.isDirectory()){let d=p.resolve(t),h=l?await(0,x.realpath)(t):t;if(this.fsw.closed||(u=await this._handleDir(o.watchPath,c,e,n,i,o,h),this.fsw.closed))return;d!==h&&h!==void 0&&this.fsw._symlinkPaths.set(d,h)}else if(c.isSymbolicLink()){let d=l?await(0,x.realpath)(t):t;if(this.fsw.closed)return;let h=p.dirname(o.watchPath);if(this.fsw._getWatchedDir(h).add(o.watchPath),this.fsw._emit(D.ADD,o.watchPath,c),u=await this._handleDir(h,c,e,n,t,o,d),this.fsw.closed)return;d!==void 0&&this.fsw._symlinkPaths.set(p.resolve(t),d)}else u=this._handleFile(o.watchPath,c,e);return a(),u&&this.fsw._addPathCloser(t,u),!1}catch(c){if(this.fsw._handleError(c))return a(),t}}}});var Re={};jt(Re,{FSWatcher:()=>q,WatchHelper:()=>st,default:()=>gs,watch:()=>ve});function et(s){return Array.isArray(s)?s:[s]}function ls(s){return typeof s=="function"?s:typeof s=="string"?t=>s===t:s instanceof RegExp?t=>s.test(t):typeof s=="object"&&s!==null?t=>{if(s.path===t)return!0;if(s.recursive){let e=m.relative(s.path,t);return e?!e.startsWith("..")&&!m.isAbsolute(e):!1}return!1}:()=>!1}function us(s){if(typeof s!="string")throw new Error("string expected");s=m.normalize(s),s=s.replace(/\\/g,"/");let t=!1;s.startsWith("//")&&(t=!0);let e=/\/\//;for(;s.match(e);)s=s.replace(e,"/");return t&&(s="/"+s),s}function ge(s,t,e){let r=us(t);for(let n=0;n<s.length;n++){let i=s[n];if(i(r,e))return!0}return!1}function ds(s,t){if(s==null)throw new TypeError("anymatch: specify first argument");let r=et(s).map(n=>ls(n));return t==null?(n,i)=>ge(r,n,i):ge(r,t)}function ve(s,t={}){let e=new q(t);return e.add(s),e}var _e,nt,Te,m,kt,ns,Se,rs,is,os,pe,as,cs,$t,we,Ee,Pe,ye,hs,fs,zt,ms,ps,st,q,gs,Le=rt(()=>{"use strict";_e=require("fs"),nt=require("fs/promises"),Te=require("events"),m=R(require("path"),1);ce();me();kt="/",ns="//",Se=".",rs="..",is="string",os=/\\/g,pe=/\/\//,as=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,cs=/^\.[/\\]/;$t=s=>typeof s=="object"&&s!==null&&!(s instanceof RegExp);we=s=>{let t=et(s).flat();if(!t.every(e=>typeof e===is))throw new TypeError(`Non-string provided as watch path: ${t}`);return t.map(Pe)},Ee=s=>{let t=s.replace(os,kt),e=!1;for(t.startsWith(ns)&&(e=!0);t.match(pe);)t=t.replace(pe,kt);return e&&(t=kt+t),t},Pe=s=>Ee(m.normalize(Ee(s))),ye=(s="")=>t=>typeof t=="string"?Pe(m.isAbsolute(t)?t:m.join(s,t)):t,hs=(s,t)=>m.isAbsolute(s)?s:m.join(t,s),fs=Object.freeze(new Set),zt=class{constructor(t,e){this.path=t,this._removeWatcher=e,this.items=new Set}add(t){let{items:e}=this;e&&t!==Se&&t!==rs&&e.add(t)}async remove(t){let{items:e}=this;if(!e||(e.delete(t),e.size>0))return;let r=this.path;try{await(0,nt.readdir)(r)}catch{this._removeWatcher&&this._removeWatcher(m.dirname(r),m.basename(r))}}has(t){let{items:e}=this;if(e)return e.has(t)}getChildren(){let{items:t}=this;return t?[...t.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=Z,this.items=fs,Object.freeze(this)}},ms="stat",ps="lstat",st=class{constructor(t,e,r){this.fsw=r;let n=t;this.path=t=t.replace(cs,""),this.watchPath=n,this.fullWatchPath=m.resolve(n),this.dirParts=[],this.dirParts.forEach(i=>{i.length>1&&i.pop()}),this.followSymlinks=e,this.statMethod=e?ms:ps}entryPath(t){return m.join(this.watchPath,m.relative(this.watchPath,t.fullPath))}filterPath(t){let{stats:e}=t;if(e&&e.isSymbolicLink())return this.filterDir(t);let r=this.entryPath(t);return this.fsw._isntIgnored(r,e)&&this.fsw._hasReadPermissions(e)}filterDir(t){return this.fsw._isntIgnored(this.entryPath(t),t.stats)}},q=class extends Te.EventEmitter{constructor(t={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let e=t.awaitWriteFinish,r={stabilityThreshold:2e3,pollInterval:100},n={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...t,ignored:t.ignored?et(t.ignored):et([]),awaitWriteFinish:e===!0?r:typeof e=="object"?{...r,...e}:!1};he&&(n.usePolling=!0),n.atomic===void 0&&(n.atomic=!n.usePolling);let i=process.env.CHOKIDAR_USEPOLLING;if(i!==void 0){let c=i.toLowerCase();c==="false"||c==="0"?n.usePolling=!1:c==="true"||c==="1"?n.usePolling=!0:n.usePolling=!!c}let a=process.env.CHOKIDAR_INTERVAL;a&&(n.interval=Number.parseInt(a,10));let o=0;this._emitReady=()=>{o++,o>=this._readyCount&&(this._emitReady=Z,this._readyEmitted=!0,process.nextTick(()=>this.emit(w.READY)))},this._emitRaw=(...c)=>this.emit(w.RAW,...c),this._boundRemove=this._remove.bind(this),this.options=n,this._nodeFsHandler=new X(this),Object.freeze(n)}_addIgnoredPath(t){if($t(t)){for(let e of this._ignoredPaths)if($t(e)&&e.path===t.path&&e.recursive===t.recursive)return}this._ignoredPaths.add(t)}_removeIgnoredPath(t){if(this._ignoredPaths.delete(t),typeof t=="string")for(let e of this._ignoredPaths)$t(e)&&e.path===t&&this._ignoredPaths.delete(e)}add(t,e,r){let{cwd:n}=this.options;this.closed=!1,this._closePromise=void 0;let i=we(t);return n&&(i=i.map(a=>hs(a,n))),i.forEach(a=>{this._removeIgnoredPath(a)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=i.length,Promise.all(i.map(async a=>{let o=await this._nodeFsHandler._addToNodeFs(a,!r,void 0,0,e);return o&&this._emitReady(),o})).then(a=>{this.closed||a.forEach(o=>{o&&this.add(m.dirname(o),m.basename(e||o))})}),this}unwatch(t){if(this.closed)return this;let e=we(t),{cwd:r}=this.options;return e.forEach(n=>{!m.isAbsolute(n)&&!this._closers.has(n)&&(r&&(n=m.join(r,n)),n=m.resolve(n)),this._closePath(n),this._addIgnoredPath(n),this._watched.has(n)&&this._addIgnoredPath({path:n,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let t=[];return this._closers.forEach(e=>e.forEach(r=>{let n=r();n instanceof Promise&&t.push(n)})),this._streams.forEach(e=>e.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(e=>e.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=t.length?Promise.all(t).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let t={};return this._watched.forEach((e,r)=>{let i=(this.options.cwd?m.relative(this.options.cwd,r):r)||Se;t[i]=e.getChildren().sort()}),t}emitWithAll(t,e){this.emit(t,...e),t!==w.ERROR&&this.emit(w.ALL,t,...e)}async _emit(t,e,r){if(this.closed)return;let n=this.options;Nt&&(e=m.normalize(e)),n.cwd&&(e=m.relative(n.cwd,e));let i=[e];r!=null&&i.push(r);let a=n.awaitWriteFinish,o;if(a&&(o=this._pendingWrites.get(e)))return o.lastChange=new Date,this;if(n.atomic){if(t===w.UNLINK)return this._pendingUnlinks.set(e,[t,...i]),setTimeout(()=>{this._pendingUnlinks.forEach((c,l)=>{this.emit(...c),this.emit(w.ALL,...c),this._pendingUnlinks.delete(l)})},typeof n.atomic=="number"?n.atomic:100),this;t===w.ADD&&this._pendingUnlinks.has(e)&&(t=w.CHANGE,this._pendingUnlinks.delete(e))}if(a&&(t===w.ADD||t===w.CHANGE)&&this._readyEmitted){let c=(l,u)=>{l?(t=w.ERROR,i[0]=l,this.emitWithAll(t,i)):u&&(i.length>1?i[1]=u:i.push(u),this.emitWithAll(t,i))};return this._awaitWriteFinish(e,a.stabilityThreshold,t,c),this}if(t===w.CHANGE&&!this._throttle(w.CHANGE,e,50))return this;if(n.alwaysStat&&r===void 0&&(t===w.ADD||t===w.ADD_DIR||t===w.CHANGE)){let c=n.cwd?m.join(n.cwd,e):e,l;try{l=await(0,nt.stat)(c)}catch{}if(!l||this.closed)return;i.push(l)}return this.emitWithAll(t,i),this}_handleError(t){let e=t&&t.code;return t&&e!=="ENOENT"&&e!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||e!=="EPERM"&&e!=="EACCES")&&this.emit(w.ERROR,t),t||this.closed}_throttle(t,e,r){this._throttled.has(t)||this._throttled.set(t,new Map);let n=this._throttled.get(t);if(!n)throw new Error("invalid throttle");let i=n.get(e);if(i)return i.count++,!1;let a,o=()=>{let l=n.get(e),u=l?l.count:0;return n.delete(e),clearTimeout(a),l&&clearTimeout(l.timeoutObject),u};a=setTimeout(o,r);let c={timeoutObject:a,clear:o,count:0};return n.set(e,c),c}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(t,e,r,n){let i=this.options.awaitWriteFinish;if(typeof i!="object")return;let a=i.pollInterval,o,c=t;this.options.cwd&&!m.isAbsolute(t)&&(c=m.join(this.options.cwd,t));let l=new Date,u=this._pendingWrites;function d(h){(0,_e.stat)(c,(f,E)=>{if(f||!u.has(t)){f&&f.code!=="ENOENT"&&n(f);return}let S=Number(new Date);h&&E.size!==h.size&&(u.get(t).lastChange=S);let N=u.get(t);S-N.lastChange>=e?(u.delete(t),n(void 0,E)):o=setTimeout(d,a,E)})}u.has(t)||(u.set(t,{lastChange:l,cancelWait:()=>(u.delete(t),clearTimeout(o),r)}),o=setTimeout(d,a))}_isIgnored(t,e){if(this.options.atomic&&as.test(t))return!0;if(!this._userIgnored){let{cwd:r}=this.options,i=(this.options.ignored||[]).map(ye(r)),o=[...[...this._ignoredPaths].map(ye(r)),...i];this._userIgnored=ds(o,void 0)}return this._userIgnored(t,e)}_isntIgnored(t,e){return!this._isIgnored(t,e)}_getWatchHelpers(t){return new st(t,this.options.followSymlinks,this)}_getWatchedDir(t){let e=m.resolve(t);return this._watched.has(e)||this._watched.set(e,new zt(e,this._boundRemove)),this._watched.get(e)}_hasReadPermissions(t){return this.options.ignorePermissionErrors?!0:!!(Number(t.mode)&256)}_remove(t,e,r){let n=m.join(t,e),i=m.resolve(n);if(r=r??(this._watched.has(n)||this._watched.has(i)),!this._throttle("remove",n,100))return;!r&&this._watched.size===1&&this.add(t,e,!0),this._getWatchedDir(n).getChildren().forEach(h=>this._remove(n,h));let c=this._getWatchedDir(t),l=c.has(e);c.remove(e),this._symlinkPaths.has(i)&&this._symlinkPaths.delete(i);let u=n;if(this.options.cwd&&(u=m.relative(this.options.cwd,n)),this.options.awaitWriteFinish&&this._pendingWrites.has(u)&&this._pendingWrites.get(u).cancelWait()===w.ADD)return;this._watched.delete(n),this._watched.delete(i);let d=r?w.UNLINK_DIR:w.UNLINK;l&&!this._isIgnored(n)&&this._emit(d,n),this._closePath(n)}_closePath(t){this._closeFile(t);let e=m.dirname(t);this._getWatchedDir(e).remove(m.basename(t))}_closeFile(t){let e=this._closers.get(t);e&&(e.forEach(r=>r()),this._closers.delete(t))}_addPathCloser(t,e){if(!e)return;let r=this._closers.get(t);r||(r=[],this._closers.set(t,r)),r.push(e)}_readdirp(t,e){if(this.closed)return;let r={type:w.ALL,alwaysStat:!0,lstat:!0,...e,depth:0},n=ae(t,r);return this._streams.add(n),n.once(de,()=>{n=void 0}),n.once(Ht,()=>{n&&(this._streams.delete(n),n=void 0)}),n}};gs={watch:ve,FSWatcher:q}});var ws={};jt(ws,{TSFilebasedRouter:()=>be,TSRouter:()=>V,createEffect:()=>vt,createSignal:()=>Pt,html:()=>it,loadPyFiles:()=>Lt,mapper:()=>qt,renderChildRoutes:()=>St,useAnchorSingle:()=>gt,useInitialDOM:()=>mt,useTSAuth:()=>yt,useTSCollection:()=>Et,useTSComponent:()=>W,useTSElementEach:()=>G,useTSElements:()=>ft,useTSEvent:()=>ct,useTSEventAll:()=>dt,useTSExtractParams:()=>ut,useTSLazy:()=>bt,useTSMetaData:()=>wt,useTSNavigate:()=>_t,useTSNoReload:()=>At,useTSOutlet:()=>Tt,useTSParams:()=>z,useTSPurifier:()=>at,useTSSSRHydration:()=>Dt,useTSSelect:()=>k,useTSloadBrython:()=>Rt});module.exports=Ie(ws);function Ce(s){let t=s==null?"":String(s),e=t.toLowerCase();return(e.includes("<script")||e.includes("javascript:"))&&(t=""),t.replace(/<\s*(script|iframe|object|embed|link|style|meta|body)[^>]*>.*?<\s*\/\s*\1\s*>/gi,"").replace(/<\s*(script|iframe|object|embed|link|style|meta)[^>]*>/gi,"").replace(/\s+on\w+\s*=\s*(['"]).*?\1/gi,"").replace(/\s+on\w+\s*=\s*[^\s>]+/gi,"").replace(/\s(href|src)\s*=\s*(['"]?)\s*(javascript:|vbscript:|data:|file:)[^'">\s]*\2/gi,'$1="#"')}function it(s,...t){return s.reduce((e,r,n)=>{let i=n<t.length?Ce(t[n]):"";return e+r+i},"")}var Fe=s=>s.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),qt=s=>s?.map(t=>Fe(t)).join("")??"";var ot=R(require("dompurify"),1),at=(s,t)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...t};return typeof s=="string"?ot.default.sanitize(s,r):ot.default.sanitize(s.innerHTML,r)};var ct=(s,t,e)=>{if(typeof s=="string"){let r=document.getElementById(s);r?r.addEventListener(t,e):console.warn(`Element with id '${s}' not found.`)}else s===document?document.addEventListener(t,e):console.warn("Invalid id parameter provided.")};var Yt=require("zustand/vanilla"),lt=R(require("dompurify"),1);function He(s,t){let e=[],r=s.replace(/:[^/]+/g,o=>(e.push(o.slice(1)),"([^/]+)")),n=new RegExp(`^${r}$`),i=t.match(n),a={};return i&&e.forEach((o,c)=>{a[o]=lt.default.sanitize(i[c+1]??"")}),a}function Ne(s){let t={},e=new URLSearchParams(s);for(let[r,n]of e.entries())t[r]=lt.default.sanitize(n);return t}var z=(0,Yt.createStore)((s,t)=>({params:{},query:{},setFromPattern:e=>{let r=window.location.pathname,n=He(e,r),i=Ne(window.location.search);s({params:n,query:i})},getParam:e=>t().params[e],getQuery:e=>t().query[e]}));function ut(s){let t=z.getState();t.setFromPattern(s);let e=t.params,r=t.query;return{...e,...r}}var dt=(s,t,e)=>{let r=document.querySelectorAll(s);return r.forEach(n=>{n.addEventListener(t,e)}),()=>{r.forEach(n=>{n.removeEventListener(t,e)})}};var ht=R(require("dompurify"),1),ft=(s,t,e={},r)=>{let n={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href","on*"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};ht.default.addHook("uponSanitizeAttribute",(o,c)=>{let l=(c.attrName||"").toLowerCase(),u=(c.attrValue??"").toString().trim();if(/^data-(click|change|submit|select|hover|classlist)$/.test(l)){c.keepAttr=!0;return}if(l.startsWith("on")){c.keepAttr=!1;return}if(o.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(u)||/^\/(?!\/)/.test(u)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(u)||(c.keepAttr=!1);return}if(l==="class"){let h=u.split(/\s+/).filter(Boolean).filter(f=>/^[a-zA-Z0-9\-\:\/_]+$/.test(f));c.attrValue=h.join(" ");return}});let i=ht.default.sanitize(t,{...n,RETURN_DOM_FRAGMENT:!0});s.innerHTML="",s.appendChild(i);let a=(o,c)=>{s.querySelectorAll(`[${o}]`).forEach(l=>{let u=l.getAttribute(o);u&&Object.prototype.hasOwnProperty.call(e,u)&&l.addEventListener(c,e[u])})};a("data-click","click"),a("data-change","change"),a("data-select","select"),a("data-submit","submit"),s.querySelectorAll("[data-hover]").forEach(o=>{let c=o.dataset.hover;c&&Object.prototype.hasOwnProperty.call(e,c)&&(o.addEventListener("mouseenter",e[c]),o.addEventListener("mouseleave",e[c]))}),s.querySelectorAll("[data-classlist]").forEach(o=>{let c=o.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(c)&&o.classList.add(...c.split(/\s+/))}),document.addEventListener("click",o=>o.preventDefault())};var Bt=R(require("dompurify"),1),B=null,mt=(s,t)=>{if(typeof document>"u")return;let e=document.getElementById(s);if(!e)return;let r=e.innerHTML,i=Bt.default.sanitize(r,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html"],FORBID_ATTR:["style","srcset","on*"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1}).replace(/\b(href|src)=["']?([^"'>\s]+)/gi,(a,o,c)=>/^https?:\/\//i.test(c)||/^mailto:/i.test(c)||/^tel:/i.test(c)||/^\/(?!\/)/.test(c)||/^#/.test(c)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(c)?`${o}="${c}"`:`${o}="#"`);if(B!==null&&i!==B){let a=document.createElement("div");t(a),e.innerHTML=B}else B=i,e.innerHTML=i,t(e);document.addEventListener("click",a=>a.preventDefault())};var pt=R(require("dompurify"),1);typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",s=>{let t=s.state;t?.scrollPosition!==void 0&&window.scrollTo(0,t.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var gt=(s,t,e,r="",n=null)=>{if(!s)return;let i=pt.default.sanitize(t,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),a=pt.default.sanitize(e,{USE_PROFILES:{html:!1}});s.setAttribute("href",i),s.setAttribute("aria-label",a),r&&(s.className=r.trim()),n&&s.replaceChildren(n),typeof window<"u"&&s.addEventListener("click",o=>{o.preventDefault();let l=o.currentTarget.getAttribute("href");if(l){let u=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:u},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};var C=R(require("dompurify"),1);var Gt=(s="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",t="'self' 'nonce-rAnd0m123'",e="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",n="'self' https://blogger.googleusercontent.com",i=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],a="'self' https://www.youtube.com",o="'self'",c="/csp-report",l=!1)=>{let u=()=>{try{let d=document.querySelector('meta[http-equiv="Content-Security-Policy"]');d||(d=document.createElement("meta"),d.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(d));let h=l?`report-uri ${c};`:"";d.setAttribute("content",`default-src 'self'; script-src ${s}; style-src ${t}; object-src ${e}; font-src ${r}; img-src ${n}; connect-src ${i.join(" ")}; frame-src ${a}; base-uri ${o}; ${h}`)}catch(d){console.error("Error adding CSP meta element:",d)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",u):u()};var wt=(s,t)=>{let e={name:C.default.sanitize(s.name||""),description:C.default.sanitize(s.description||"Default description"),author:C.default.sanitize(s.author||"")},r=f=>{e.name=C.default.sanitize(f),d("name",e.name)},n=f=>{e.description=C.default.sanitize(f),d("description",e.description)},i=f=>{e.author=C.default.sanitize(f),d("author",e.author)},a=()=>e.name,o=()=>e.description,c=()=>e.author,l=()=>e,u=(f,E)=>{let S=document.createElement("meta");S.setAttribute("name",f),S.setAttribute("content",E),document.head.appendChild(S)},d=(f,E)=>{let S=document.querySelector(`meta[name="${f}"]`);S?S.setAttribute("content",E):u(f,E)},h=()=>{d("name",e.name),d("description",e.description),d("author",e.author)};return t&&Gt(t.scriptSrc,t.styleSrc,t.objectSrc,Array.isArray(t.connectSrc)?t.connectSrc.join(" "):t.connectSrc,t.reportOnly!==void 0?String(t.reportOnly):void 0),h(),{setName:r,setDescription:n,setAuthor:i,getName:a,getDescription:o,getAuthor:c,getAllMetaData:l,appendMetaTagsToHead:h}};var Vt=R(require("dompurify"),1),W=(s,t,e,r,n)=>{let i=`#${s}`,a=t.querySelectorAll(i);if(a.length===0)throw new Error(`[useTSComponent] No element found with id '${s}' in the given parent.`);if(a.length>1)throw new Error(`[useTSComponent] Duplicate id '${s}' detected. Found ${a.length} elements.`);let o=a[0];o.innerHTML=Vt.default.sanitize(o.innerHTML,{USE_PROFILES:{html:!0}}),e(o,r,n)};var Et=(s,t,e,r=[])=>{let n=new Set;s.forEach((i,a)=>{if(n.has(i)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${i}" \u2014 skipping.`);return}n.add(i);let o=t.querySelectorAll(`#${i}`);if(o.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${i}" (${o.length} elements found) \u2014 skipping component mount.`);return}let c=e[a],l=Array.isArray(r)?r[a]:void 0;typeof c=="function"?W(i,t,c,l):console.warn(`[useTSCollection] No valid component function found for ID: "${i}"`)})};var k=(s,t)=>{let r=(t??document).querySelectorAll(s);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${s}'`),null;if(s.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${s}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${s}'. Returning the first one.`),r[0]};var Kt=require("jwt-decode"),yt=(s,t)=>{let e=localStorage.getItem("token");if(!e)return window.location.href=t,null;try{let r=(0,Kt.jwtDecode)(e),n=Date.now()/1e3;return r.exp&&r.exp<n&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=t),null}catch(r){return console.error("Invalid token:",r),window.location.href=t,null}};var G=(s,t,e)=>{s.forEach(r=>{t.forEach(n=>{r.addEventListener(n,i=>{e(r,i)})})})};var _t=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var Tt=(s,t)=>{let e=document.querySelector(`#${s}`)||document.querySelector(`.${s}`);if(!e)return;let r=window.location.pathname.replace(/\/$/,"");for(let n of t){let i=n.path.replace(/\/$/,"");if(r===i||r.startsWith(`${i}/`)){n.component(e);break}}};function St(s,t){let e=window.location.pathname.replace(/\/$/,"");t.routes.forEach(r=>{r.children?.length&&r.children.forEach(n=>{let i=n.path.replace(/\/$/,"");if(e===i||e.startsWith(`${i}/`)){let a=s.querySelector(`#${n.outlet}`)||s.querySelector(`.${n.outlet}`);a instanceof HTMLElement&&n.element&&n.element(a)}})})}var Qt=require("zustand/vanilla");function Pt(s){let t=(0,Qt.createStore)(()=>({value:s})),e=new Set;return{get:()=>t.getState().value,set:r=>{t.setState({value:r}),e.forEach(n=>n(r))},subscribe:r=>(e.add(r),r(t.getState().value),()=>e.delete(r))}}function vt(s){let t=s();typeof t=="function"&&t()}var Rt=async()=>{let s="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",t="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",e=r=>new Promise((n,i)=>{let a=document.createElement("script");a.src=r,a.onload=()=>n(),a.onerror=()=>i(new Error(`Failed to load ${r}`)),document.head.appendChild(a)});await e(s),await e(t),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},Lt=s=>new Promise((t,e)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${s}`,r.onload=()=>t(),r.onerror=()=>e(new Error(`Failed to load ${s}`)),document.body.appendChild(r)});function bt(s){let t=null;return async(e,r)=>{try{if(!t){let n=await s();t=n.default||n}if(typeof t=="function")return t(e,r);if(t instanceof HTMLElement){let n=t.cloneNode(!0);return e?.appendChild(n),n}if(typeof t=="object"&&t!==null&&"render"in t&&typeof t.render=="function")return t.render(e,r);console.warn("useTSLazy: Unsupported module type",t)}catch(n){console.error("useTSLazy failed:",n)}}}var Dt=s=>typeof window>"u"?{isDOM:null}:{isDOM:s||document.body};var Jt=require("lodash-es"),xt=s=>s;typeof window<"u"&&typeof document<"u"&&(xt=s=>{let t=document.createElement("div");return t.innerText=s,t.innerHTML});var ke=s=>{(s?Array.isArray(s)?s:s instanceof HTMLAnchorElement?[s]:Array.from(s):Array.from(document.querySelectorAll("a"))).forEach(e=>{if(!e||e.dataset.anchorEnhanced==="true")return;e.dataset.anchorEnhanced="true";let r=e.getAttribute("class")||"";e.setAttribute("class",xt(r));let n=e.getAttribute("aria-label");n&&e.setAttribute("aria-label",xt(n));let i=e.querySelector(":scope > *");i&&(e.innerHTML="",e.appendChild(i));let a=e.getAttribute("href")||"";if(!a.startsWith("#")){try{if(new URL(a,window.location.href).origin!==window.location.origin)return}catch{return}e.addEventListener("click",o=>{o.preventDefault();let c=e.getAttribute("href")||"";try{let l=new URL(c,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",c,l)}})}})},$e=(0,Jt.debounce)(ke,50),Xt=s=>{$e(s)};var At=s=>{if(!s)return;let t=k("a",s);Xt(t)};var Mt=R(require("dompurify"),1);var te=require("zustand/vanilla"),ee=R(require("dompurify"),1),O=(0,te.createStore)(s=>({params:{},query:{},setParams:t=>s(()=>({params:Zt(t)})),setQuery:t=>s(()=>({query:Zt(t)}))}));function Zt(s){let t={};for(let e in s)t[e]=ee.default.sanitize(s[e]);return t}var V=class{constructor(t,e){this.routes=[];this.routes=t,this.expectedParams=new Set(e),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let t=window.location.pathname,e=window.location.search,r=this.parseQueryParams(e),n=this.findMatchingRoute(t,this.routes);if(n){if(n.routeto){this.navigate(n.routeto);return}let i=this.filterAndSanitizeParams(n.params);O.getState().setParams(i),O.getState().setQuery(r);let a=document.createElement("div");if(n.element?.(a,i,r),n.children){let o=t.slice(n.path.length),c=a.querySelector("#child");c&&this.renderChildren(n.children,o,c,i,r)}}else{let i=this.findMatchingRoute("*",this.routes);if(i){let a=this.filterAndSanitizeParams(i.params);O.getState().setParams(a),O.getState().setQuery(r);let o=document.createElement("div");i.element?.(o,a,r)}}}renderChildren(t,e,r,n,i){if(!t||t.length===0){let o=r.querySelector("#child");o&&o.remove();return}let a=this.findMatchingRoute(e,t);if(a){let o=document.createElement("div");o.id="child";let c={...n,...a.params},l=this.filterAndSanitizeParams(c);if(O.getState().setParams(l),O.getState().setQuery(i),a.element?.(o,l,i),r.appendChild(o),a.children){let u=e.slice(a.path.length);this.renderChildren(a.children,u,o,l,i)}}}parseQueryParams(t){let e={},r=new URLSearchParams(t);for(let[n,i]of r.entries())this.expectedParams.has(n)&&(e[n]=Mt.default.sanitize(i));return e}findMatchingRoute(t,e,r={}){for(let n of e){let i=n.path;if(i==="*")return n;{let o=[],c=i.replace(/:[^\s/]+/g,d=>(o.push(d.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${c}(?:/|$)`),u=t.match(l);if(u){let d={...r};if(o.forEach((h,f)=>{d[h]=u[f+1]??""}),n.children){let h=t.slice(u[0].length),f=this.findMatchingRoute(h,n.children,d);if(f)return f}return{...n,params:d}}}}}filterAndSanitizeParams(t){if(!t)return{};let e={};for(let r in t)this.expectedParams.has(r)&&(e[r]=Mt.default.sanitize(t[r]??""));return e}navigate(t){history.pushState(null,"",t),this.handlePopState()}addRoute(t){this.routes.push(t)}};var be=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let s=await import("fs/promises"),t=await import("path"),e=await Promise.resolve().then(()=>(Le(),Re)),r=t.resolve("src/pages"),n=t.resolve("src/gen"),i=t.resolve("src/routes"),a=t.join(n,"tsrouter.gen.ts"),o=t.join(i,"__root.ts"),c=process.env.NODE_ENV!=="production";async function l(y){try{await s.mkdir(y,{recursive:!0})}catch{}}function u(y,_){let g="/"+t.relative(_,y).replace(/\\/g,"/");return g=g.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",g.replace(/\[(.+?)\]/g,":$1")}function d(y){return y.replace(/^\//,"").split("/").map(_=>_.startsWith(":")?_.slice(1):_).filter(Boolean).join("-")||"index"}function h(y,_){let P=t.relative(_,y).replace(/\\/g,"/").split("/").filter(Boolean),v=P[P.length-1].replace(".ts",""),b=P.length>1?P[P.length-2]:"";if(v==="index")return b?b.charAt(0).toUpperCase()+b.slice(1):"Index";if(v.startsWith("[")&&v.endsWith("]")){let I=v.slice(1,-1);return b.charAt(0).toUpperCase()+b.slice(1)+I.charAt(0).toUpperCase()+I.slice(1)+"Param"}return v.charAt(0).toUpperCase()+v.slice(1)}async function f(y){let _=await s.readdir(y,{withFileTypes:!0}),g=[];for(let P of _){let v=t.join(y,P.name);if(P.isDirectory())g=g.concat(await f(v));else if(P.isFile()&&P.name.endsWith(".ts")){let b=u(v,r),I=d(b),T=h(v,r);g.push({file:v,route:b,routeName:I,importName:T})}}return g}function E(y,_){let g=_.includes(":"),P=g?_.match(/:([^/]+)/)?.[1]:null;return`import { html, useTSElements, useTSMetaData${g?", useTSExtractParams":""} } from '@devwareng/vanilla-ts';
1
+ "use strict";var xe=Object.create;var G=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Ce=Object.prototype.hasOwnProperty;var ot=(s,t)=>()=>(s&&(t=s(s=0)),t);var Ut=(s,t)=>{for(var e in t)G(s,e,{get:t[e],enumerable:!0})},qt=(s,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Me(t))!Ce.call(s,n)&&n!==e&&G(s,n,{get:()=>t[n],enumerable:!(r=Ae(t,n))||r.enumerable});return s};var R=(s,t,e)=>(e=s!=null?xe(Oe(s)):{},qt(t||!s||!s.__esModule?G(e,"default",{value:s,enumerable:!0}):e,s)),Ie=s=>qt(G({},"__esModule",{value:!0}),s);function ce(s,t={}){let e=t.entryType||t.type;if(e==="both"&&(e=L.FILE_DIR_TYPE),e&&(t.type=e),s){if(typeof s!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(e&&!ne.includes(e))throw new Error(`readdirp: Invalid type passed. Use one of ${ne.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return t.root=s,new Ft(t)}var A,oe,M,L,It,ae,We,ne,je,Ue,qe,Ye,re,ie,Ft,le=ot(()=>{"use strict";A=require("fs/promises"),oe=require("stream"),M=require("path"),L={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},It={root:".",fileFilter:s=>!0,directoryFilter:s=>!0,type:L.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(It);ae="READDIRP_RECURSIVE_ERROR",We=new Set(["ENOENT","EPERM","EACCES","ELOOP",ae]),ne=[L.DIR_TYPE,L.EVERYTHING_TYPE,L.FILE_DIR_TYPE,L.FILE_TYPE],je=new Set([L.DIR_TYPE,L.EVERYTHING_TYPE,L.FILE_DIR_TYPE]),Ue=new Set([L.EVERYTHING_TYPE,L.FILE_DIR_TYPE,L.FILE_TYPE]),qe=s=>We.has(s.code),Ye=process.platform==="win32",re=s=>!0,ie=s=>{if(s===void 0)return re;if(typeof s=="function")return s;if(typeof s=="string"){let t=s.trim();return e=>e.basename===t}if(Array.isArray(s)){let t=s.map(e=>e.trim());return e=>t.some(r=>e.basename===r)}return re},Ft=class extends oe.Readable{constructor(t={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:t.highWaterMark});let e={...It,...t},{root:r,type:n}=e;this._fileFilter=ie(e.fileFilter),this._directoryFilter=ie(e.directoryFilter);let i=e.lstat?A.lstat:A.stat;Ye?this._stat=a=>i(a,{bigint:!0}):this._stat=i,this._maxDepth=e.depth??It.depth,this._wantsDir=n?je.has(n):!1,this._wantsFile=n?Ue.has(n):!1,this._wantsEverything=n===L.EVERYTHING_TYPE,this._root=(0,M.resolve)(r),this._isDirent=!e.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(r,1)],this.reading=!1,this.parent=void 0}async _read(t){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&t>0;){let e=this.parent,r=e&&e.files;if(r&&r.length>0){let{path:n,depth:i}=e,a=r.splice(0,t).map(c=>this._formatEntry(c,n)),o=await Promise.all(a);for(let c of o){if(!c)continue;if(this.destroyed)return;let l=await this._getEntryType(c);l==="directory"&&this._directoryFilter(c)?(i<=this._maxDepth&&this.parents.push(this._exploreDir(c.fullPath,i+1)),this._wantsDir&&(this.push(c),t--)):(l==="file"||this._includeAsFile(c))&&this._fileFilter(c)&&this._wantsFile&&(this.push(c),t--)}}else{let n=this.parents.pop();if(!n){this.push(null);break}if(this.parent=await n,this.destroyed)return}}}catch(e){this.destroy(e)}finally{this.reading=!1}}}async _exploreDir(t,e){let r;try{r=await(0,A.readdir)(t,this._rdOptions)}catch(n){this._onError(n)}return{files:r,depth:e,path:t}}async _formatEntry(t,e){let r,n=this._isDirent?t.name:t;try{let i=(0,M.resolve)((0,M.join)(e,n));r={path:(0,M.relative)(this._root,i),fullPath:i,basename:n},r[this._statsProp]=this._isDirent?t:await this._stat(i)}catch(i){this._onError(i);return}return r}_onError(t){qe(t)&&!this.destroyed?this.emit("warn",t):this.destroy(t)}async _getEntryType(t){if(!t&&this._statsProp in t)return"";let e=t[this._statsProp];if(e.isFile())return"file";if(e.isDirectory())return"directory";if(e&&e.isSymbolicLink()){let r=t.fullPath;try{let n=await(0,A.realpath)(r),i=await(0,A.lstat)(n);if(i.isFile())return"file";if(i.isDirectory()){let a=n.length;if(r.startsWith(n)&&r.substr(a,1)===M.sep){let o=new Error(`Circular symlink detected: "${r}" points to "${n}"`);return o.code=ae,this._onError(o)}return"directory"}}catch(n){return this._onError(n),""}}}_includeAsFile(t){let e=t&&t[this._statsProp];return e&&this._wantsEverything&&!e.isDirectory()}}});function ue(s,t,e,r,n){let i=(a,o)=>{e(s),n(a,o,{watchedPath:s}),o&&s!==o&&Z(p.resolve(s,o),F,p.join(s,o))};try{return(0,H.watch)(s,{persistent:t.persistent},i)}catch(a){r(a);return}}var H,x,p,de,Be,kt,he,et,st,$t,Ge,Ve,Ke,fe,g,D,Qe,Je,F,J,k,Xe,Ze,ts,Nt,j,es,U,me,X,Z,ss,Ht,ns,tt,pe=ot(()=>{"use strict";H=require("fs"),x=require("fs/promises"),p=R(require("path"),1),de=require("os"),Be="data",kt="end",he="close",et=()=>{},st=process.platform,$t=st==="win32",Ge=st==="darwin",Ve=st==="linux",Ke=st==="freebsd",fe=(0,de.type)()==="OS400",g={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},D=g,Qe="watch",Je={lstat:x.lstat,stat:x.stat},F="listeners",J="errHandlers",k="rawEmitters",Xe=[F,J,k],Ze=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),ts=s=>Ze.has(p.extname(s).slice(1).toLowerCase()),Nt=(s,t)=>{s instanceof Set?s.forEach(t):t(s)},j=(s,t,e)=>{let r=s[t];r instanceof Set||(s[t]=r=new Set([r])),r.add(e)},es=s=>t=>{let e=s[t];e instanceof Set?e.clear():delete s[t]},U=(s,t,e)=>{let r=s[t];r instanceof Set?r.delete(e):r===e&&delete s[t]},me=s=>s instanceof Set?s.size===0:!s,X=new Map;Z=(s,t,e,r,n)=>{let i=X.get(s);i&&Nt(i[t],a=>{a(e,r,n)})},ss=(s,t,e,r)=>{let{listener:n,errHandler:i,rawEmitter:a}=r,o=X.get(t),c;if(!e.persistent)return c=ue(s,e,n,i,a),c?c.close.bind(c):void 0;if(o)j(o,F,n),j(o,J,i),j(o,k,a);else{if(c=ue(s,e,Z.bind(null,t,F),i,Z.bind(null,t,k)),!c)return;c.on(D.ERROR,async l=>{let u=Z.bind(null,t,J);if(o&&(o.watcherUnusable=!0),$t&&l.code==="EPERM")try{await(await(0,x.open)(s,"r")).close(),u(l)}catch{}else u(l)}),o={listeners:n,errHandlers:i,rawEmitters:a,watcher:c},X.set(t,o)}return()=>{U(o,F,n),U(o,J,i),U(o,k,a),me(o.listeners)&&(o.watcher.close(),X.delete(t),Xe.forEach(es(o)),o.watcher=void 0,Object.freeze(o))}},Ht=new Map,ns=(s,t,e,r)=>{let{listener:n,rawEmitter:i}=r,a=Ht.get(t),o=a&&a.options;return o&&(o.persistent<e.persistent||o.interval>e.interval)&&((0,H.unwatchFile)(t),a=void 0),a?(j(a,F,n),j(a,k,i)):(a={listeners:n,rawEmitters:i,options:e,watcher:(0,H.watchFile)(t,e,(c,l)=>{Nt(a.rawEmitters,d=>{d(D.CHANGE,t,{curr:c,prev:l})});let u=c.mtimeMs;(c.size!==l.size||u>l.mtimeMs||u===0)&&Nt(a.listeners,d=>d(s,c))})},Ht.set(t,a)),()=>{U(a,F,n),U(a,k,i),me(a.listeners)&&(Ht.delete(t),(0,H.unwatchFile)(t),a.options=a.watcher=void 0,Object.freeze(a))}},tt=class{constructor(t){this.fsw=t,this._boundHandleError=e=>t._handleError(e)}_watchWithNodeFs(t,e){let r=this.fsw.options,n=p.dirname(t),i=p.basename(t);this.fsw._getWatchedDir(n).add(i);let o=p.resolve(t),c={persistent:r.persistent};e||(e=et);let l;if(r.usePolling){let u=r.interval!==r.binaryInterval;c.interval=u&&ts(i)?r.binaryInterval:r.interval,l=ns(t,o,c,{listener:e,rawEmitter:this.fsw._emitRaw})}else l=ss(t,o,c,{listener:e,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return l}_handleFile(t,e,r){if(this.fsw.closed)return;let n=p.dirname(t),i=p.basename(t),a=this.fsw._getWatchedDir(n),o=e;if(a.has(i))return;let c=async(u,d)=>{if(this.fsw._throttle(Qe,t,5)){if(!d||d.mtimeMs===0)try{let h=await(0,x.stat)(t);if(this.fsw.closed)return;let f=h.atimeMs,w=h.mtimeMs;if((!f||f<=w||w!==o.mtimeMs)&&this.fsw._emit(D.CHANGE,t,h),(Ge||Ve||Ke)&&o.ino!==h.ino){this.fsw._closeFile(u),o=h;let P=this._watchWithNodeFs(t,c);P&&this.fsw._addPathCloser(u,P)}else o=h}catch{this.fsw._remove(n,i)}else if(a.has(i)){let h=d.atimeMs,f=d.mtimeMs;(!h||h<=f||f!==o.mtimeMs)&&this.fsw._emit(D.CHANGE,t,d),o=d}}},l=this._watchWithNodeFs(t,c);if(!(r&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(t)){if(!this.fsw._throttle(D.ADD,t,0))return;this.fsw._emit(D.ADD,t,e)}return l}async _handleSymlink(t,e,r,n){if(this.fsw.closed)return;let i=t.fullPath,a=this.fsw._getWatchedDir(e);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let o;try{o=await(0,x.realpath)(r)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(a.has(n)?this.fsw._symlinkPaths.get(i)!==o&&(this.fsw._symlinkPaths.set(i,o),this.fsw._emit(D.CHANGE,r,t.stats)):(a.add(n),this.fsw._symlinkPaths.set(i,o),this.fsw._emit(D.ADD,r,t.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(i))return!0;this.fsw._symlinkPaths.set(i,!0)}_handleRead(t,e,r,n,i,a,o){if(t=p.join(t,""),o=this.fsw._throttle("readdir",t,1e3),!o)return;let c=this.fsw._getWatchedDir(r.path),l=new Set,u=this.fsw._readdirp(t,{fileFilter:d=>r.filterPath(d),directoryFilter:d=>r.filterDir(d)});if(u)return u.on(Be,async d=>{if(this.fsw.closed){u=void 0;return}let h=d.path,f=p.join(t,h);if(l.add(h),!(d.stats.isSymbolicLink()&&await this._handleSymlink(d,t,f,h))){if(this.fsw.closed){u=void 0;return}(h===n||!n&&!c.has(h))&&(this.fsw._incrReadyCount(),f=p.join(i,p.relative(i,f)),this._addToNodeFs(f,e,r,a+1))}}).on(D.ERROR,this._boundHandleError),new Promise((d,h)=>{if(!u)return h();u.once(kt,()=>{if(this.fsw.closed){u=void 0;return}let f=o?o.clear():!1;d(void 0),c.getChildren().filter(w=>w!==t&&!l.has(w)).forEach(w=>{this.fsw._remove(t,w)}),u=void 0,f&&this._handleRead(t,!1,r,n,i,a,o)})})}async _handleDir(t,e,r,n,i,a,o){let c=this.fsw._getWatchedDir(p.dirname(t)),l=c.has(p.basename(t));!(r&&this.fsw.options.ignoreInitial)&&!i&&!l&&this.fsw._emit(D.ADD_DIR,t,e),c.add(p.basename(t)),this.fsw._getWatchedDir(t);let u,d,h=this.fsw.options.depth;if((h==null||n<=h)&&!this.fsw._symlinkPaths.has(o)){if(!i&&(await this._handleRead(t,r,a,i,t,n,u),this.fsw.closed))return;d=this._watchWithNodeFs(t,(f,w)=>{w&&w.mtimeMs===0||this._handleRead(f,!1,a,i,t,n,u)})}return d}async _addToNodeFs(t,e,r,n,i){let a=this.fsw._emitReady;if(this.fsw._isIgnored(t)||this.fsw.closed)return a(),!1;let o=this.fsw._getWatchHelpers(t);r&&(o.filterPath=c=>r.filterPath(c),o.filterDir=c=>r.filterDir(c));try{let c=await Je[o.statMethod](o.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(o.watchPath,c))return a(),!1;let l=this.fsw.options.followSymlinks,u;if(c.isDirectory()){let d=p.resolve(t),h=l?await(0,x.realpath)(t):t;if(this.fsw.closed||(u=await this._handleDir(o.watchPath,c,e,n,i,o,h),this.fsw.closed))return;d!==h&&h!==void 0&&this.fsw._symlinkPaths.set(d,h)}else if(c.isSymbolicLink()){let d=l?await(0,x.realpath)(t):t;if(this.fsw.closed)return;let h=p.dirname(o.watchPath);if(this.fsw._getWatchedDir(h).add(o.watchPath),this.fsw._emit(D.ADD,o.watchPath,c),u=await this._handleDir(h,c,e,n,t,o,d),this.fsw.closed)return;d!==void 0&&this.fsw._symlinkPaths.set(p.resolve(t),d)}else u=this._handleFile(o.watchPath,c,e);return a(),u&&this.fsw._addPathCloser(t,u),!1}catch(c){if(this.fsw._handleError(c))return a(),t}}}});var Le={};Ut(Le,{FSWatcher:()=>q,WatchHelper:()=>rt,default:()=>ws,watch:()=>Re});function nt(s){return Array.isArray(s)?s:[s]}function us(s){return typeof s=="function"?s:typeof s=="string"?t=>s===t:s instanceof RegExp?t=>s.test(t):typeof s=="object"&&s!==null?t=>{if(s.path===t)return!0;if(s.recursive){let e=m.relative(s.path,t);return e?!e.startsWith("..")&&!m.isAbsolute(e):!1}return!1}:()=>!1}function ds(s){if(typeof s!="string")throw new Error("string expected");s=m.normalize(s),s=s.replace(/\\/g,"/");let t=!1;s.startsWith("//")&&(t=!0);let e=/\/\//;for(;s.match(e);)s=s.replace(e,"/");return t&&(s="/"+s),s}function we(s,t,e){let r=ds(t);for(let n=0;n<s.length;n++){let i=s[n];if(i(r,e))return!0}return!1}function hs(s,t){if(s==null)throw new TypeError("anymatch: specify first argument");let r=nt(s).map(n=>us(n));return t==null?(n,i)=>we(r,n,i):we(r,t)}function Re(s,t={}){let e=new q(t);return e.add(s),e}var _e,it,Se,m,zt,rs,Pe,is,os,as,ge,cs,ls,Wt,Ee,ye,ve,Te,fs,ms,jt,ps,gs,rt,q,ws,be=ot(()=>{"use strict";_e=require("fs"),it=require("fs/promises"),Se=require("events"),m=R(require("path"),1);le();pe();zt="/",rs="//",Pe=".",is="..",os="string",as=/\\/g,ge=/\/\//,cs=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,ls=/^\.[/\\]/;Wt=s=>typeof s=="object"&&s!==null&&!(s instanceof RegExp);Ee=s=>{let t=nt(s).flat();if(!t.every(e=>typeof e===os))throw new TypeError(`Non-string provided as watch path: ${t}`);return t.map(ve)},ye=s=>{let t=s.replace(as,zt),e=!1;for(t.startsWith(rs)&&(e=!0);t.match(ge);)t=t.replace(ge,zt);return e&&(t=zt+t),t},ve=s=>ye(m.normalize(ye(s))),Te=(s="")=>t=>typeof t=="string"?ve(m.isAbsolute(t)?t:m.join(s,t)):t,fs=(s,t)=>m.isAbsolute(s)?s:m.join(t,s),ms=Object.freeze(new Set),jt=class{constructor(t,e){this.path=t,this._removeWatcher=e,this.items=new Set}add(t){let{items:e}=this;e&&t!==Pe&&t!==is&&e.add(t)}async remove(t){let{items:e}=this;if(!e||(e.delete(t),e.size>0))return;let r=this.path;try{await(0,it.readdir)(r)}catch{this._removeWatcher&&this._removeWatcher(m.dirname(r),m.basename(r))}}has(t){let{items:e}=this;if(e)return e.has(t)}getChildren(){let{items:t}=this;return t?[...t.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=et,this.items=ms,Object.freeze(this)}},ps="stat",gs="lstat",rt=class{constructor(t,e,r){this.fsw=r;let n=t;this.path=t=t.replace(ls,""),this.watchPath=n,this.fullWatchPath=m.resolve(n),this.dirParts=[],this.dirParts.forEach(i=>{i.length>1&&i.pop()}),this.followSymlinks=e,this.statMethod=e?ps:gs}entryPath(t){return m.join(this.watchPath,m.relative(this.watchPath,t.fullPath))}filterPath(t){let{stats:e}=t;if(e&&e.isSymbolicLink())return this.filterDir(t);let r=this.entryPath(t);return this.fsw._isntIgnored(r,e)&&this.fsw._hasReadPermissions(e)}filterDir(t){return this.fsw._isntIgnored(this.entryPath(t),t.stats)}},q=class extends Se.EventEmitter{constructor(t={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let e=t.awaitWriteFinish,r={stabilityThreshold:2e3,pollInterval:100},n={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...t,ignored:t.ignored?nt(t.ignored):nt([]),awaitWriteFinish:e===!0?r:typeof e=="object"?{...r,...e}:!1};fe&&(n.usePolling=!0),n.atomic===void 0&&(n.atomic=!n.usePolling);let i=process.env.CHOKIDAR_USEPOLLING;if(i!==void 0){let c=i.toLowerCase();c==="false"||c==="0"?n.usePolling=!1:c==="true"||c==="1"?n.usePolling=!0:n.usePolling=!!c}let a=process.env.CHOKIDAR_INTERVAL;a&&(n.interval=Number.parseInt(a,10));let o=0;this._emitReady=()=>{o++,o>=this._readyCount&&(this._emitReady=et,this._readyEmitted=!0,process.nextTick(()=>this.emit(g.READY)))},this._emitRaw=(...c)=>this.emit(g.RAW,...c),this._boundRemove=this._remove.bind(this),this.options=n,this._nodeFsHandler=new tt(this),Object.freeze(n)}_addIgnoredPath(t){if(Wt(t)){for(let e of this._ignoredPaths)if(Wt(e)&&e.path===t.path&&e.recursive===t.recursive)return}this._ignoredPaths.add(t)}_removeIgnoredPath(t){if(this._ignoredPaths.delete(t),typeof t=="string")for(let e of this._ignoredPaths)Wt(e)&&e.path===t&&this._ignoredPaths.delete(e)}add(t,e,r){let{cwd:n}=this.options;this.closed=!1,this._closePromise=void 0;let i=Ee(t);return n&&(i=i.map(a=>fs(a,n))),i.forEach(a=>{this._removeIgnoredPath(a)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=i.length,Promise.all(i.map(async a=>{let o=await this._nodeFsHandler._addToNodeFs(a,!r,void 0,0,e);return o&&this._emitReady(),o})).then(a=>{this.closed||a.forEach(o=>{o&&this.add(m.dirname(o),m.basename(e||o))})}),this}unwatch(t){if(this.closed)return this;let e=Ee(t),{cwd:r}=this.options;return e.forEach(n=>{!m.isAbsolute(n)&&!this._closers.has(n)&&(r&&(n=m.join(r,n)),n=m.resolve(n)),this._closePath(n),this._addIgnoredPath(n),this._watched.has(n)&&this._addIgnoredPath({path:n,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let t=[];return this._closers.forEach(e=>e.forEach(r=>{let n=r();n instanceof Promise&&t.push(n)})),this._streams.forEach(e=>e.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(e=>e.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=t.length?Promise.all(t).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let t={};return this._watched.forEach((e,r)=>{let i=(this.options.cwd?m.relative(this.options.cwd,r):r)||Pe;t[i]=e.getChildren().sort()}),t}emitWithAll(t,e){this.emit(t,...e),t!==g.ERROR&&this.emit(g.ALL,t,...e)}async _emit(t,e,r){if(this.closed)return;let n=this.options;$t&&(e=m.normalize(e)),n.cwd&&(e=m.relative(n.cwd,e));let i=[e];r!=null&&i.push(r);let a=n.awaitWriteFinish,o;if(a&&(o=this._pendingWrites.get(e)))return o.lastChange=new Date,this;if(n.atomic){if(t===g.UNLINK)return this._pendingUnlinks.set(e,[t,...i]),setTimeout(()=>{this._pendingUnlinks.forEach((c,l)=>{this.emit(...c),this.emit(g.ALL,...c),this._pendingUnlinks.delete(l)})},typeof n.atomic=="number"?n.atomic:100),this;t===g.ADD&&this._pendingUnlinks.has(e)&&(t=g.CHANGE,this._pendingUnlinks.delete(e))}if(a&&(t===g.ADD||t===g.CHANGE)&&this._readyEmitted){let c=(l,u)=>{l?(t=g.ERROR,i[0]=l,this.emitWithAll(t,i)):u&&(i.length>1?i[1]=u:i.push(u),this.emitWithAll(t,i))};return this._awaitWriteFinish(e,a.stabilityThreshold,t,c),this}if(t===g.CHANGE&&!this._throttle(g.CHANGE,e,50))return this;if(n.alwaysStat&&r===void 0&&(t===g.ADD||t===g.ADD_DIR||t===g.CHANGE)){let c=n.cwd?m.join(n.cwd,e):e,l;try{l=await(0,it.stat)(c)}catch{}if(!l||this.closed)return;i.push(l)}return this.emitWithAll(t,i),this}_handleError(t){let e=t&&t.code;return t&&e!=="ENOENT"&&e!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||e!=="EPERM"&&e!=="EACCES")&&this.emit(g.ERROR,t),t||this.closed}_throttle(t,e,r){this._throttled.has(t)||this._throttled.set(t,new Map);let n=this._throttled.get(t);if(!n)throw new Error("invalid throttle");let i=n.get(e);if(i)return i.count++,!1;let a,o=()=>{let l=n.get(e),u=l?l.count:0;return n.delete(e),clearTimeout(a),l&&clearTimeout(l.timeoutObject),u};a=setTimeout(o,r);let c={timeoutObject:a,clear:o,count:0};return n.set(e,c),c}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(t,e,r,n){let i=this.options.awaitWriteFinish;if(typeof i!="object")return;let a=i.pollInterval,o,c=t;this.options.cwd&&!m.isAbsolute(t)&&(c=m.join(this.options.cwd,t));let l=new Date,u=this._pendingWrites;function d(h){(0,_e.stat)(c,(f,w)=>{if(f||!u.has(t)){f&&f.code!=="ENOENT"&&n(f);return}let P=Number(new Date);h&&w.size!==h.size&&(u.get(t).lastChange=P);let Y=u.get(t);P-Y.lastChange>=e?(u.delete(t),n(void 0,w)):o=setTimeout(d,a,w)})}u.has(t)||(u.set(t,{lastChange:l,cancelWait:()=>(u.delete(t),clearTimeout(o),r)}),o=setTimeout(d,a))}_isIgnored(t,e){if(this.options.atomic&&cs.test(t))return!0;if(!this._userIgnored){let{cwd:r}=this.options,i=(this.options.ignored||[]).map(Te(r)),o=[...[...this._ignoredPaths].map(Te(r)),...i];this._userIgnored=hs(o,void 0)}return this._userIgnored(t,e)}_isntIgnored(t,e){return!this._isIgnored(t,e)}_getWatchHelpers(t){return new rt(t,this.options.followSymlinks,this)}_getWatchedDir(t){let e=m.resolve(t);return this._watched.has(e)||this._watched.set(e,new jt(e,this._boundRemove)),this._watched.get(e)}_hasReadPermissions(t){return this.options.ignorePermissionErrors?!0:!!(Number(t.mode)&256)}_remove(t,e,r){let n=m.join(t,e),i=m.resolve(n);if(r=r??(this._watched.has(n)||this._watched.has(i)),!this._throttle("remove",n,100))return;!r&&this._watched.size===1&&this.add(t,e,!0),this._getWatchedDir(n).getChildren().forEach(h=>this._remove(n,h));let c=this._getWatchedDir(t),l=c.has(e);c.remove(e),this._symlinkPaths.has(i)&&this._symlinkPaths.delete(i);let u=n;if(this.options.cwd&&(u=m.relative(this.options.cwd,n)),this.options.awaitWriteFinish&&this._pendingWrites.has(u)&&this._pendingWrites.get(u).cancelWait()===g.ADD)return;this._watched.delete(n),this._watched.delete(i);let d=r?g.UNLINK_DIR:g.UNLINK;l&&!this._isIgnored(n)&&this._emit(d,n),this._closePath(n)}_closePath(t){this._closeFile(t);let e=m.dirname(t);this._getWatchedDir(e).remove(m.basename(t))}_closeFile(t){let e=this._closers.get(t);e&&(e.forEach(r=>r()),this._closers.delete(t))}_addPathCloser(t,e){if(!e)return;let r=this._closers.get(t);r||(r=[],this._closers.set(t,r)),r.push(e)}_readdirp(t,e){if(this.closed)return;let r={type:g.ALL,alwaysStat:!0,lstat:!0,...e,depth:0},n=ce(t,r);return this._streams.add(n),n.once(he,()=>{n=void 0}),n.once(kt,()=>{n&&(this._streams.delete(n),n=void 0)}),n}};ws={watch:Re,FSWatcher:q}});var Es={};Ut(Es,{TSFilebasedRouter:()=>De,TSRouter:()=>Q,createEffect:()=>Lt,createSignal:()=>Rt,html:()=>at,loadPyFiles:()=>Dt,mapper:()=>Yt,renderChildRoutes:()=>vt,useAnchorSingle:()=>Et,useInitialDOM:()=>gt,useTSAuth:()=>_t,useTSCollection:()=>Tt,useTSComponent:()=>W,useTSElementEach:()=>K,useTSElements:()=>pt,useTSEvent:()=>ut,useTSEventAll:()=>ft,useTSExtractParams:()=>ht,useTSLazy:()=>xt,useTSMetaData:()=>yt,useTSNavigate:()=>St,useTSNoReload:()=>Ot,useTSOutlet:()=>Pt,useTSParams:()=>z,useTSPurifier:()=>lt,useTSSSRHydration:()=>At,useTSSelect:()=>N,useTSloadBrython:()=>bt});module.exports=Ie(Es);function Fe(s){let t=s==null?"":String(s),e=t.toLowerCase();return(e.includes("<script")||e.includes("javascript:"))&&(t=""),t.replace(/<\s*(script|iframe|object|embed|link|style|meta|body)[^>]*>.*?<\s*\/\s*\1\s*>/gi,"").replace(/<\s*(script|iframe|object|embed|link|style|meta)[^>]*>/gi,"").replace(/\s+on\w+\s*=\s*(['"]).*?\1/gi,"").replace(/\s+on\w+\s*=\s*[^\s>]+/gi,"").replace(/\s(href|src)\s*=\s*(['"]?)\s*(javascript:|vbscript:|data:|file:)[^'">\s]*\2/gi,'$1="#"')}function at(s,...t){return s.reduce((e,r,n)=>{let i=n<t.length?Fe(t[n]):"";return e+r+i},"")}var He=s=>s.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),Yt=s=>s?.map(t=>He(t)).join("")??"";var ct=R(require("dompurify"),1),lt=(s,t)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...t};return typeof s=="string"?ct.default.sanitize(s,r):ct.default.sanitize(s.innerHTML,r)};var ut=(s,t,e)=>{if(typeof s=="string"){let r=document.getElementById(s);r?r.addEventListener(t,e):console.warn(`Element with id '${s}' not found.`)}else s===document?document.addEventListener(t,e):console.warn("Invalid id parameter provided.")};var Bt=require("zustand/vanilla"),dt=R(require("dompurify"),1);function Ne(s,t){let e=[],r=s.replace(/:[^/]+/g,o=>(e.push(o.slice(1)),"([^/]+)")),n=new RegExp(`^${r}$`),i=t.match(n),a={};return i&&e.forEach((o,c)=>{a[o]=dt.default.sanitize(i[c+1]??"")}),a}function ke(s){let t={},e=new URLSearchParams(s);for(let[r,n]of e.entries())t[r]=dt.default.sanitize(n);return t}var z=(0,Bt.createStore)((s,t)=>({params:{},query:{},setFromPattern:e=>{let r=window.location.pathname,n=Ne(e,r),i=ke(window.location.search);s({params:n,query:i})},getParam:e=>t().params[e],getQuery:e=>t().query[e]}));function ht(s){let t=z.getState();t.setFromPattern(s);let e=t.params,r=t.query;return{...e,...r}}var ft=(s,t,e)=>{let r=document.querySelectorAll(s);return r.forEach(n=>{n.addEventListener(t,e)}),()=>{r.forEach(n=>{n.removeEventListener(t,e)})}};var mt=R(require("dompurify"),1),pt=(s,t,e={},r)=>{let n={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href","on*"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};mt.default.addHook("uponSanitizeAttribute",(o,c)=>{let l=(c.attrName||"").toLowerCase(),u=(c.attrValue??"").toString().trim();if(/^data-(click|change|submit|select|hover|classlist)$/.test(l)){c.keepAttr=!0;return}if(l.startsWith("on")){c.keepAttr=!1;return}if(o.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(u)||/^\/(?!\/)/.test(u)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(u)||(c.keepAttr=!1);return}if(l==="class"){let h=u.split(/\s+/).filter(Boolean).filter(f=>/^[a-zA-Z0-9\-\:\/_]+$/.test(f));c.attrValue=h.join(" ");return}});let i=mt.default.sanitize(t,{...n,RETURN_DOM_FRAGMENT:!0});s.innerHTML="",s.appendChild(i);let a=(o,c)=>{s.querySelectorAll(`[${o}]`).forEach(l=>{let u=l.getAttribute(o);u&&Object.prototype.hasOwnProperty.call(e,u)&&l.addEventListener(c,d=>{c==="submit"&&d.preventDefault(),e[u](d)})})};a("data-click","click"),a("data-change","change"),a("data-select","select"),a("data-submit","submit"),s.querySelectorAll("[data-hover]").forEach(o=>{let c=o.dataset.hover;c&&Object.prototype.hasOwnProperty.call(e,c)&&(o.addEventListener("mouseenter",e[c]),o.addEventListener("mouseleave",e[c]))}),s.querySelectorAll("[data-classlist]").forEach(o=>{let c=o.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(c)&&o.classList.add(...c.split(/\s+/))}),document.addEventListener("click",o=>o.preventDefault())};var Gt=R(require("dompurify"),1),V=null,gt=(s,t)=>{if(typeof document>"u")return;let e=document.getElementById(s);if(!e)return;let r=e.innerHTML,i=Gt.default.sanitize(r,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html"],FORBID_ATTR:["style","srcset","on*"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1}).replace(/\b(href|src)=["']?([^"'>\s]+)/gi,(a,o,c)=>/^https?:\/\//i.test(c)||/^mailto:/i.test(c)||/^tel:/i.test(c)||/^\/(?!\/)/.test(c)||/^#/.test(c)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(c)?`${o}="${c}"`:`${o}="#"`);if(V!==null&&i!==V){let a=document.createElement("div");t(a),e.innerHTML=V}else V=i,e.innerHTML=i,t(e);document.addEventListener("click",a=>a.preventDefault())};var wt=R(require("dompurify"),1);typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",s=>{let t=s.state;t?.scrollPosition!==void 0&&window.scrollTo(0,t.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var Et=(s,t,e,r="",n=null)=>{if(!s)return;let i=wt.default.sanitize(t,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),a=wt.default.sanitize(e,{USE_PROFILES:{html:!1}});s.setAttribute("href",i),s.setAttribute("aria-label",a),r&&(s.className=r.trim()),n&&s.replaceChildren(n),typeof window<"u"&&s.addEventListener("click",o=>{o.preventDefault();let l=o.currentTarget.getAttribute("href");if(l){let u=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:u},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};var I=R(require("dompurify"),1);var Vt=(s="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",t="'self' 'nonce-rAnd0m123'",e="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",n="'self' https://blogger.googleusercontent.com",i=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],a="'self' https://www.youtube.com",o="'self'",c="/csp-report",l=!1)=>{let u=()=>{try{let d=document.querySelector('meta[http-equiv="Content-Security-Policy"]');d||(d=document.createElement("meta"),d.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(d));let h=l?`report-uri ${c};`:"";d.setAttribute("content",`default-src 'self'; script-src ${s}; style-src ${t}; object-src ${e}; font-src ${r}; img-src ${n}; connect-src ${i.join(" ")}; frame-src ${a}; base-uri ${o}; ${h}`)}catch(d){console.error("Error adding CSP meta element:",d)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",u):u()};var yt=(s,t)=>{let e={name:I.default.sanitize(s.name||""),description:I.default.sanitize(s.description||"Default description"),author:I.default.sanitize(s.author||"")},r=f=>{e.name=I.default.sanitize(f),d("name",e.name)},n=f=>{e.description=I.default.sanitize(f),d("description",e.description)},i=f=>{e.author=I.default.sanitize(f),d("author",e.author)},a=()=>e.name,o=()=>e.description,c=()=>e.author,l=()=>e,u=(f,w)=>{let P=document.createElement("meta");P.setAttribute("name",f),P.setAttribute("content",w),document.head.appendChild(P)},d=(f,w)=>{let P=document.querySelector(`meta[name="${f}"]`);P?P.setAttribute("content",w):u(f,w)},h=()=>{d("name",e.name),d("description",e.description),d("author",e.author)};return t&&Vt(t.scriptSrc,t.styleSrc,t.objectSrc,Array.isArray(t.connectSrc)?t.connectSrc.join(" "):t.connectSrc,t.reportOnly!==void 0?String(t.reportOnly):void 0),h(),{setName:r,setDescription:n,setAuthor:i,getName:a,getDescription:o,getAuthor:c,getAllMetaData:l,appendMetaTagsToHead:h}};var Kt=R(require("dompurify"),1),W=(s,t,e,r,n)=>{let i=`#${s}`,a=t.querySelectorAll(i);if(a.length===0)throw new Error(`[useTSComponent] No element found with id '${s}' in the given parent.`);if(a.length>1)throw new Error(`[useTSComponent] Duplicate id '${s}' detected. Found ${a.length} elements.`);let o=a[0];o.innerHTML=Kt.default.sanitize(o.innerHTML,{USE_PROFILES:{html:!0}}),e(o,r,n)};var Tt=(s,t,e,r=[])=>{let n=new Set;s.forEach((i,a)=>{if(n.has(i)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${i}" \u2014 skipping.`);return}n.add(i);let o=t.querySelectorAll(`#${i}`);if(o.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${i}" (${o.length} elements found) \u2014 skipping component mount.`);return}let c=e[a],l=Array.isArray(r)?r[a]:void 0;typeof c=="function"?W(i,t,c,l):console.warn(`[useTSCollection] No valid component function found for ID: "${i}"`)})};var N=(s,t)=>{let r=(t??document).querySelectorAll(s);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${s}'`),null;if(s.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${s}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${s}'. Returning the first one.`),r[0]};var Qt=require("jwt-decode"),_t=(s,t)=>{let e=localStorage.getItem("token");if(!e)return window.location.href=t,null;try{let r=(0,Qt.jwtDecode)(e),n=Date.now()/1e3;return r.exp&&r.exp<n&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=t),null}catch(r){return console.error("Invalid token:",r),window.location.href=t,null}};var K=(s,t,e)=>{s.forEach(r=>{t.forEach(n=>{r.addEventListener(n,i=>{e(r,i)})})})};var St=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var Pt=(s,t)=>{let e=document.querySelector(`#${s}`)||document.querySelector(`.${s}`);if(!e)return;let r=window.location.pathname.replace(/\/$/,"");for(let n of t){let i=n.path.replace(/\/$/,"");if(r===i||r.startsWith(`${i}/`)){n.component(e);break}}};function vt(s,t){let e=window.location.pathname.replace(/\/$/,"");t.routes.forEach(r=>{r.children?.length&&r.children.forEach(n=>{let i=n.path.replace(/\/$/,"");if(e===i||e.startsWith(`${i}/`)){let a=s.querySelector(`#${n.outlet}`)||s.querySelector(`.${n.outlet}`);a instanceof HTMLElement&&n.element&&n.element(a)}})})}var Jt=require("zustand/vanilla");function Rt(s){let t=(0,Jt.createStore)(()=>({value:s})),e=new Set;return{get:()=>t.getState().value,set:r=>{t.setState({value:r}),e.forEach(n=>n(r))},subscribe:r=>(e.add(r),r(t.getState().value),()=>e.delete(r))}}function Lt(s){let t=s();typeof t=="function"&&t()}var bt=async()=>{let s="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",t="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",e=r=>new Promise((n,i)=>{let a=document.createElement("script");a.src=r,a.onload=()=>n(),a.onerror=()=>i(new Error(`Failed to load ${r}`)),document.head.appendChild(a)});await e(s),await e(t),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},Dt=s=>new Promise((t,e)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${s}`,r.onload=()=>t(),r.onerror=()=>e(new Error(`Failed to load ${s}`)),document.body.appendChild(r)});function xt(s){let t=null;return async(e,r)=>{try{if(!t){let n=await s();t=n.default||n}if(typeof t=="function")return t(e,r);if(t instanceof HTMLElement){let n=t.cloneNode(!0);return e?.appendChild(n),n}if(typeof t=="object"&&t!==null&&"render"in t&&typeof t.render=="function")return t.render(e,r);console.warn("useTSLazy: Unsupported module type",t)}catch(n){console.error("useTSLazy failed:",n)}}}var At=s=>typeof window>"u"?{isDOM:null}:{isDOM:s||document.body};var Xt=require("lodash-es"),Mt=s=>s;typeof window<"u"&&typeof document<"u"&&(Mt=s=>{let t=document.createElement("div");return t.innerText=s,t.innerHTML});var $e=s=>{(s?Array.isArray(s)?s:s instanceof HTMLAnchorElement?[s]:Array.from(s):Array.from(document.querySelectorAll("a"))).forEach(e=>{if(!e||e.dataset.anchorEnhanced==="true")return;e.dataset.anchorEnhanced="true";let r=e.getAttribute("class")||"";e.setAttribute("class",Mt(r));let n=e.getAttribute("aria-label");n&&e.setAttribute("aria-label",Mt(n));let i=e.querySelector(":scope > *");i&&(e.innerHTML="",e.appendChild(i));let a=e.getAttribute("href")||"";if(!a.startsWith("#")){try{if(new URL(a,window.location.href).origin!==window.location.origin)return}catch{return}e.addEventListener("click",o=>{o.preventDefault();let c=e.getAttribute("href")||"";try{let l=new URL(c,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",c,l)}})}})},ze=(0,Xt.debounce)($e,50),Zt=s=>{ze(s)};var Ot=s=>{if(!s)return;let t=N("a",s);Zt(t)};var Ct=R(require("dompurify"),1);var ee=require("zustand/vanilla"),se=R(require("dompurify"),1),C=(0,ee.createStore)(s=>({params:{},query:{},setParams:t=>s(()=>({params:te(t)})),setQuery:t=>s(()=>({query:te(t)}))}));function te(s){let t={};for(let e in s)t[e]=se.default.sanitize(s[e]);return t}var Q=class{constructor(t,e){this.routes=[];this.routes=t,this.expectedParams=new Set(e),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let t=window.location.pathname,e=window.location.search,r=this.parseQueryParams(e),n=this.findMatchingRoute(t,this.routes);if(n){if(n.routeto){this.navigate(n.routeto);return}let i=this.filterAndSanitizeParams(n.params);C.getState().setParams(i),C.getState().setQuery(r);let a=document.createElement("div");if(n.element?.(a,i,r),n.children){let o=t.slice(n.path.length),c=a.querySelector("#child");c&&this.renderChildren(n.children,o,c,i,r)}}else{let i=this.findMatchingRoute("*",this.routes);if(i){let a=this.filterAndSanitizeParams(i.params);C.getState().setParams(a),C.getState().setQuery(r);let o=document.createElement("div");i.element?.(o,a,r)}}}renderChildren(t,e,r,n,i){if(!t||t.length===0){let o=r.querySelector("#child");o&&o.remove();return}let a=this.findMatchingRoute(e,t);if(a){let o=document.createElement("div");o.id="child";let c={...n,...a.params},l=this.filterAndSanitizeParams(c);if(C.getState().setParams(l),C.getState().setQuery(i),a.element?.(o,l,i),r.appendChild(o),a.children){let u=e.slice(a.path.length);this.renderChildren(a.children,u,o,l,i)}}}parseQueryParams(t){let e={},r=new URLSearchParams(t);for(let[n,i]of r.entries())this.expectedParams.has(n)&&(e[n]=Ct.default.sanitize(i));return e}findMatchingRoute(t,e,r={}){for(let n of e){let i=n.path;if(i==="*")return n;{let o=[],c=i.replace(/:[^\s/]+/g,d=>(o.push(d.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${c}(?:/|$)`),u=t.match(l);if(u){let d={...r};if(o.forEach((h,f)=>{d[h]=u[f+1]??""}),n.children){let h=t.slice(u[0].length),f=this.findMatchingRoute(h,n.children,d);if(f)return f}return{...n,params:d}}}}}filterAndSanitizeParams(t){if(!t)return{};let e={};for(let r in t)this.expectedParams.has(r)&&(e[r]=Ct.default.sanitize(t[r]??""));return e}navigate(t){history.pushState(null,"",t),this.handlePopState()}addRoute(t){this.routes.push(t)}};var De=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let s=await import("fs/promises"),t=await import("path"),e=await Promise.resolve().then(()=>(be(),Le)),r=t.resolve("src/pages"),n=t.resolve("src/gen"),i=t.resolve("src/routes"),a=t.join(n,"tsrouter.gen.ts"),o=t.join(i,"__root.ts"),c=process.env.NODE_ENV!=="production";async function l(y){try{await s.mkdir(y,{recursive:!0})}catch{}}function u(y,_){let T="/"+t.relative(_,y).replace(/\\/g,"/");return T=T.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",T.replace(/\[(.+?)\]/g,":$1")}function d(y){return y.replace(/^\//,"").split("/").map(_=>_.startsWith(":")?_.slice(1):_).filter(Boolean).join("-")||"index"}function h(y,_){let E=t.relative(_,y).replace(/\\/g,"/").split("/").filter(Boolean),v=E[E.length-1].replace(".ts",""),b=E.length>1?E[E.length-2]:"";if(v==="index")return b?b.charAt(0).toUpperCase()+b.slice(1):"Index";if(v.startsWith("[")&&v.endsWith("]")){let O=v.slice(1,-1);return b.charAt(0).toUpperCase()+O.charAt(0).toUpperCase()+O.slice(1)}return v.charAt(0).toUpperCase()+v.slice(1)}async function f(y){let _=await s.readdir(y,{withFileTypes:!0}),T=[];for(let E of _){let v=t.join(y,E.name);if(E.isDirectory())T=T.concat(await f(v));else if(E.isFile()&&E.name.endsWith(".ts")){let b=u(v,r),O=d(b),S=h(v,r);T.push({file:v,route:b,routeName:O,importName:S})}}return T}function w(){return`import { html, useTSComponent, useTSElements, useTSNoReload, useTSSSRHydration } from '@devwareng/vanilla-ts'
2
+ import { Router } from './routes/__root';
3
+ import "tailwindcss/index.css"
4
+ import "animate.css"
5
+
6
+ export default function App(DOM?: HTMLElement) {
7
+ const { isDOM } = useTSSSRHydration(DOM!)
8
+ if (!isDOM) return
9
+
10
+ const ui = useTSElements(
11
+ isDOM,
12
+ html\`
13
+ <div class="min-h-screen text-white bg-black">
14
+ <div id="routes"></div>
15
+ </div>
16
+ \`
17
+ )
18
+
19
+ useTSNoReload(isDOM)
20
+ useTSComponent("routes", isDOM, Router)
21
+
22
+ return ui
23
+ }`}function P(y,_){let T=_.includes(":"),E=T?_.match(/:([^/]+)/)?.[1]:null;return`import { html, useTSElements, useTSMetaData${T?", useTSExtractParams":""} } from '@devwareng/vanilla-ts';
2
24
 
3
25
  export default function ${y}(DOM: HTMLElement) {
4
26
  useTSMetaData({
@@ -7,20 +29,20 @@ export default function ${y}(DOM: HTMLElement) {
7
29
  author: ''
8
30
  });
9
31
 
10
- ${g?`const params = useTSExtractParams("${_}");
11
- if (!params.${P}) return;`:""}
32
+ ${T?`const params = useTSExtractParams("${_}");
33
+ if (!params.${E}) return;`:""}
12
34
  const ui = useTSElements(
13
35
  DOM,
14
36
  html\`
15
37
  <div class="p-4 animate__animated animate__fadeIn duration-300">
16
38
  <h1>${y}</h1>
17
- ${g?"<pre>${JSON.stringify(params, null, 2)}</pre>":""}
39
+ ${T?"<pre>${JSON.stringify(params, null, 2)}</pre>":""}
18
40
  </div>
19
41
  \`
20
42
  );
21
43
 
22
44
  return ui
23
- }`}function S(){return`import { createRouter } from "@/gen/tsrouter.gen";
45
+ }`}function Y(){return`import { createRouter } from "@/gen/tsrouter.gen";
24
46
  import { useTSParams } from "@devwareng/vanilla-ts";
25
47
 
26
48
  export const Router = (DOM: HTMLElement) => {
@@ -31,12 +53,12 @@ export const Router = (DOM: HTMLElement) => {
31
53
  window.addEventListener("popstate", () => {
32
54
  router.navigate(window.location.pathname);
33
55
  });
34
- };`}async function N(){let y=await f(r),_=y.find(T=>T.route==="/notfound"),g=y.filter(T=>T.route!=="/notfound");for(let T of y)(await s.readFile(T.file,"utf-8")).trim()||await s.writeFile(T.file,E(T.importName,T.route),"utf-8");let P=y.map(T=>{let Wt="../pages/"+t.relative(r,T.file).replace(/\\/g,"/").replace(/\.ts$/,"");return`import ${T.importName} from "${Wt}";`}).join(`
35
- `),v=g.map(T=>`{ path: "${T.route}", name: "${T.routeName}", component: (DOM: HTMLElement) => ${T.importName}(DOM) }`).join(`,
36
- `),b=_?`export const NotFound = ${_.importName}`:'export function NotFound(DOM: HTMLElement) {\n return useTSElements(DOM, html`<div class="animate__animated animate__fadeIn duration-300 p-4"><h1>404 - Page Not Found</h1></div>`)\n}',I=`// AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.
56
+ };`}async function $(){let y=await f(r),_=y.find(S=>S.route==="/notfound"),T=y.filter(S=>S.route!=="/notfound");for(let S of y)(await s.readFile(S.file,"utf-8")).trim()||await s.writeFile(S.file,P(S.importName,S.route),"utf-8");let E=y.map(S=>{let B="../pages/"+t.relative(r,S.file).replace(/\\/g,"/").replace(/\.ts$/,"");return`import ${S.importName} from "${B}";`}).join(`
57
+ `),v=T.map(S=>`{ path: "${S.route}", name: "${S.routeName}", component: (DOM: HTMLElement) => ${S.importName}(DOM) }`).join(`,
58
+ `),b=_?`export const NotFound = ${_.importName}`:'export function NotFound(DOM: HTMLElement) {\n return useTSElements(DOM, html`<div class="animate__animated animate__fadeIn duration-300 p-4"><h1>404 - Page Not Found</h1></div>`)\n}',O=`// AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.
37
59
  import { html, useTSElements } from "@devwareng/vanilla-ts"
38
60
 
39
- ${P}
61
+ ${E}
40
62
 
41
63
  ${b}
42
64
 
@@ -83,7 +105,7 @@ export function createRouter(DOM: HTMLElement) {
83
105
  navigate(window.location.pathname + window.location.search)
84
106
  return { navigate, routes: routeTree }
85
107
  }
86
- `;await l(n),await s.writeFile(a,I,"utf-8"),await s.writeFile(o,S(),"utf-8")}await l(n),await l(i),await l(r),await N(),c&&(e.watch(r).on("all",async(_,g)=>{if(g.endsWith(".ts"))if(_==="add"){let v=t.basename(g,".ts").replace(/\[|\]/g,"Param").replace(/(^\w|-\w)/g,T=>T.replace("-","").toUpperCase()),b=u(g,r);(await s.readFile(g,"utf-8")).trim()||await s.writeFile(g,E(v,b),"utf-8"),await N()}else _==="unlink"?(console.log(`\u26A0\uFE0F File removed: ${g}`),await N()):_==="change"&&await N()}),e.watch(o).on("unlink",async()=>{console.log("\u26A0\uFE0F Root file removed: regenerating..."),await s.writeFile(o,S(),"utf-8")})),console.log("\u{1F7E2} TS Filebased Router Generated Successfully...")}});0&&(module.exports={TSFilebasedRouter,TSRouter,createEffect,createSignal,html,loadPyFiles,mapper,renderChildRoutes,useAnchorSingle,useInitialDOM,useTSAuth,useTSCollection,useTSComponent,useTSElementEach,useTSElements,useTSEvent,useTSEventAll,useTSExtractParams,useTSLazy,useTSMetaData,useTSNavigate,useTSNoReload,useTSOutlet,useTSParams,useTSPurifier,useTSSSRHydration,useTSSelect,useTSloadBrython});
108
+ `;await l(n),await s.writeFile(a,O,"utf-8"),await s.writeFile(o,Y(),"utf-8")}if(await l(n),await l(i),await l(r),await $(),c){e.watch(r).on("all",async(T,E)=>{if(E.endsWith(".ts"))if(T==="add"){let b=t.basename(E,".ts").replace(/\[|\]/g,"Param").replace(/(^\w|-\w)/g,B=>B.replace("-","").toUpperCase()),O=u(E,r);(await s.readFile(E,"utf-8")).trim()||await s.writeFile(E,P(b,O),"utf-8"),await $()}else T==="unlink"?(console.log(`\u26A0\uFE0F File removed: ${E}`),await $()):T==="change"&&await $()});let _=t.resolve("src/App.ts");try{await s.access(_)}catch{await s.writeFile(_,w(),"utf-8"),console.log("\u{1F7E2} Created default src/App.ts")}e.watch(o).on("unlink",async()=>{console.log("\u26A0\uFE0F Root file removed: regenerating..."),await s.writeFile(o,Y(),"utf-8")})}console.log("\u{1F7E2} TS Filebased Router Generated Successfully...")}});0&&(module.exports={TSFilebasedRouter,TSRouter,createEffect,createSignal,html,loadPyFiles,mapper,renderChildRoutes,useAnchorSingle,useInitialDOM,useTSAuth,useTSCollection,useTSComponent,useTSElementEach,useTSElements,useTSEvent,useTSEventAll,useTSExtractParams,useTSLazy,useTSMetaData,useTSNavigate,useTSNoReload,useTSOutlet,useTSParams,useTSPurifier,useTSSSRHydration,useTSSelect,useTSloadBrython});
87
109
  /*! Bundled license information:
88
110
 
89
111
  chokidar/esm/index.js:
package/dist/index.js CHANGED
@@ -1,4 +1,26 @@
1
- function ue(t){let e=t==null?"":String(t),n=e.toLowerCase();return(n.includes("<script")||n.includes("javascript:"))&&(e=""),e.replace(/<\s*(script|iframe|object|embed|link|style|meta|body)[^>]*>.*?<\s*\/\s*\1\s*>/gi,"").replace(/<\s*(script|iframe|object|embed|link|style|meta)[^>]*>/gi,"").replace(/\s+on\w+\s*=\s*(['"]).*?\1/gi,"").replace(/\s+on\w+\s*=\s*[^\s>]+/gi,"").replace(/\s(href|src)\s*=\s*(['"]?)\s*(javascript:|vbscript:|data:|file:)[^'">\s]*\2/gi,'$1="#"')}function k(t,...e){return t.reduce((n,r,o)=>{let s=o<e.length?ue(e[o]):"";return n+r+s},"")}var me=t=>t.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),de=t=>t?.map(e=>me(e)).join("")??"";import N from"dompurify";var F=(t,e)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...e};return typeof t=="string"?N.sanitize(t,r):N.sanitize(t.innerHTML,r)};var _=(t,e,n)=>{if(typeof t=="string"){let r=document.getElementById(t);r?r.addEventListener(e,n):console.warn(`Element with id '${t}' not found.`)}else t===document?document.addEventListener(e,n):console.warn("Invalid id parameter provided.")};import{createStore as pe}from"zustand/vanilla";import I from"dompurify";function fe(t,e){let n=[],r=t.replace(/:[^/]+/g,i=>(n.push(i.slice(1)),"([^/]+)")),o=new RegExp(`^${r}$`),s=e.match(o),a={};return s&&n.forEach((i,c)=>{a[i]=I.sanitize(s[c+1]??"")}),a}function he(t){let e={},n=new URLSearchParams(t);for(let[r,o]of n.entries())e[r]=I.sanitize(o);return e}var P=pe((t,e)=>({params:{},query:{},setFromPattern:n=>{let r=window.location.pathname,o=fe(n,r),s=he(window.location.search);t({params:o,query:s})},getParam:n=>e().params[n],getQuery:n=>e().query[n]}));function z(t){let e=P.getState();e.setFromPattern(t);let n=e.params,r=e.query;return{...n,...r}}var q=(t,e,n)=>{let r=document.querySelectorAll(t);return r.forEach(o=>{o.addEventListener(e,n)}),()=>{r.forEach(o=>{o.removeEventListener(e,n)})}};import j from"dompurify";var U=(t,e,n={},r)=>{let o={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href","on*"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};j.addHook("uponSanitizeAttribute",(i,c)=>{let l=(c.attrName||"").toLowerCase(),u=(c.attrValue??"").toString().trim();if(/^data-(click|change|submit|select|hover|classlist)$/.test(l)){c.keepAttr=!0;return}if(l.startsWith("on")){c.keepAttr=!1;return}if(i.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(u)||/^\/(?!\/)/.test(u)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(u)||(c.keepAttr=!1);return}if(l==="class"){let E=u.split(/\s+/).filter(Boolean).filter(p=>/^[a-zA-Z0-9\-\:\/_]+$/.test(p));c.attrValue=E.join(" ");return}});let s=j.sanitize(e,{...o,RETURN_DOM_FRAGMENT:!0});t.innerHTML="",t.appendChild(s);let a=(i,c)=>{t.querySelectorAll(`[${i}]`).forEach(l=>{let u=l.getAttribute(i);u&&Object.prototype.hasOwnProperty.call(n,u)&&l.addEventListener(c,n[u])})};a("data-click","click"),a("data-change","change"),a("data-select","select"),a("data-submit","submit"),t.querySelectorAll("[data-hover]").forEach(i=>{let c=i.dataset.hover;c&&Object.prototype.hasOwnProperty.call(n,c)&&(i.addEventListener("mouseenter",n[c]),i.addEventListener("mouseleave",n[c]))}),t.querySelectorAll("[data-classlist]").forEach(i=>{let c=i.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(c)&&i.classList.add(...c.split(/\s+/))}),document.addEventListener("click",i=>i.preventDefault())};import ge from"dompurify";var x=null,B=(t,e)=>{if(typeof document>"u")return;let n=document.getElementById(t);if(!n)return;let r=n.innerHTML,s=ge.sanitize(r,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html"],FORBID_ATTR:["style","srcset","on*"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1}).replace(/\b(href|src)=["']?([^"'>\s]+)/gi,(a,i,c)=>/^https?:\/\//i.test(c)||/^mailto:/i.test(c)||/^tel:/i.test(c)||/^\/(?!\/)/.test(c)||/^#/.test(c)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(c)?`${i}="${c}"`:`${i}="#"`);if(x!==null&&s!==x){let a=document.createElement("div");e(a),n.innerHTML=x}else x=s,n.innerHTML=s,e(n);document.addEventListener("click",a=>a.preventDefault())};import W from"dompurify";typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",t=>{let e=t.state;e?.scrollPosition!==void 0&&window.scrollTo(0,e.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var G=(t,e,n,r="",o=null)=>{if(!t)return;let s=W.sanitize(e,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),a=W.sanitize(n,{USE_PROFILES:{html:!1}});t.setAttribute("href",s),t.setAttribute("aria-label",a),r&&(t.className=r.trim()),o&&t.replaceChildren(o),typeof window<"u"&&t.addEventListener("click",i=>{i.preventDefault();let l=i.currentTarget.getAttribute("href");if(l){let u=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:u},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};import R from"dompurify";var Q=(t="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",e="'self' 'nonce-rAnd0m123'",n="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",o="'self' https://blogger.googleusercontent.com",s=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],a="'self' https://www.youtube.com",i="'self'",c="/csp-report",l=!1)=>{let u=()=>{try{let m=document.querySelector('meta[http-equiv="Content-Security-Policy"]');m||(m=document.createElement("meta"),m.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(m));let E=l?`report-uri ${c};`:"";m.setAttribute("content",`default-src 'self'; script-src ${t}; style-src ${e}; object-src ${n}; font-src ${r}; img-src ${o}; connect-src ${s.join(" ")}; frame-src ${a}; base-uri ${i}; ${E}`)}catch(m){console.error("Error adding CSP meta element:",m)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",u):u()};var V=(t,e)=>{let n={name:R.sanitize(t.name||""),description:R.sanitize(t.description||"Default description"),author:R.sanitize(t.author||"")},r=p=>{n.name=R.sanitize(p),m("name",n.name)},o=p=>{n.description=R.sanitize(p),m("description",n.description)},s=p=>{n.author=R.sanitize(p),m("author",n.author)},a=()=>n.name,i=()=>n.description,c=()=>n.author,l=()=>n,u=(p,L)=>{let v=document.createElement("meta");v.setAttribute("name",p),v.setAttribute("content",L),document.head.appendChild(v)},m=(p,L)=>{let v=document.querySelector(`meta[name="${p}"]`);v?v.setAttribute("content",L):u(p,L)},E=()=>{m("name",n.name),m("description",n.description),m("author",n.author)};return e&&Q(e.scriptSrc,e.styleSrc,e.objectSrc,Array.isArray(e.connectSrc)?e.connectSrc.join(" "):e.connectSrc,e.reportOnly!==void 0?String(e.reportOnly):void 0),E(),{setName:r,setDescription:o,setAuthor:s,getName:a,getDescription:i,getAuthor:c,getAllMetaData:l,appendMetaTagsToHead:E}};import Te from"dompurify";var D=(t,e,n,r,o)=>{let s=`#${t}`,a=e.querySelectorAll(s);if(a.length===0)throw new Error(`[useTSComponent] No element found with id '${t}' in the given parent.`);if(a.length>1)throw new Error(`[useTSComponent] Duplicate id '${t}' detected. Found ${a.length} elements.`);let i=a[0];i.innerHTML=Te.sanitize(i.innerHTML,{USE_PROFILES:{html:!0}}),n(i,r,o)};var J=(t,e,n,r=[])=>{let o=new Set;t.forEach((s,a)=>{if(o.has(s)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${s}" \u2014 skipping.`);return}o.add(s);let i=e.querySelectorAll(`#${s}`);if(i.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${s}" (${i.length} elements found) \u2014 skipping component mount.`);return}let c=n[a],l=Array.isArray(r)?r[a]:void 0;typeof c=="function"?D(s,e,c,l):console.warn(`[useTSCollection] No valid component function found for ID: "${s}"`)})};var b=(t,e)=>{let r=(e??document).querySelectorAll(t);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${t}'`),null;if(t.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${t}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${t}'. Returning the first one.`),r[0]};import{jwtDecode as Se}from"jwt-decode";var K=(t,e)=>{let n=localStorage.getItem("token");if(!n)return window.location.href=e,null;try{let r=Se(n),o=Date.now()/1e3;return r.exp&&r.exp<o&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=e),null}catch(r){return console.error("Invalid token:",r),window.location.href=e,null}};var O=(t,e,n)=>{t.forEach(r=>{e.forEach(o=>{r.addEventListener(o,s=>{n(r,s)})})})};var X=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var Y=(t,e)=>{let n=document.querySelector(`#${t}`)||document.querySelector(`.${t}`);if(!n)return;let r=window.location.pathname.replace(/\/$/,"");for(let o of e){let s=o.path.replace(/\/$/,"");if(r===s||r.startsWith(`${s}/`)){o.component(n);break}}};function Z(t,e){let n=window.location.pathname.replace(/\/$/,"");e.routes.forEach(r=>{r.children?.length&&r.children.forEach(o=>{let s=o.path.replace(/\/$/,"");if(n===s||n.startsWith(`${s}/`)){let a=t.querySelector(`#${o.outlet}`)||t.querySelector(`.${o.outlet}`);a instanceof HTMLElement&&o.element&&o.element(a)}})})}import{createStore as Ee}from"zustand/vanilla";function ee(t){let e=Ee(()=>({value:t})),n=new Set;return{get:()=>e.getState().value,set:r=>{e.setState({value:r}),n.forEach(o=>o(r))},subscribe:r=>(n.add(r),r(e.getState().value),()=>n.delete(r))}}function te(t){let e=t();typeof e=="function"&&e()}var ne=async()=>{let t="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",e="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",n=r=>new Promise((o,s)=>{let a=document.createElement("script");a.src=r,a.onload=()=>o(),a.onerror=()=>s(new Error(`Failed to load ${r}`)),document.head.appendChild(a)});await n(t),await n(e),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},re=t=>new Promise((e,n)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${t}`,r.onload=()=>e(),r.onerror=()=>n(new Error(`Failed to load ${t}`)),document.body.appendChild(r)});function oe(t){let e=null;return async(n,r)=>{try{if(!e){let o=await t();e=o.default||o}if(typeof e=="function")return e(n,r);if(e instanceof HTMLElement){let o=e.cloneNode(!0);return n?.appendChild(o),o}if(typeof e=="object"&&e!==null&&"render"in e&&typeof e.render=="function")return e.render(n,r);console.warn("useTSLazy: Unsupported module type",e)}catch(o){console.error("useTSLazy failed:",o)}}}var se=t=>typeof window>"u"?{isDOM:null}:{isDOM:t||document.body};import{debounce as ye}from"lodash-es";var H=t=>t;typeof window<"u"&&typeof document<"u"&&(H=t=>{let e=document.createElement("div");return e.innerText=t,e.innerHTML});var ve=t=>{(t?Array.isArray(t)?t:t instanceof HTMLAnchorElement?[t]:Array.from(t):Array.from(document.querySelectorAll("a"))).forEach(n=>{if(!n||n.dataset.anchorEnhanced==="true")return;n.dataset.anchorEnhanced="true";let r=n.getAttribute("class")||"";n.setAttribute("class",H(r));let o=n.getAttribute("aria-label");o&&n.setAttribute("aria-label",H(o));let s=n.querySelector(":scope > *");s&&(n.innerHTML="",n.appendChild(s));let a=n.getAttribute("href")||"";if(!a.startsWith("#")){try{if(new URL(a,window.location.href).origin!==window.location.origin)return}catch{return}n.addEventListener("click",i=>{i.preventDefault();let c=n.getAttribute("href")||"";try{let l=new URL(c,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",c,l)}})}})},we=ye(ve,50),ie=t=>{we(t)};var ae=t=>{if(!t)return;let e=b("a",t);ie(e)};import le from"dompurify";import{createStore as Le}from"zustand/vanilla";import Me from"dompurify";var w=Le(t=>({params:{},query:{},setParams:e=>t(()=>({params:ce(e)})),setQuery:e=>t(()=>({query:ce(e)}))}));function ce(t){let e={};for(let n in t)e[n]=Me.sanitize(t[n]);return e}var C=class{constructor(e,n){this.routes=[];this.routes=e,this.expectedParams=new Set(n),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let e=window.location.pathname,n=window.location.search,r=this.parseQueryParams(n),o=this.findMatchingRoute(e,this.routes);if(o){if(o.routeto){this.navigate(o.routeto);return}let s=this.filterAndSanitizeParams(o.params);w.getState().setParams(s),w.getState().setQuery(r);let a=document.createElement("div");if(o.element?.(a,s,r),o.children){let i=e.slice(o.path.length),c=a.querySelector("#child");c&&this.renderChildren(o.children,i,c,s,r)}}else{let s=this.findMatchingRoute("*",this.routes);if(s){let a=this.filterAndSanitizeParams(s.params);w.getState().setParams(a),w.getState().setQuery(r);let i=document.createElement("div");s.element?.(i,a,r)}}}renderChildren(e,n,r,o,s){if(!e||e.length===0){let i=r.querySelector("#child");i&&i.remove();return}let a=this.findMatchingRoute(n,e);if(a){let i=document.createElement("div");i.id="child";let c={...o,...a.params},l=this.filterAndSanitizeParams(c);if(w.getState().setParams(l),w.getState().setQuery(s),a.element?.(i,l,s),r.appendChild(i),a.children){let u=n.slice(a.path.length);this.renderChildren(a.children,u,i,l,s)}}}parseQueryParams(e){let n={},r=new URLSearchParams(e);for(let[o,s]of r.entries())this.expectedParams.has(o)&&(n[o]=le.sanitize(s));return n}findMatchingRoute(e,n,r={}){for(let o of n){let s=o.path;if(s==="*")return o;{let i=[],c=s.replace(/:[^\s/]+/g,m=>(i.push(m.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${c}(?:/|$)`),u=e.match(l);if(u){let m={...r};if(i.forEach((E,p)=>{m[E]=u[p+1]??""}),o.children){let E=e.slice(u[0].length),p=this.findMatchingRoute(E,o.children,m);if(p)return p}return{...o,params:m}}}}}filterAndSanitizeParams(e){if(!e)return{};let n={};for(let r in e)this.expectedParams.has(r)&&(n[r]=le.sanitize(e[r]??""));return n}navigate(e){history.pushState(null,"",e),this.handlePopState()}addRoute(e){this.routes.push(e)}};var Re=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let t=await import("fs/promises"),e=await import("path"),n=await import("./esm-KRNKVVL7.js"),r=e.resolve("src/pages"),o=e.resolve("src/gen"),s=e.resolve("src/routes"),a=e.join(o,"tsrouter.gen.ts"),i=e.join(s,"__root.ts"),c=process.env.NODE_ENV!=="production";async function l(f){try{await t.mkdir(f,{recursive:!0})}catch{}}function u(f,h){let d="/"+e.relative(h,f).replace(/\\/g,"/");return d=d.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",d.replace(/\[(.+?)\]/g,":$1")}function m(f){return f.replace(/^\//,"").split("/").map(h=>h.startsWith(":")?h.slice(1):h).filter(Boolean).join("-")||"index"}function E(f,h){let T=e.relative(h,f).replace(/\\/g,"/").split("/").filter(Boolean),S=T[T.length-1].replace(".ts",""),y=T.length>1?T[T.length-2]:"";if(S==="index")return y?y.charAt(0).toUpperCase()+y.slice(1):"Index";if(S.startsWith("[")&&S.endsWith("]")){let M=S.slice(1,-1);return y.charAt(0).toUpperCase()+y.slice(1)+M.charAt(0).toUpperCase()+M.slice(1)+"Param"}return S.charAt(0).toUpperCase()+S.slice(1)}async function p(f){let h=await t.readdir(f,{withFileTypes:!0}),d=[];for(let T of h){let S=e.join(f,T.name);if(T.isDirectory())d=d.concat(await p(S));else if(T.isFile()&&T.name.endsWith(".ts")){let y=u(S,r),M=m(y),g=E(S,r);d.push({file:S,route:y,routeName:M,importName:g})}}return d}function L(f,h){let d=h.includes(":"),T=d?h.match(/:([^/]+)/)?.[1]:null;return`import { html, useTSElements, useTSMetaData${d?", useTSExtractParams":""} } from '@devwareng/vanilla-ts';
1
+ function me(t){let e=t==null?"":String(t),n=e.toLowerCase();return(n.includes("<script")||n.includes("javascript:"))&&(e=""),e.replace(/<\s*(script|iframe|object|embed|link|style|meta|body)[^>]*>.*?<\s*\/\s*\1\s*>/gi,"").replace(/<\s*(script|iframe|object|embed|link|style|meta)[^>]*>/gi,"").replace(/\s+on\w+\s*=\s*(['"]).*?\1/gi,"").replace(/\s+on\w+\s*=\s*[^\s>]+/gi,"").replace(/\s(href|src)\s*=\s*(['"]?)\s*(javascript:|vbscript:|data:|file:)[^'">\s]*\2/gi,'$1="#"')}function N(t,...e){return t.reduce((n,r,o)=>{let s=o<e.length?me(e[o]):"";return n+r+s},"")}var de=t=>t.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),pe=t=>t?.map(e=>de(e)).join("")??"";import F from"dompurify";var _=(t,e)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...e};return typeof t=="string"?F.sanitize(t,r):F.sanitize(t.innerHTML,r)};var I=(t,e,n)=>{if(typeof t=="string"){let r=document.getElementById(t);r?r.addEventListener(e,n):console.warn(`Element with id '${t}' not found.`)}else t===document?document.addEventListener(e,n):console.warn("Invalid id parameter provided.")};import{createStore as fe}from"zustand/vanilla";import z from"dompurify";function he(t,e){let n=[],r=t.replace(/:[^/]+/g,i=>(n.push(i.slice(1)),"([^/]+)")),o=new RegExp(`^${r}$`),s=e.match(o),a={};return s&&n.forEach((i,c)=>{a[i]=z.sanitize(s[c+1]??"")}),a}function ge(t){let e={},n=new URLSearchParams(t);for(let[r,o]of n.entries())e[r]=z.sanitize(o);return e}var x=fe((t,e)=>({params:{},query:{},setFromPattern:n=>{let r=window.location.pathname,o=he(n,r),s=ge(window.location.search);t({params:o,query:s})},getParam:n=>e().params[n],getQuery:n=>e().query[n]}));function q(t){let e=x.getState();e.setFromPattern(t);let n=e.params,r=e.query;return{...n,...r}}var j=(t,e,n)=>{let r=document.querySelectorAll(t);return r.forEach(o=>{o.addEventListener(e,n)}),()=>{r.forEach(o=>{o.removeEventListener(e,n)})}};import U from"dompurify";var B=(t,e,n={},r)=>{let o={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href","on*"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};U.addHook("uponSanitizeAttribute",(i,c)=>{let l=(c.attrName||"").toLowerCase(),m=(c.attrValue??"").toString().trim();if(/^data-(click|change|submit|select|hover|classlist)$/.test(l)){c.keepAttr=!0;return}if(l.startsWith("on")){c.keepAttr=!1;return}if(i.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(m)||/^\/(?!\/)/.test(m)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(m)||(c.keepAttr=!1);return}if(l==="class"){let E=m.split(/\s+/).filter(Boolean).filter(p=>/^[a-zA-Z0-9\-\:\/_]+$/.test(p));c.attrValue=E.join(" ");return}});let s=U.sanitize(e,{...o,RETURN_DOM_FRAGMENT:!0});t.innerHTML="",t.appendChild(s);let a=(i,c)=>{t.querySelectorAll(`[${i}]`).forEach(l=>{let m=l.getAttribute(i);m&&Object.prototype.hasOwnProperty.call(n,m)&&l.addEventListener(c,u=>{c==="submit"&&u.preventDefault(),n[m](u)})})};a("data-click","click"),a("data-change","change"),a("data-select","select"),a("data-submit","submit"),t.querySelectorAll("[data-hover]").forEach(i=>{let c=i.dataset.hover;c&&Object.prototype.hasOwnProperty.call(n,c)&&(i.addEventListener("mouseenter",n[c]),i.addEventListener("mouseleave",n[c]))}),t.querySelectorAll("[data-classlist]").forEach(i=>{let c=i.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(c)&&i.classList.add(...c.split(/\s+/))}),document.addEventListener("click",i=>i.preventDefault())};import Te from"dompurify";var D=null,W=(t,e)=>{if(typeof document>"u")return;let n=document.getElementById(t);if(!n)return;let r=n.innerHTML,s=Te.sanitize(r,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html"],FORBID_ATTR:["style","srcset","on*"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1}).replace(/\b(href|src)=["']?([^"'>\s]+)/gi,(a,i,c)=>/^https?:\/\//i.test(c)||/^mailto:/i.test(c)||/^tel:/i.test(c)||/^\/(?!\/)/.test(c)||/^#/.test(c)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(c)?`${i}="${c}"`:`${i}="#"`);if(D!==null&&s!==D){let a=document.createElement("div");e(a),n.innerHTML=D}else D=s,n.innerHTML=s,e(n);document.addEventListener("click",a=>a.preventDefault())};import G from"dompurify";typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",t=>{let e=t.state;e?.scrollPosition!==void 0&&window.scrollTo(0,e.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var Q=(t,e,n,r="",o=null)=>{if(!t)return;let s=G.sanitize(e,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),a=G.sanitize(n,{USE_PROFILES:{html:!1}});t.setAttribute("href",s),t.setAttribute("aria-label",a),r&&(t.className=r.trim()),o&&t.replaceChildren(o),typeof window<"u"&&t.addEventListener("click",i=>{i.preventDefault();let l=i.currentTarget.getAttribute("href");if(l){let m=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:m},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};import R from"dompurify";var V=(t="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",e="'self' 'nonce-rAnd0m123'",n="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",o="'self' https://blogger.googleusercontent.com",s=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],a="'self' https://www.youtube.com",i="'self'",c="/csp-report",l=!1)=>{let m=()=>{try{let u=document.querySelector('meta[http-equiv="Content-Security-Policy"]');u||(u=document.createElement("meta"),u.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(u));let E=l?`report-uri ${c};`:"";u.setAttribute("content",`default-src 'self'; script-src ${t}; style-src ${e}; object-src ${n}; font-src ${r}; img-src ${o}; connect-src ${s.join(" ")}; frame-src ${a}; base-uri ${i}; ${E}`)}catch(u){console.error("Error adding CSP meta element:",u)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",m):m()};var J=(t,e)=>{let n={name:R.sanitize(t.name||""),description:R.sanitize(t.description||"Default description"),author:R.sanitize(t.author||"")},r=p=>{n.name=R.sanitize(p),u("name",n.name)},o=p=>{n.description=R.sanitize(p),u("description",n.description)},s=p=>{n.author=R.sanitize(p),u("author",n.author)},a=()=>n.name,i=()=>n.description,c=()=>n.author,l=()=>n,m=(p,M)=>{let v=document.createElement("meta");v.setAttribute("name",p),v.setAttribute("content",M),document.head.appendChild(v)},u=(p,M)=>{let v=document.querySelector(`meta[name="${p}"]`);v?v.setAttribute("content",M):m(p,M)},E=()=>{u("name",n.name),u("description",n.description),u("author",n.author)};return e&&V(e.scriptSrc,e.styleSrc,e.objectSrc,Array.isArray(e.connectSrc)?e.connectSrc.join(" "):e.connectSrc,e.reportOnly!==void 0?String(e.reportOnly):void 0),E(),{setName:r,setDescription:o,setAuthor:s,getName:a,getDescription:i,getAuthor:c,getAllMetaData:l,appendMetaTagsToHead:E}};import Se from"dompurify";var O=(t,e,n,r,o)=>{let s=`#${t}`,a=e.querySelectorAll(s);if(a.length===0)throw new Error(`[useTSComponent] No element found with id '${t}' in the given parent.`);if(a.length>1)throw new Error(`[useTSComponent] Duplicate id '${t}' detected. Found ${a.length} elements.`);let i=a[0];i.innerHTML=Se.sanitize(i.innerHTML,{USE_PROFILES:{html:!0}}),n(i,r,o)};var K=(t,e,n,r=[])=>{let o=new Set;t.forEach((s,a)=>{if(o.has(s)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${s}" \u2014 skipping.`);return}o.add(s);let i=e.querySelectorAll(`#${s}`);if(i.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${s}" (${i.length} elements found) \u2014 skipping component mount.`);return}let c=n[a],l=Array.isArray(r)?r[a]:void 0;typeof c=="function"?O(s,e,c,l):console.warn(`[useTSCollection] No valid component function found for ID: "${s}"`)})};var A=(t,e)=>{let r=(e??document).querySelectorAll(t);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${t}'`),null;if(t.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${t}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${t}'. Returning the first one.`),r[0]};import{jwtDecode as Ee}from"jwt-decode";var X=(t,e)=>{let n=localStorage.getItem("token");if(!n)return window.location.href=e,null;try{let r=Ee(n),o=Date.now()/1e3;return r.exp&&r.exp<o&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=e),null}catch(r){return console.error("Invalid token:",r),window.location.href=e,null}};var H=(t,e,n)=>{t.forEach(r=>{e.forEach(o=>{r.addEventListener(o,s=>{n(r,s)})})})};var Y=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var Z=(t,e)=>{let n=document.querySelector(`#${t}`)||document.querySelector(`.${t}`);if(!n)return;let r=window.location.pathname.replace(/\/$/,"");for(let o of e){let s=o.path.replace(/\/$/,"");if(r===s||r.startsWith(`${s}/`)){o.component(n);break}}};function ee(t,e){let n=window.location.pathname.replace(/\/$/,"");e.routes.forEach(r=>{r.children?.length&&r.children.forEach(o=>{let s=o.path.replace(/\/$/,"");if(n===s||n.startsWith(`${s}/`)){let a=t.querySelector(`#${o.outlet}`)||t.querySelector(`.${o.outlet}`);a instanceof HTMLElement&&o.element&&o.element(a)}})})}import{createStore as ye}from"zustand/vanilla";function te(t){let e=ye(()=>({value:t})),n=new Set;return{get:()=>e.getState().value,set:r=>{e.setState({value:r}),n.forEach(o=>o(r))},subscribe:r=>(n.add(r),r(e.getState().value),()=>n.delete(r))}}function ne(t){let e=t();typeof e=="function"&&e()}var re=async()=>{let t="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",e="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",n=r=>new Promise((o,s)=>{let a=document.createElement("script");a.src=r,a.onload=()=>o(),a.onerror=()=>s(new Error(`Failed to load ${r}`)),document.head.appendChild(a)});await n(t),await n(e),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},oe=t=>new Promise((e,n)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${t}`,r.onload=()=>e(),r.onerror=()=>n(new Error(`Failed to load ${t}`)),document.body.appendChild(r)});function se(t){let e=null;return async(n,r)=>{try{if(!e){let o=await t();e=o.default||o}if(typeof e=="function")return e(n,r);if(e instanceof HTMLElement){let o=e.cloneNode(!0);return n?.appendChild(o),o}if(typeof e=="object"&&e!==null&&"render"in e&&typeof e.render=="function")return e.render(n,r);console.warn("useTSLazy: Unsupported module type",e)}catch(o){console.error("useTSLazy failed:",o)}}}var ie=t=>typeof window>"u"?{isDOM:null}:{isDOM:t||document.body};import{debounce as ve}from"lodash-es";var C=t=>t;typeof window<"u"&&typeof document<"u"&&(C=t=>{let e=document.createElement("div");return e.innerText=t,e.innerHTML});var we=t=>{(t?Array.isArray(t)?t:t instanceof HTMLAnchorElement?[t]:Array.from(t):Array.from(document.querySelectorAll("a"))).forEach(n=>{if(!n||n.dataset.anchorEnhanced==="true")return;n.dataset.anchorEnhanced="true";let r=n.getAttribute("class")||"";n.setAttribute("class",C(r));let o=n.getAttribute("aria-label");o&&n.setAttribute("aria-label",C(o));let s=n.querySelector(":scope > *");s&&(n.innerHTML="",n.appendChild(s));let a=n.getAttribute("href")||"";if(!a.startsWith("#")){try{if(new URL(a,window.location.href).origin!==window.location.origin)return}catch{return}n.addEventListener("click",i=>{i.preventDefault();let c=n.getAttribute("href")||"";try{let l=new URL(c,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",c,l)}})}})},Le=ve(we,50),ae=t=>{Le(t)};var ce=t=>{if(!t)return;let e=A("a",t);ae(e)};import ue from"dompurify";import{createStore as Me}from"zustand/vanilla";import Re from"dompurify";var L=Me(t=>({params:{},query:{},setParams:e=>t(()=>({params:le(e)})),setQuery:e=>t(()=>({query:le(e)}))}));function le(t){let e={};for(let n in t)e[n]=Re.sanitize(t[n]);return e}var $=class{constructor(e,n){this.routes=[];this.routes=e,this.expectedParams=new Set(n),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let e=window.location.pathname,n=window.location.search,r=this.parseQueryParams(n),o=this.findMatchingRoute(e,this.routes);if(o){if(o.routeto){this.navigate(o.routeto);return}let s=this.filterAndSanitizeParams(o.params);L.getState().setParams(s),L.getState().setQuery(r);let a=document.createElement("div");if(o.element?.(a,s,r),o.children){let i=e.slice(o.path.length),c=a.querySelector("#child");c&&this.renderChildren(o.children,i,c,s,r)}}else{let s=this.findMatchingRoute("*",this.routes);if(s){let a=this.filterAndSanitizeParams(s.params);L.getState().setParams(a),L.getState().setQuery(r);let i=document.createElement("div");s.element?.(i,a,r)}}}renderChildren(e,n,r,o,s){if(!e||e.length===0){let i=r.querySelector("#child");i&&i.remove();return}let a=this.findMatchingRoute(n,e);if(a){let i=document.createElement("div");i.id="child";let c={...o,...a.params},l=this.filterAndSanitizeParams(c);if(L.getState().setParams(l),L.getState().setQuery(s),a.element?.(i,l,s),r.appendChild(i),a.children){let m=n.slice(a.path.length);this.renderChildren(a.children,m,i,l,s)}}}parseQueryParams(e){let n={},r=new URLSearchParams(e);for(let[o,s]of r.entries())this.expectedParams.has(o)&&(n[o]=ue.sanitize(s));return n}findMatchingRoute(e,n,r={}){for(let o of n){let s=o.path;if(s==="*")return o;{let i=[],c=s.replace(/:[^\s/]+/g,u=>(i.push(u.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${c}(?:/|$)`),m=e.match(l);if(m){let u={...r};if(i.forEach((E,p)=>{u[E]=m[p+1]??""}),o.children){let E=e.slice(m[0].length),p=this.findMatchingRoute(E,o.children,u);if(p)return p}return{...o,params:u}}}}}filterAndSanitizeParams(e){if(!e)return{};let n={};for(let r in e)this.expectedParams.has(r)&&(n[r]=ue.sanitize(e[r]??""));return n}navigate(e){history.pushState(null,"",e),this.handlePopState()}addRoute(e){this.routes.push(e)}};var Ae=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let t=await import("fs/promises"),e=await import("path"),n=await import("./esm-KRNKVVL7.js"),r=e.resolve("src/pages"),o=e.resolve("src/gen"),s=e.resolve("src/routes"),a=e.join(o,"tsrouter.gen.ts"),i=e.join(s,"__root.ts"),c=process.env.NODE_ENV!=="production";async function l(f){try{await t.mkdir(f,{recursive:!0})}catch{}}function m(f,g){let h="/"+e.relative(g,f).replace(/\\/g,"/");return h=h.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",h.replace(/\[(.+?)\]/g,":$1")}function u(f){return f.replace(/^\//,"").split("/").map(g=>g.startsWith(":")?g.slice(1):g).filter(Boolean).join("-")||"index"}function E(f,g){let d=e.relative(g,f).replace(/\\/g,"/").split("/").filter(Boolean),S=d[d.length-1].replace(".ts",""),y=d.length>1?d[d.length-2]:"";if(S==="index")return y?y.charAt(0).toUpperCase()+y.slice(1):"Index";if(S.startsWith("[")&&S.endsWith("]")){let w=S.slice(1,-1);return y.charAt(0).toUpperCase()+w.charAt(0).toUpperCase()+w.slice(1)}return S.charAt(0).toUpperCase()+S.slice(1)}async function p(f){let g=await t.readdir(f,{withFileTypes:!0}),h=[];for(let d of g){let S=e.join(f,d.name);if(d.isDirectory())h=h.concat(await p(S));else if(d.isFile()&&d.name.endsWith(".ts")){let y=m(S,r),w=u(y),T=E(S,r);h.push({file:S,route:y,routeName:w,importName:T})}}return h}function M(){return`import { html, useTSComponent, useTSElements, useTSNoReload, useTSSSRHydration } from '@devwareng/vanilla-ts'
2
+ import { Router } from './routes/__root';
3
+ import "tailwindcss/index.css"
4
+ import "animate.css"
5
+
6
+ export default function App(DOM?: HTMLElement) {
7
+ const { isDOM } = useTSSSRHydration(DOM!)
8
+ if (!isDOM) return
9
+
10
+ const ui = useTSElements(
11
+ isDOM,
12
+ html\`
13
+ <div class="min-h-screen text-white bg-black">
14
+ <div id="routes"></div>
15
+ </div>
16
+ \`
17
+ )
18
+
19
+ useTSNoReload(isDOM)
20
+ useTSComponent("routes", isDOM, Router)
21
+
22
+ return ui
23
+ }`}function v(f,g){let h=g.includes(":"),d=h?g.match(/:([^/]+)/)?.[1]:null;return`import { html, useTSElements, useTSMetaData${h?", useTSExtractParams":""} } from '@devwareng/vanilla-ts';
2
24
 
3
25
  export default function ${f}(DOM: HTMLElement) {
4
26
  useTSMetaData({
@@ -7,20 +29,20 @@ export default function ${f}(DOM: HTMLElement) {
7
29
  author: ''
8
30
  });
9
31
 
10
- ${d?`const params = useTSExtractParams("${h}");
11
- if (!params.${T}) return;`:""}
32
+ ${h?`const params = useTSExtractParams("${g}");
33
+ if (!params.${d}) return;`:""}
12
34
  const ui = useTSElements(
13
35
  DOM,
14
36
  html\`
15
37
  <div class="p-4 animate__animated animate__fadeIn duration-300">
16
38
  <h1>${f}</h1>
17
- ${d?"<pre>${JSON.stringify(params, null, 2)}</pre>":""}
39
+ ${h?"<pre>${JSON.stringify(params, null, 2)}</pre>":""}
18
40
  </div>
19
41
  \`
20
42
  );
21
43
 
22
44
  return ui
23
- }`}function v(){return`import { createRouter } from "@/gen/tsrouter.gen";
45
+ }`}function k(){return`import { createRouter } from "@/gen/tsrouter.gen";
24
46
  import { useTSParams } from "@devwareng/vanilla-ts";
25
47
 
26
48
  export const Router = (DOM: HTMLElement) => {
@@ -31,12 +53,12 @@ export const Router = (DOM: HTMLElement) => {
31
53
  window.addEventListener("popstate", () => {
32
54
  router.navigate(window.location.pathname);
33
55
  });
34
- };`}async function A(){let f=await p(r),h=f.find(g=>g.route==="/notfound"),d=f.filter(g=>g.route!=="/notfound");for(let g of f)(await t.readFile(g.file,"utf-8")).trim()||await t.writeFile(g.file,L(g.importName,g.route),"utf-8");let T=f.map(g=>{let $="../pages/"+e.relative(r,g.file).replace(/\\/g,"/").replace(/\.ts$/,"");return`import ${g.importName} from "${$}";`}).join(`
35
- `),S=d.map(g=>`{ path: "${g.route}", name: "${g.routeName}", component: (DOM: HTMLElement) => ${g.importName}(DOM) }`).join(`,
36
- `),y=h?`export const NotFound = ${h.importName}`:'export function NotFound(DOM: HTMLElement) {\n return useTSElements(DOM, html`<div class="animate__animated animate__fadeIn duration-300 p-4"><h1>404 - Page Not Found</h1></div>`)\n}',M=`// AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.
56
+ };`}async function b(){let f=await p(r),g=f.find(T=>T.route==="/notfound"),h=f.filter(T=>T.route!=="/notfound");for(let T of f)(await t.readFile(T.file,"utf-8")).trim()||await t.writeFile(T.file,v(T.importName,T.route),"utf-8");let d=f.map(T=>{let P="../pages/"+e.relative(r,T.file).replace(/\\/g,"/").replace(/\.ts$/,"");return`import ${T.importName} from "${P}";`}).join(`
57
+ `),S=h.map(T=>`{ path: "${T.route}", name: "${T.routeName}", component: (DOM: HTMLElement) => ${T.importName}(DOM) }`).join(`,
58
+ `),y=g?`export const NotFound = ${g.importName}`:'export function NotFound(DOM: HTMLElement) {\n return useTSElements(DOM, html`<div class="animate__animated animate__fadeIn duration-300 p-4"><h1>404 - Page Not Found</h1></div>`)\n}',w=`// AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.
37
59
  import { html, useTSElements } from "@devwareng/vanilla-ts"
38
60
 
39
- ${T}
61
+ ${d}
40
62
 
41
63
  ${y}
42
64
 
@@ -83,4 +105,4 @@ export function createRouter(DOM: HTMLElement) {
83
105
  navigate(window.location.pathname + window.location.search)
84
106
  return { navigate, routes: routeTree }
85
107
  }
86
- `;await l(o),await t.writeFile(a,M,"utf-8"),await t.writeFile(i,v(),"utf-8")}await l(o),await l(s),await l(r),await A(),c&&(n.watch(r).on("all",async(h,d)=>{if(d.endsWith(".ts"))if(h==="add"){let S=e.basename(d,".ts").replace(/\[|\]/g,"Param").replace(/(^\w|-\w)/g,g=>g.replace("-","").toUpperCase()),y=u(d,r);(await t.readFile(d,"utf-8")).trim()||await t.writeFile(d,L(S,y),"utf-8"),await A()}else h==="unlink"?(console.log(`\u26A0\uFE0F File removed: ${d}`),await A()):h==="change"&&await A()}),n.watch(i).on("unlink",async()=>{console.log("\u26A0\uFE0F Root file removed: regenerating..."),await t.writeFile(i,v(),"utf-8")})),console.log("\u{1F7E2} TS Filebased Router Generated Successfully...")}});export{Re as TSFilebasedRouter,C as TSRouter,te as createEffect,ee as createSignal,k as html,re as loadPyFiles,de as mapper,Z as renderChildRoutes,G as useAnchorSingle,B as useInitialDOM,K as useTSAuth,J as useTSCollection,D as useTSComponent,O as useTSElementEach,U as useTSElements,_ as useTSEvent,q as useTSEventAll,z as useTSExtractParams,oe as useTSLazy,V as useTSMetaData,X as useTSNavigate,ae as useTSNoReload,Y as useTSOutlet,P as useTSParams,F as useTSPurifier,se as useTSSSRHydration,b as useTSSelect,ne as useTSloadBrython};
108
+ `;await l(o),await t.writeFile(a,w,"utf-8"),await t.writeFile(i,k(),"utf-8")}if(await l(o),await l(s),await l(r),await b(),c){n.watch(r).on("all",async(h,d)=>{if(d.endsWith(".ts"))if(h==="add"){let y=e.basename(d,".ts").replace(/\[|\]/g,"Param").replace(/(^\w|-\w)/g,P=>P.replace("-","").toUpperCase()),w=m(d,r);(await t.readFile(d,"utf-8")).trim()||await t.writeFile(d,v(y,w),"utf-8"),await b()}else h==="unlink"?(console.log(`\u26A0\uFE0F File removed: ${d}`),await b()):h==="change"&&await b()});let g=e.resolve("src/App.ts");try{await t.access(g)}catch{await t.writeFile(g,M(),"utf-8"),console.log("\u{1F7E2} Created default src/App.ts")}n.watch(i).on("unlink",async()=>{console.log("\u26A0\uFE0F Root file removed: regenerating..."),await t.writeFile(i,k(),"utf-8")})}console.log("\u{1F7E2} TS Filebased Router Generated Successfully...")}});export{Ae as TSFilebasedRouter,$ as TSRouter,ne as createEffect,te as createSignal,N as html,oe as loadPyFiles,pe as mapper,ee as renderChildRoutes,Q as useAnchorSingle,W as useInitialDOM,X as useTSAuth,K as useTSCollection,O as useTSComponent,H as useTSElementEach,B as useTSElements,I as useTSEvent,j as useTSEventAll,q as useTSExtractParams,se as useTSLazy,J as useTSMetaData,Y as useTSNavigate,ce as useTSNoReload,Z as useTSOutlet,x as useTSParams,_ as useTSPurifier,ie as useTSSSRHydration,A as useTSSelect,re as useTSloadBrython};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devwareng/vanilla-ts",
3
- "version": "1.6.108",
3
+ "version": "1.6.110",
4
4
  "description": "Framework-less TypeScript hooks for SPA development.",
5
5
  "author": "Waren Arapoc Gador",
6
6
  "license": "MIT",