diff --git a/Dockerfile b/Dockerfile index a4264aa..9553591 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ ARG GIT_REVISION WORKDIR /app COPY . . -RUN deno cache main.ts +RUN deno cache main.ts && deno task build EXPOSE 8000 diff --git a/_fresh/chunk-7JONXWSO.js b/_fresh/chunk-7JONXWSO.js new file mode 100644 index 0000000..655bac0 --- /dev/null +++ b/_fresh/chunk-7JONXWSO.js @@ -0,0 +1,2 @@ +import{j,w}from"./chunk-ICN4RY3D.js";function useEventListener(eventName,handler,element=window){let savedHandler=w();j(()=>{savedHandler.current=handler},[handler]),j(()=>{if(!(element&&element.addEventListener))return;let eventListener=event=>savedHandler?.current?.(event);return element.addEventListener(eventName,eventListener),()=>{element.removeEventListener(eventName,eventListener)}},[eventName,element])}var resources={home:{emoji:"House with Garden.png",name:"Home",link:"/",prefix:""},recipe:{emoji:"Fork and Knife with Plate.png",name:"Recipes",link:"/recipes",prefix:"Recipes/"},movie:{emoji:"Popcorn.png",name:"Movies",link:"/movies",prefix:"Media/movies/"},article:{emoji:"Writing Hand Medium-Light Skin Tone.png",name:"Articles",link:"/articles",prefix:"Media/articles/"},series:{emoji:"Television.png",name:"Series",link:"/series",prefix:"Media/series/"}};function getCookie(name){if(typeof document>"u")return null;let nameLenPlus=name.length+1;return document.cookie.split(";").map(c=>c.trim()).filter(cookie=>cookie.substring(0,nameLenPlus)===`${name}=`).map(cookie=>decodeURIComponent(cookie.substring(nameLenPlus)))[0]||null}var resourcePrefixes=Object.values(resources).map(v=>v.prefix).filter(s=>s.length>2),isLocalImage=src=>resourcePrefixes.some(p=>src.startsWith(p));export{useEventListener,resources,getCookie,isLocalImage}; +//# sourceMappingURL=chunk-7JONXWSO.js.map diff --git a/_fresh/chunk-7JONXWSO.js.map b/_fresh/chunk-7JONXWSO.js.map new file mode 100644 index 0000000..d518578 --- /dev/null +++ b/_fresh/chunk-7JONXWSO.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["lib/hooks/useEventListener.ts", "lib/resources.ts", "lib/string.ts"], + "sourcesContent": ["import { useEffect, useRef } from \"preact/hooks\";\n\nexport function useEventListener(\n eventName: string,\n handler: (event: T) => void,\n element: Window | HTMLElement = window,\n) {\n // Create a ref that stores handler\n const savedHandler = useRef<(event: Event) => void>();\n\n // Update ref.current value if handler changes.\n // This allows our effect below to always get latest handler ...\n // ... without us needing to pass it in effect deps array ...\n // ... and potentially cause effect to re-run every render.\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n useEffect(\n () => {\n // Make sure element supports addEventListener\n // On\n const isSupported = element && element.addEventListener;\n if (!isSupported) return;\n\n // Create event listener that calls handler function stored in ref\n const eventListener = (event: T) => savedHandler?.current?.(event);\n\n // Add event listener\n element.addEventListener(eventName, eventListener);\n\n // Remove event listener on cleanup\n return () => {\n element.removeEventListener(eventName, eventListener);\n };\n },\n [eventName, element], // Re-run if eventName or element changes\n );\n}\n", "export const resources = {\n \"home\": {\n emoji: \"House with Garden.png\",\n name: \"Home\",\n link: \"/\",\n prefix: \"\",\n },\n \"recipe\": {\n emoji: \"Fork and Knife with Plate.png\",\n name: \"Recipes\",\n link: \"/recipes\",\n prefix: \"Recipes/\",\n },\n \"movie\": {\n emoji: \"Popcorn.png\",\n name: \"Movies\",\n link: \"/movies\",\n prefix: \"Media/movies/\",\n },\n \"article\": {\n emoji: \"Writing Hand Medium-Light Skin Tone.png\",\n name: \"Articles\",\n link: \"/articles\",\n prefix: \"Media/articles/\",\n },\n \"series\": {\n emoji: \"Television.png\",\n name: \"Series\",\n link: \"/series\",\n prefix: \"Media/series/\",\n },\n} as const;\n", "import { resources } from \"@lib/resources.ts\";\n\nexport function formatDate(date: Date): string {\n const options = { year: \"numeric\", month: \"long\", day: \"numeric\" } as const;\n return new Intl.DateTimeFormat(\"en-US\", options).format(date);\n}\n\nexport function safeFileName(inputString: string): string {\n // Convert the string to lowercase\n let fileName = inputString.toLowerCase();\n\n // Replace spaces with underscores\n fileName = fileName.replace(/ /g, \"_\");\n\n // Remove characters that are not safe for file names\n fileName = fileName.replace(/[^\\w.-]/g, \"\");\n\n fileName = fileName.replaceAll(\":\", \"\");\n\n return fileName;\n}\n\nexport function extractHashTags(inputString: string) {\n const hashtags = [];\n\n for (\n const [hashtag] of inputString.matchAll(/(?:^|\\s)#\\S*(? 2) {\n hashtags.push(cleaned);\n }\n }\n\n return hashtags;\n}\n\nexport const isYoutubeLink = (link: string) => {\n try {\n const url = new URL(link);\n return [\"youtu.be\", \"youtube.com\", \"www.youtube.com\"].includes(\n url.hostname,\n );\n } catch (_err) {\n return false;\n }\n};\n\nexport function extractYoutubeId(link: string) {\n const url = new URL(link);\n if (url.searchParams.has(\"v\")) {\n const id = url.searchParams.get(\"v\");\n\n if (id?.length && id.length > 4) {\n return id;\n }\n }\n\n return url.pathname.replace(/^\\//, \"\");\n}\n\nexport async function hash(message: string) {\n const data = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\n \"\",\n );\n return hashHex;\n}\n// Helper function to calculate SHA-256 hash\nexport async function sha256(input: string) {\n const encoder = new TextEncoder();\n const data = encoder.encode(input);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n return base64urlencode(new Uint8Array(hashBuffer));\n}\n\n// Helper function to encode a byte array as a URL-safe base64 string\nfunction base64urlencode(data: Uint8Array) {\n const base64 = btoa(String.fromCharCode(...data));\n return base64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\nexport function getCookie(name: string): string | null {\n if (typeof document === \"undefined\") return null;\n const nameLenPlus = name.length + 1;\n return document.cookie\n .split(\";\")\n .map((c) => c.trim())\n .filter((cookie) => {\n return cookie.substring(0, nameLenPlus) === `${name}=`;\n })\n .map((cookie) => {\n return decodeURIComponent(cookie.substring(nameLenPlus));\n })[0] || null;\n}\n\nconst resourcePrefixes = Object.values(resources).map((v) => v.prefix).filter(\n (s) => s.length > 2,\n);\nexport const isLocalImage = (src: string) =>\n resourcePrefixes.some((p) => src.startsWith(p));\n\nexport const isString = (input: string | undefined): input is string => {\n return typeof input === \"string\";\n};\n\nfunction componentToHex(c: number) {\n if (c <= 1) {\n c = Math.round(c * 255);\n }\n const hex = c.toString(16);\n return hex.length == 1 ? \"0\" + hex : hex;\n}\n\nexport function getTimeCacheKey() {\n const d = new Date();\n const year = d.getFullYear();\n const month = d.getMonth().toString();\n const day = d.getDate().toString();\n const hour = d.getHours().toString();\n const minute = d.getMinutes().toString();\n const seconds = d.getSeconds().toString();\n return `${year}:${month}:${day}:${hour}:${minute}:${seconds}`;\n}\n\nexport function parseTimeCacheKey(key: string) {\n const [_year, _month, _day, _hour, _minute, _second] = key.split(\":\")\n .slice(1).map((s) => parseInt(s));\n const d = new Date();\n d.setFullYear(_year);\n d.setMonth(_month);\n d.setDate(_day);\n d.setHours(_hour);\n d.setMinutes(_minute);\n d.setSeconds(_second);\n return d;\n}\n\nexport function rgbToHex(r: number, g: number, b: number) {\n return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\n}\n"], + "mappings": "qCAEO,SAAS,iBACd,UACA,QACA,QAAgC,OAChC,CAEA,IAAM,aAAe,EAA+B,EAMpD,EAAU,IAAM,CACd,aAAa,QAAU,OACzB,EAAG,CAAC,OAAO,CAAC,EAEZ,EACE,IAAM,CAIJ,GAAI,EADgB,SAAW,QAAQ,kBACrB,OAGlB,IAAM,cAAiB,OAAa,cAAc,UAAU,KAAK,EAGjE,eAAQ,iBAAiB,UAAW,aAAa,EAG1C,IAAM,CACX,QAAQ,oBAAoB,UAAW,aAAa,CACtD,CACF,EACA,CAAC,UAAW,OAAO,CACrB,CACF,CCtCO,IAAM,UAAY,CACvB,KAAQ,CACN,MAAO,wBACP,KAAM,OACN,KAAM,IACN,OAAQ,EACV,EACA,OAAU,CACR,MAAO,gCACP,KAAM,UACN,KAAM,WACN,OAAQ,UACV,EACA,MAAS,CACP,MAAO,cACP,KAAM,SACN,KAAM,UACN,OAAQ,eACV,EACA,QAAW,CACT,MAAO,0CACP,KAAM,WACN,KAAM,YACN,OAAQ,iBACV,EACA,OAAU,CACR,MAAO,iBACP,KAAM,SACN,KAAM,UACN,OAAQ,eACV,CACF,ECoDO,SAAS,UAAU,KAA6B,CACrD,GAAI,OAAO,SAAa,IAAa,OAAO,KAC5C,IAAM,YAAc,KAAK,OAAS,EAClC,OAAO,SAAS,OACb,MAAM,GAAG,EACT,IAAK,GAAM,EAAE,KAAK,CAAC,EACnB,OAAQ,QACA,OAAO,UAAU,EAAG,WAAW,IAAM,GAAG,IAAI,GACpD,EACA,IAAK,QACG,mBAAmB,OAAO,UAAU,WAAW,CAAC,CACxD,EAAE,CAAC,GAAK,IACb,CAEA,IAAM,iBAAmB,OAAO,OAAO,SAAS,EAAE,IAAK,GAAM,EAAE,MAAM,EAAE,OACpE,GAAM,EAAE,OAAS,CACpB,EACa,aAAgB,KAC3B,iBAAiB,KAAM,GAAM,IAAI,WAAW,CAAC,CAAC", + "names": [] +} diff --git a/_fresh/chunk-CUT5GMLI.js b/_fresh/chunk-CUT5GMLI.js new file mode 100644 index 0000000..371798a --- /dev/null +++ b/_fresh/chunk-CUT5GMLI.js @@ -0,0 +1,2 @@ +import{d}from"./chunk-YC2TUGGU.js";var i=0;function v(n,s,f,a,l,u){var r,o,_={};for(o in s)o=="ref"?r=s[o]:_[o]=s[o];var t={type:n,props:_,key:f,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:--i,__source:l,__self:u};if(typeof n=="function"&&(r=n.defaultProps))for(o in r)_[o]===void 0&&(_[o]=r[o]);return d.vnode&&d.vnode(t),t}export{v}; +//# sourceMappingURL=chunk-CUT5GMLI.js.map diff --git a/_fresh/chunk-CUT5GMLI.js.map b/_fresh/chunk-CUT5GMLI.js.map new file mode 100644 index 0000000..4458069 --- /dev/null +++ b/_fresh/chunk-CUT5GMLI.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["https://esm.sh/stable/preact@10.15.1/denonext/jsx-runtime.js"], + "sourcesContent": ["/* esm.sh - esbuild bundle(preact@10.15.1/jsx-runtime) denonext production */\nimport{options as e}from\"/stable/preact@10.15.1/denonext/preact.mjs\";import{Fragment as x}from\"/stable/preact@10.15.1/denonext/preact.mjs\";var i=0;function v(n,s,f,a,l,u){var r,o,_={};for(o in s)o==\"ref\"?r=s[o]:_[o]=s[o];var t={type:n,props:_,key:f,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:--i,__source:l,__self:u};if(typeof n==\"function\"&&(r=n.defaultProps))for(o in r)_[o]===void 0&&(_[o]=r[o]);return e.vnode&&e.vnode(t),t}export{x as Fragment,v as jsx,v as jsxDEV,v as jsxs};\n//# sourceMappingURL=jsx-runtime.js.map"], + "mappings": "mCAC2I,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,KAAK,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,YAAY,OAAO,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,GAAG,aAAa,EAAE,EAAE,cAAc,IAAI,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC", + "names": [] +} diff --git a/_fresh/chunk-ICN4RY3D.js b/_fresh/chunk-ICN4RY3D.js new file mode 100644 index 0000000..099d997 --- /dev/null +++ b/_fresh/chunk-ICN4RY3D.js @@ -0,0 +1,2 @@ +import{d}from"./chunk-YC2TUGGU.js";var c,o,H,b,v=0,x=[],p=[],g=d.__b,A=d.__r,C=d.diffed,F=d.__c,q=d.unmount;function l(_,n){d.__h&&d.__h(o,_,v||n),v=0;var u=o.__H||(o.__H={__:[],__h:[]});return _>=u.__.length&&u.__.push({__V:p}),u.__[_]}function k(_){return v=1,B(U,_)}function B(_,n,u){var t=l(c++,2);if(t.t=_,!t.__c&&(t.__=[u?u(n):U(void 0,n),function(a){var f=t.__N?t.__N[0]:t.__[0],s=t.t(f,a);f!==s&&(t.__N=[s,t.__[1]],t.__c.setState({}))}],t.__c=o,!o.u)){var i=function(a,f,s){if(!t.__c.__H)return!0;var m=t.__c.__H.__.filter(function(e){return e.__c});if(m.every(function(e){return!e.__N}))return!h||h.call(this,a,f,s);var V=!1;return m.forEach(function(e){if(e.__N){var P=e.__[0];e.__=e.__N,e.__N=void 0,P!==e.__[0]&&(V=!0)}}),!(!V&&t.__c.props===a)&&(!h||h.call(this,a,f,s))};o.u=!0;var h=o.shouldComponentUpdate,N=o.componentWillUpdate;o.componentWillUpdate=function(a,f,s){if(this.__e){var m=h;h=void 0,i(a,f,s),h=m}N&&N.call(this,a,f,s)},o.shouldComponentUpdate=i}return t.__N||t.__}function j(_,n){var u=l(c++,3);!d.__s&&y(u.__H,n)&&(u.__=_,u.i=n,o.__H.__h.push(u))}function w(_){return v=5,T(function(){return{current:_}},[])}function T(_,n){var u=l(c++,7);return y(u.__H,n)?(u.__V=_(),u.i=n,u.__h=_,u.__V):u.__}function K(){var _=l(c++,11);if(!_.__){for(var n=o.__v;n!==null&&!n.__m&&n.__!==null;)n=n.__;var u=n.__m||(n.__m=[0,0]);_.__="P"+u[0]+"-"+u[1]++}return _.__}function R(){for(var _;_=x.shift();)if(_.__P&&_.__H)try{_.__H.__h.forEach(d2),_.__H.__h.forEach(E),_.__H.__h=[]}catch(n){_.__H.__h=[],d.__e(n,_.__v)}}d.__b=function(_){o=null,g&&g(_)},d.__r=function(_){A&&A(_),c=0;var n=(o=_.__c).__H;n&&(H===o?(n.__h=[],o.__h=[],n.__.forEach(function(u){u.__N&&(u.__=u.__N),u.__V=p,u.__N=u.i=void 0})):(n.__h.forEach(d2),n.__h.forEach(E),n.__h=[],c=0)),H=o},d.diffed=function(_){C&&C(_);var n=_.__c;n&&n.__H&&(n.__H.__h.length&&(x.push(n)!==1&&b===d.requestAnimationFrame||((b=d.requestAnimationFrame)||S)(R)),n.__H.__.forEach(function(u){u.i&&(u.__H=u.i),u.__V!==p&&(u.__=u.__V),u.i=void 0,u.__V=p})),H=o=null},d.__c=function(_,n){n.some(function(u){try{u.__h.forEach(d2),u.__h=u.__h.filter(function(t){return!t.__||E(t)})}catch(t){n.some(function(i){i.__h&&(i.__h=[])}),n=[],d.__e(t,u.__v)}}),F&&F(_,n)},d.unmount=function(_){q&&q(_);var n,u=_.__c;u&&u.__H&&(u.__H.__.forEach(function(t){try{d2(t)}catch(i){n=i}}),u.__H=void 0,n&&d.__e(n,u.__v))};var D=typeof requestAnimationFrame=="function";function S(_){var n,u=function(){clearTimeout(t),D&&cancelAnimationFrame(n),setTimeout(_)},t=setTimeout(u,100);D&&(n=requestAnimationFrame(u))}function d2(_){var n=o,u=_.__c;typeof u=="function"&&(_.__c=void 0,u()),o=n}function E(_){var n=o;_.__c=_.__(),o=n}function y(_,n){return!_||_.length!==n.length||n.some(function(u,t){return u!==_[t]})}function U(_,n){return typeof n=="function"?n(_):n}export{k,j,w,T,K}; +//# sourceMappingURL=chunk-ICN4RY3D.js.map diff --git a/_fresh/chunk-ICN4RY3D.js.map b/_fresh/chunk-ICN4RY3D.js.map new file mode 100644 index 0000000..0751014 --- /dev/null +++ b/_fresh/chunk-ICN4RY3D.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["https://esm.sh/stable/preact@10.15.1/denonext/hooks.js"], + "sourcesContent": ["/* esm.sh - esbuild bundle(preact@10.15.1/hooks) denonext production */\nimport{options as r}from\"/stable/preact@10.15.1/denonext/preact.mjs\";var c,o,H,b,v=0,x=[],p=[],g=r.__b,A=r.__r,C=r.diffed,F=r.__c,q=r.unmount;function l(_,n){r.__h&&r.__h(o,_,v||n),v=0;var u=o.__H||(o.__H={__:[],__h:[]});return _>=u.__.length&&u.__.push({__V:p}),u.__[_]}function k(_){return v=1,B(U,_)}function B(_,n,u){var t=l(c++,2);if(t.t=_,!t.__c&&(t.__=[u?u(n):U(void 0,n),function(a){var f=t.__N?t.__N[0]:t.__[0],s=t.t(f,a);f!==s&&(t.__N=[s,t.__[1]],t.__c.setState({}))}],t.__c=o,!o.u)){var i=function(a,f,s){if(!t.__c.__H)return!0;var m=t.__c.__H.__.filter(function(e){return e.__c});if(m.every(function(e){return!e.__N}))return!h||h.call(this,a,f,s);var V=!1;return m.forEach(function(e){if(e.__N){var P=e.__[0];e.__=e.__N,e.__N=void 0,P!==e.__[0]&&(V=!0)}}),!(!V&&t.__c.props===a)&&(!h||h.call(this,a,f,s))};o.u=!0;var h=o.shouldComponentUpdate,N=o.componentWillUpdate;o.componentWillUpdate=function(a,f,s){if(this.__e){var m=h;h=void 0,i(a,f,s),h=m}N&&N.call(this,a,f,s)},o.shouldComponentUpdate=i}return t.__N||t.__}function j(_,n){var u=l(c++,3);!r.__s&&y(u.__H,n)&&(u.__=_,u.i=n,o.__H.__h.push(u))}function I(_,n){var u=l(c++,4);!r.__s&&y(u.__H,n)&&(u.__=_,u.i=n,o.__h.push(u))}function w(_){return v=5,T(function(){return{current:_}},[])}function z(_,n,u){v=6,I(function(){return typeof _==\"function\"?(_(n()),function(){return _(null)}):_?(_.current=n(),function(){return _.current=null}):void 0},u==null?u:u.concat(_))}function T(_,n){var u=l(c++,7);return y(u.__H,n)?(u.__V=_(),u.i=n,u.__h=_,u.__V):u.__}function L(_,n){return v=8,T(function(){return _},n)}function M(_){var n=o.context[_.__c],u=l(c++,9);return u.c=_,n?(u.__==null&&(u.__=!0,n.sub(o)),n.props.value):_.__}function G(_,n){r.useDebugValue&&r.useDebugValue(n?n(_):_)}function J(_){var n=l(c++,10),u=k();return n.__=_,o.componentDidCatch||(o.componentDidCatch=function(t,i){n.__&&n.__(t,i),u[1](t)}),[u[0],function(){u[1](void 0)}]}function K(){var _=l(c++,11);if(!_.__){for(var n=o.__v;n!==null&&!n.__m&&n.__!==null;)n=n.__;var u=n.__m||(n.__m=[0,0]);_.__=\"P\"+u[0]+\"-\"+u[1]++}return _.__}function R(){for(var _;_=x.shift();)if(_.__P&&_.__H)try{_.__H.__h.forEach(d),_.__H.__h.forEach(E),_.__H.__h=[]}catch(n){_.__H.__h=[],r.__e(n,_.__v)}}r.__b=function(_){o=null,g&&g(_)},r.__r=function(_){A&&A(_),c=0;var n=(o=_.__c).__H;n&&(H===o?(n.__h=[],o.__h=[],n.__.forEach(function(u){u.__N&&(u.__=u.__N),u.__V=p,u.__N=u.i=void 0})):(n.__h.forEach(d),n.__h.forEach(E),n.__h=[],c=0)),H=o},r.diffed=function(_){C&&C(_);var n=_.__c;n&&n.__H&&(n.__H.__h.length&&(x.push(n)!==1&&b===r.requestAnimationFrame||((b=r.requestAnimationFrame)||S)(R)),n.__H.__.forEach(function(u){u.i&&(u.__H=u.i),u.__V!==p&&(u.__=u.__V),u.i=void 0,u.__V=p})),H=o=null},r.__c=function(_,n){n.some(function(u){try{u.__h.forEach(d),u.__h=u.__h.filter(function(t){return!t.__||E(t)})}catch(t){n.some(function(i){i.__h&&(i.__h=[])}),n=[],r.__e(t,u.__v)}}),F&&F(_,n)},r.unmount=function(_){q&&q(_);var n,u=_.__c;u&&u.__H&&(u.__H.__.forEach(function(t){try{d(t)}catch(i){n=i}}),u.__H=void 0,n&&r.__e(n,u.__v))};var D=typeof requestAnimationFrame==\"function\";function S(_){var n,u=function(){clearTimeout(t),D&&cancelAnimationFrame(n),setTimeout(_)},t=setTimeout(u,100);D&&(n=requestAnimationFrame(u))}function d(_){var n=o,u=_.__c;typeof u==\"function\"&&(_.__c=void 0,u()),o=n}function E(_){var n=o;_.__c=_.__(),o=n}function y(_,n){return!_||_.length!==n.length||n.some(function(u,t){return u!==_[t]})}function U(_,n){return typeof n==\"function\"?n(_):n}export{L as useCallback,M as useContext,G as useDebugValue,j as useEffect,J as useErrorBoundary,K as useId,z as useImperativeHandle,I as useLayoutEffect,T as useMemo,B as useReducer,w as useRef,k as useState};\n//# sourceMappingURL=hooks.js.map"], + "mappings": "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", + "names": ["d"] +} diff --git a/_fresh/chunk-IJ6I6D4H.js b/_fresh/chunk-IJ6I6D4H.js new file mode 100644 index 0000000..922c8de --- /dev/null +++ b/_fresh/chunk-IJ6I6D4H.js @@ -0,0 +1,3 @@ +import{getCookie,isLocalImage,resources,useEventListener}from"./chunk-7JONXWSO.js";import{k as k2}from"./chunk-RG4ZUIOR.js";import{loader_2_default,search_default,star_default,star_filled_default}from"./chunk-PE2ZHJ3V.js";import{IS_BROWSER,asset}from"./chunk-P55SGJLG.js";import{K,T,j,k,w}from"./chunk-ICN4RY3D.js";import{v}from"./chunk-CUT5GMLI.js";import{A}from"./chunk-YC2TUGGU.js";function useDebouncedCallback(func,wait,options){let lastCallTime=w(null),lastInvokeTime=w(0),timerId=w(null),lastArgs=w([]),lastThis=w(),result=w(),funcRef=w(func),mounted=w(!0);j(()=>{funcRef.current=func},[func]);let useRAF=!wait&&wait!==0&&typeof window<"u";if(typeof func!="function")throw new TypeError("Expected a function");wait=+wait||0,options=options||{};let leading=!!options.leading,trailing="trailing"in options?!!options.trailing:!0,maxing="maxWait"in options,maxWait=maxing?Math.max(+options.maxWait||0,wait):null;return j(()=>(mounted.current=!0,()=>{mounted.current=!1}),[]),T(()=>{let invokeFunc=time=>{let args=lastArgs.current,thisArg=lastThis.current;return lastArgs.current=lastThis.current=null,lastInvokeTime.current=time,result.current=funcRef.current.apply(thisArg,args)},startTimer=(pendingFunc,wait2)=>{useRAF&&cancelAnimationFrame(timerId.current),timerId.current=useRAF?requestAnimationFrame(pendingFunc):setTimeout(pendingFunc,wait2)},shouldInvoke=time=>{if(!mounted.current)return!1;let timeSinceLastCall=time-lastCallTime.current,timeSinceLastInvoke=time-lastInvokeTime.current;return!lastCallTime.current||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&timeSinceLastInvoke>=maxWait},trailingEdge=time=>(timerId.current=null,trailing&&lastArgs.current?invokeFunc(time):(lastArgs.current=lastThis.current=null,result.current)),timerExpired=()=>{let time=Date.now();if(shouldInvoke(time))return trailingEdge(time);if(!mounted.current)return;let timeSinceLastCall=time-lastCallTime.current,timeSinceLastInvoke=time-lastInvokeTime.current,timeWaiting=wait-timeSinceLastCall,remainingWait=maxing?Math.min(timeWaiting,maxWait-timeSinceLastInvoke):timeWaiting;startTimer(timerExpired,remainingWait)},func2=(...args)=>{let time=Date.now(),isInvoking=shouldInvoke(time);if(lastArgs.current=args,lastThis.current=this,lastCallTime.current=time,isInvoking){if(!timerId.current&&mounted.current)return lastInvokeTime.current=lastCallTime.current,startTimer(timerExpired,wait),leading?invokeFunc(lastCallTime.current):result.current;if(maxing)return startTimer(timerExpired,wait),invokeFunc(lastCallTime.current)}return timerId.current||startTimer(timerExpired,wait),result.current};return func2.cancel=()=>{timerId.current&&(useRAF?cancelAnimationFrame(timerId.current):clearTimeout(timerId.current)),lastInvokeTime.current=0,lastArgs.current=lastCallTime.current=lastThis.current=timerId.current=null},func2.isPending=()=>!!timerId.current,func2.flush=()=>timerId.current?trailingEdge(Date.now()):result.current,func2},[leading,maxing,wait,maxWait,trailing,useRAF])}var Checkbox=({label,checked=k2(!1)})=>{let id=`checkbox-${K()}`;return v("label",{className:"flex items-center py-3 px-4 rounded-xl",style:{color:"var(--foreground)",background:"var(--background)"},children:[v("input",{type:"checkbox",checked:checked.value,name:"checkbox-one",id,onChange:ev=>{checked.value=ev.currentTarget.checked},class:`bg-gray-200 hover:bg-gray-300 cursor-pointer + w-5 h-5 border-3 border-amber-500 focus:outline-none rounded-lg`}),v("span",{class:"ml-3",children:label})]})},Checkbox_default=Checkbox;var Rating=props=>{let[rating,setRating]=k(props.rating),[hover,setHover]=k(0),max=k2(props.max||5);return v("div",{class:"flex gap-2 px-5 rounded-2xl bg-gray-200 z-10",style:{color:"var(--foreground)",background:"var(--background)"},children:Array.from({length:max.value}).map((_,i)=>v("span",{class:`my-5 cursor-pointer opacity-${i+1<=rating?100:i+1<=hover?20:100}`,onMouseOver:()=>setHover(i+1),onClick:()=>setRating(i+1),children:i+1<=rating||i+1<=hover?v(star_filled_default,{class:"w-4 h-4"}):v(star_default,{class:"w-4 h-4"})}))})};function generateResponsiveAttributes(imageUrl,widths2,baseApiUrl,sizes="100vw"){let srcsets=[];for(let width of widths2){let apiUrl=`${baseApiUrl}?image=${imageUrl}&width=${width}`;srcsets.push(`${apiUrl} ${width}w`)}return{srcset:srcsets.join(", "),sizes}}var widths=[320,640,960,1280],Image=props=>{let responsiveAttributes=isLocalImage(props.src)?generateResponsiveAttributes(props.src,widths,"/api/images"):{srcset:"",sizes:""};return v("span",{style:{position:props.fill?"absolute":"",width:props.fill?"100%":"",height:props.fill?"100%":"",zIndex:props.fill?-1:""},"data-thumb":props.thumbnail,children:v("img",{"data-thumb":props.thumbnail,"data-thumb-img":!0,loading:"lazy",alt:props.alt,style:props.style,srcset:responsiveAttributes.srcset,sizes:responsiveAttributes.sizes,src:asset(props.src),width:props.width,height:props.height,class:props.class})})},Image_default=Image;var Emoji=props=>props.name?props.name.endsWith(".png")?v("img",{class:`${props?.class||""}`,src:asset(`/emojis/${props.name}`)}):v("span",{children:props.name}):v(A,{});async function fetchQueryResource(url,type=""){let query=url.searchParams.get("q"),status=url.searchParams.get("status");try{return url.pathname="/api/resources",url.searchParams.set("q",encodeURIComponent(query||"*")),status&&url.searchParams.set("status","not-seen"),type&&url.searchParams.set("type",type),await(await fetch(url)).json()}catch(error){console.error("Error fetching data:",error)}}var RedirectSearchHandler=()=>(getCookie("session_cookie")&&useEventListener("keydown",e=>{e?.target?.nodeName!="INPUT"&&e.key==="?"&&window.location.search===""&&(window.location.href+="?q=*")},IS_BROWSER?document?.body:void 0),v(A,{})),SearchResultImage=({src})=>{let imageSrc=isLocalImage(src)?`/api/images?image=${src}&width=50&height=50`:src;return v(Image_default,{class:"object-cover w-12 h-12 rounded-full",src:imageSrc,alt:"preview image"})},SearchResultItem=({item,showEmoji=!1})=>{let doc=item.document,resourceType=resources[doc.type],href=resourceType?`${resourceType.link}/${doc.id}`:"";return v("a",{href,class:"p-2 text-white flex gap-4 items-center rounded-2xl hover:bg-gray-700",children:[showEmoji&&resourceType?v(Emoji,{class:"w-7 h-7",name:resourceType.emoji}):"",doc?.image&&v(SearchResultImage,{src:doc.image}),doc?.name]})},SearchResultList=({result,showEmoji})=>v("div",{class:"mt-4",children:result?.hits?v("div",{class:"flex flex-col gap-4",children:result.hits.map(hit=>v(SearchResultItem,{item:hit,showEmoji}))}):v("div",{style:{color:"#818181"},children:"No Results"})}),Search=({q="*",type,results})=>{let searchQuery=k2(q),data=k2(results),isLoading=k2(!1),showSeenStatus=k2(!1),inputRef=w(null);if("history"in globalThis){let u=new URL(window.location.href);u.searchParams.get("q")!==searchQuery.value&&u.searchParams.set("q",searchQuery.value),showSeenStatus.value?u.searchParams.set("rating","0"):u.searchParams.delete("rating"),window.history.replaceState({},"",u)}let debouncedFetchData=useDebouncedCallback(async()=>{try{isLoading.value=!0;let jsonData=await fetchQueryResource(new URL(window?.location.href),type);data.value=jsonData,isLoading.value=!1}catch(error){console.error("Error fetching data:",error),isLoading.value=!1}},500);j(()=>{inputRef.current&&searchQuery?.value.length===0&&inputRef.current?.focus()},[inputRef.current,searchQuery]);let handleInputChange=event=>{let target=event.target;target.value!==searchQuery.value&&(searchQuery.value=target.value)};return j(()=>{debouncedFetchData()},[searchQuery.value,showSeenStatus.value]),j(()=>{debouncedFetchData()},[]),v("div",{class:"mt-2",children:[v("header",{class:"flex items-center gap-4",children:[v("div",{class:"flex items-center gap-1 rounded-xl w-full shadow-2xl",style:{background:"#2B2930",color:"#818181"},children:[isLoading.value&&searchQuery.value?v(loader_2_default,{class:"w-4 h-4 ml-4 mr-2 animate-spin"}):v(search_default,{class:"w-4 h-4 ml-4 mr-2"}),v("input",{type:"text",style:{fontSize:"1.2em"},class:"bg-transparent py-3 w-full",ref:inputRef,value:searchQuery.value,onInput:handleInputChange})]}),v(Checkbox_default,{label:"not-seen",checked:showSeenStatus}),v(Rating,{rating:4})]}),data?.value?.hits?.length&&!isLoading.value?v(SearchResultList,{showEmoji:!type,result:data.value}):isLoading.value?v("div",{}):v("div",{class:"flex items-center gap-2 p-2 my-4 mx-3",style:{color:"#818181"},children:[v(Emoji,{class:"w-8 h-8",name:"Ghost.png"}),"No Results"]})]})},Search_default=Search;export{fetchQueryResource,RedirectSearchHandler,SearchResultItem,SearchResultList,Search_default}; +//# sourceMappingURL=chunk-IJ6I6D4H.js.map diff --git a/_fresh/chunk-IJ6I6D4H.js.map b/_fresh/chunk-IJ6I6D4H.js.map new file mode 100644 index 0000000..ecb5149 --- /dev/null +++ b/_fresh/chunk-IJ6I6D4H.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["lib/hooks/useDebouncedCallback.ts", "components/Checkbox.tsx", "components/Rating.tsx", "components/Image.tsx", "components/Emoji.tsx", "islands/Search.tsx"], + "sourcesContent": ["import { useEffect, useMemo, useRef } from \"preact/hooks\";\n\nexport interface CallOptions {\n /**\n * Controls if the function should be invoked on the leading edge of the timeout.\n */\n leading?: boolean;\n /**\n * Controls if the function should be invoked on the trailing edge of the timeout.\n */\n trailing?: boolean;\n}\n\nexport interface Options extends CallOptions {\n /**\n * The maximum time the given function is allowed to be delayed before it's invoked.\n */\n maxWait?: number;\n}\n\nexport interface ControlFunctions {\n /**\n * Cancel pending function invocations\n */\n cancel: () => void;\n /**\n * Immediately invoke pending function invocations\n */\n flush: () => void;\n /**\n * Returns `true` if there are any pending function invocations\n */\n isPending: () => boolean;\n}\n\n/**\n * Subsequent calls to the debounced function `debounced.callback` return the result of the last func invocation.\n * Note, that if there are no previous invocations it's mean you will get undefined. You should check it in your code properly.\n */\nexport interface DebouncedState ReturnType>\n extends ControlFunctions {\n (...args: Parameters): ReturnType | undefined;\n}\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked, or until the next browser frame is drawn.\n *\n * The debounced function comes with a `cancel` method to cancel delayed `func`\n * invocations and a `flush` method to immediately invoke them.\n *\n * Provide `options` to indicate whether `func` should be invoked on the leading\n * and/or trailing edge of the `wait` timeout. The `func` is invoked with the\n * last arguments provided to the debounced function.\n *\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * If `wait` is omitted in an environment with `requestAnimationFrame`, `func`\n * invocation will be deferred until the next frame is drawn (typically about\n * 16ms).\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `debounce` and `throttle`.\n *\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0]\n * The number of milliseconds to delay; if omitted, `requestAnimationFrame` is\n * used (if available, otherwise it will be setTimeout(...,0)).\n * @param {Object} [options={}] The options object.\n * Controls if `func` should be invoked on the leading edge of the timeout.\n * @param {boolean} [options.leading=false]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {number} [options.maxWait]\n * Controls if `func` should be invoked the trailing edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * const resizeHandler = useDebouncedCallback(calculateLayout, 150);\n * window.addEventListener('resize', resizeHandler)\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * const clickHandler = useDebouncedCallback(sendMail, 300, {\n * leading: true,\n * trailing: false,\n * })\n * \n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * const debounced = useDebouncedCallback(batchLog, 250, { 'maxWait': 1000 })\n * const source = new EventSource('/stream')\n * source.addEventListener('message', debounced)\n *\n * // Cancel the trailing debounced invocation.\n * window.addEventListener('popstate', debounced.cancel)\n *\n * // Check for pending invocations.\n * const status = debounced.pending() ? \"Pending...\" : \"Ready\"\n */\nexport default function useDebouncedCallback<\n T extends (...args: any) => ReturnType,\n>(\n func: T,\n wait?: number,\n options?: Options,\n): DebouncedState {\n const lastCallTime = useRef(null);\n const lastInvokeTime = useRef(0);\n const timerId = useRef(null);\n const lastArgs = useRef([]);\n const lastThis = useRef();\n const result = useRef>();\n const funcRef = useRef(func);\n const mounted = useRef(true);\n\n useEffect(() => {\n funcRef.current = func;\n }, [func]);\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = !wait && wait !== 0 && typeof window !== \"undefined\";\n\n if (typeof func !== \"function\") {\n throw new TypeError(\"Expected a function\");\n }\n\n wait = +wait || 0;\n options = options || {};\n\n const leading = !!options.leading;\n const trailing = \"trailing\" in options ? !!options.trailing : true; // `true` by default\n const maxing = \"maxWait\" in options;\n const maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : null;\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n // You may have a question, why we have so many code under the useMemo definition.\n //\n // This was made as we want to escape from useCallback hell and\n // not to initialize a number of functions each time useDebouncedCallback is called.\n //\n // It means that we have less garbage for our GC calls which improves performance.\n // Also, it makes this library smaller.\n //\n // And the last reason, that the code without lots of useCallback with deps is easier to read.\n // You have only one place for that.\n const debounced = useMemo(() => {\n const invokeFunc = (time: number) => {\n const args = lastArgs.current;\n const thisArg = lastThis.current;\n\n lastArgs.current = lastThis.current = null;\n lastInvokeTime.current = time;\n return (result.current = funcRef.current.apply(thisArg, args));\n };\n\n const startTimer = (pendingFunc: () => void, wait: number) => {\n if (useRAF) cancelAnimationFrame(timerId.current);\n timerId.current = useRAF\n ? requestAnimationFrame(pendingFunc)\n : setTimeout(pendingFunc, wait);\n };\n\n const shouldInvoke = (time: number) => {\n if (!mounted.current) return false;\n\n const timeSinceLastCall = time - lastCallTime.current;\n const timeSinceLastInvoke = time - lastInvokeTime.current;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (\n !lastCallTime.current ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n };\n\n const trailingEdge = (time: number) => {\n timerId.current = null;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs.current) {\n return invokeFunc(time);\n }\n lastArgs.current = lastThis.current = null;\n return result.current;\n };\n\n const timerExpired = () => {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // https://github.com/xnimorz/use-debounce/issues/97\n if (!mounted.current) {\n return;\n }\n // Remaining wait calculation\n const timeSinceLastCall = time - lastCallTime.current;\n const timeSinceLastInvoke = time - lastInvokeTime.current;\n const timeWaiting = wait - timeSinceLastCall;\n const remainingWait = maxing\n ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n\n // Restart the timer\n startTimer(timerExpired, remainingWait);\n };\n\n const func: DebouncedState = (...args: Parameters): ReturnType => {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs.current = args;\n lastThis.current = this;\n lastCallTime.current = time;\n\n if (isInvoking) {\n if (!timerId.current && mounted.current) {\n // Reset any `maxWait` timer.\n lastInvokeTime.current = lastCallTime.current;\n // Start the timer for the trailing edge.\n startTimer(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(lastCallTime.current) : result.current;\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime.current);\n }\n }\n if (!timerId.current) {\n startTimer(timerExpired, wait);\n }\n return result.current;\n };\n\n func.cancel = () => {\n if (timerId.current) {\n useRAF\n ? cancelAnimationFrame(timerId.current)\n : clearTimeout(timerId.current);\n }\n lastInvokeTime.current = 0;\n lastArgs.current =\n lastCallTime.current =\n lastThis.current =\n timerId.current =\n null;\n };\n\n func.isPending = () => {\n return !!timerId.current;\n };\n\n func.flush = () => {\n return !timerId.current ? result.current : trailingEdge(Date.now());\n };\n\n return func;\n }, [leading, maxing, wait, maxWait, trailing, useRAF]);\n\n return debounced;\n}\n\n", "import { Signal, useSignal } from \"@preact/signals\";\nimport { useId, useState } from \"preact/hooks\";\n\ninterface CheckboxProps {\n label: string;\n isChecked?: boolean;\n onChange: (isChecked: boolean) => void;\n}\n\nconst Checkbox2: preact.FunctionalComponent = (\n { label, isChecked = false, onChange },\n) => {\n const [checked, setChecked] = useState(isChecked);\n\n const toggleCheckbox = () => {\n const newChecked = !checked;\n setChecked(newChecked);\n onChange(newChecked);\n };\n\n return (\n \n \n {label}\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst Checkbox = (\n { label, checked = useSignal(false) }: {\n label: string;\n checked?: Signal;\n },\n) => {\n const _id = useId();\n const id = `checkbox-${_id}`;\n return (\n \n {\n checked.value = ev.currentTarget.checked;\n }}\n class=\"bg-gray-200 hover:bg-gray-300 cursor-pointer \n w-5 h-5 border-3 border-amber-500 focus:outline-none rounded-lg\"\n />\n {label}\n \n );\n};\n\nexport default Checkbox;\n", "import { IconStar, IconStarFilled } from \"@components/icons.tsx\";\nimport { useSignal } from \"@preact/signals\";\nimport { useState } from \"preact/hooks\";\n\nexport const SmallRating = (\n { max = 5, rating }: { max?: number; rating: number },\n) => {\n return (\n \n {Array.from({ length: max }).map((_, i) => {\n return (\n \n {(i + 1) <= rating\n ? \n : }\n \n );\n })}\n \n );\n};\n\nexport const Rating = (\n props: { max?: number; rating: number },\n) => {\n const [rating, setRating] = useState(props.rating);\n const [hover, setHover] = useState(0);\n const max = useSignal(props.max || 5);\n\n return (\n \n {Array.from({ length: max.value }).map((_, i) => {\n return (\n setHover(i + 1)}\n onClick={() => setRating(i + 1)}\n >\n {(i + 1) <= rating || (i + 1) <= hover\n ? \n : }\n \n );\n })}\n \n );\n};\n", "import { asset } from \"$fresh/runtime.ts\";\nimport * as CSS from \"https://esm.sh/csstype@3.1.2\";\nimport { isLocalImage } from \"@lib/string.ts\";\n\ninterface ResponsiveAttributes {\n srcset: string;\n sizes: string;\n}\n\nfunction generateResponsiveAttributes(\n imageUrl: string,\n widths: number[],\n baseApiUrl: string,\n sizes = \"100vw\",\n): ResponsiveAttributes {\n const srcsets: string[] = [];\n\n for (const width of widths) {\n const apiUrl = `${baseApiUrl}?image=${imageUrl}&width=${width}`;\n srcsets.push(`${apiUrl} ${width}w`);\n }\n\n const srcset = srcsets.join(\", \");\n\n return {\n srcset,\n sizes,\n };\n}\n\nconst widths = [320, 640, 960, 1280]; // List of widths for srcset\n\nconst Image = (\n props: {\n class: string;\n src: string;\n alt?: string;\n thumbnail?: string;\n fill?: boolean;\n width?: number | string;\n height?: number | string;\n style?: CSS.HtmlAttributes;\n },\n) => {\n const responsiveAttributes: ResponsiveAttributes = isLocalImage(props.src)\n ? generateResponsiveAttributes(props.src, widths, \"/api/images\")\n : { srcset: \"\", sizes: \"\" };\n\n return (\n \n \n \n );\n};\n\nexport default Image;\n", "import { asset } from \"$fresh/runtime.ts\";\n\nexport const Emoji = (props: { class?: string; name: string }) => {\n return props.name\n ? props.name.endsWith(\".png\")\n ? (\n \n )\n : {props.name}\n : <>;\n};\n", "import { useEffect, useRef } from \"preact/hooks\";\nimport useDebouncedCallback from \"@lib/hooks/useDebouncedCallback.ts\";\nimport { IconLoader2, IconSearch } from \"@components/icons.tsx\";\nimport { useEventListener } from \"@lib/hooks/useEventListener.ts\";\nimport { SearchResult } from \"@lib/types.ts\";\nimport { resources } from \"@lib/resources.ts\";\nimport { getCookie, isLocalImage } from \"@lib/string.ts\";\nimport { IS_BROWSER } from \"$fresh/runtime.ts\";\nimport Checkbox from \"@components/Checkbox.tsx\";\nimport { Rating } from \"@components/Rating.tsx\";\nimport { useSignal } from \"@preact/signals\";\nimport Image from \"@components/Image.tsx\";\nimport { Emoji } from \"@components/Emoji.tsx\";\n\nexport async function fetchQueryResource(url: URL, type = \"\") {\n const query = url.searchParams.get(\"q\");\n const status = url.searchParams.get(\"status\");\n\n try {\n url.pathname = \"/api/resources\";\n url.searchParams.set(\"q\", encodeURIComponent(query || \"*\"));\n if (status) {\n url.searchParams.set(\"status\", \"not-seen\");\n }\n if (type) {\n url.searchParams.set(\"type\", type);\n }\n const response = await fetch(url);\n const jsonData = await response.json();\n return jsonData;\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n}\n\nexport const RedirectSearchHandler = () => {\n if (getCookie(\"session_cookie\")) {\n useEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e?.target?.nodeName == \"INPUT\") return;\n if (\n e.key === \"?\" &&\n window.location.search === \"\"\n ) {\n window.location.href += \"?q=*\";\n }\n }, IS_BROWSER ? document?.body : undefined);\n }\n\n return <>;\n};\n\nconst SearchResultImage = ({ src }: { src: string }) => {\n const imageSrc = isLocalImage(src)\n ? `/api/images?image=${src}&width=50&height=50`\n : src;\n\n return (\n \n );\n};\n\nexport const SearchResultItem = (\n { item, showEmoji = false }: {\n item: NonNullable[number];\n showEmoji?: boolean;\n },\n) => {\n const doc = item.document;\n const resourceType = resources[doc.type];\n const href = (resourceType) ? `${resourceType.link}/${doc.id}` : \"\";\n return (\n \n {showEmoji && resourceType\n ? \n : \"\"}\n {doc?.image && }\n {doc?.name}\n \n );\n};\n\nexport const SearchResultList = (\n { result, showEmoji }: { result: SearchResult; showEmoji?: boolean },\n) => {\n return (\n
\n {result?.hits\n ? (\n
\n {result.hits.map((hit) => (\n \n ))}\n
\n )\n :
No Results
}\n
\n );\n};\n\nconst Search = (\n { q = \"*\", type, results }: {\n q: string;\n type?: string;\n results?: SearchResult;\n },\n) => {\n const searchQuery = useSignal(q);\n const data = useSignal(results);\n const isLoading = useSignal(false);\n const showSeenStatus = useSignal(false);\n const inputRef = useRef(null);\n\n if (\"history\" in globalThis) {\n const u = new URL(window.location.href);\n if (u.searchParams.get(\"q\") !== searchQuery.value) {\n u.searchParams.set(\"q\", searchQuery.value);\n }\n if (showSeenStatus.value) {\n u.searchParams.set(\"rating\", \"0\");\n } else {\n u.searchParams.delete(\"rating\");\n }\n\n window.history.replaceState({}, \"\", u);\n }\n\n const fetchData = async () => {\n try {\n isLoading.value = true;\n const jsonData = await fetchQueryResource(\n new URL(window?.location.href),\n type,\n );\n data.value = jsonData;\n isLoading.value = false;\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n isLoading.value = false;\n }\n };\n const debouncedFetchData = useDebouncedCallback(fetchData, 500); // Debounce the fetchData function with a delay of 500ms\n\n useEffect(() => {\n if (inputRef.current && searchQuery?.value.length === 0) {\n inputRef.current?.focus();\n }\n }, [inputRef.current, searchQuery]);\n\n const handleInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (target.value !== searchQuery.value) {\n searchQuery.value = target.value;\n }\n };\n\n useEffect(() => {\n debouncedFetchData(); // Call the debounced fetch function with the updated search query\n }, [searchQuery.value, showSeenStatus.value]);\n\n useEffect(() => {\n debouncedFetchData();\n }, []);\n\n return (\n
\n
\n \n {isLoading.value && searchQuery.value\n ? \n : }\n \n
\n \n \n \n {data?.value?.hits?.length && !isLoading.value\n ? \n : isLoading.value\n ?
\n : (\n \n \n No Results\n
\n )}\n \n );\n};\n\nexport default Search;\n"], + "mappings": "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", + "names": ["wait", "func", "k", "k", "widths", "k"] +} diff --git a/_fresh/chunk-P55SGJLG.js b/_fresh/chunk-P55SGJLG.js new file mode 100644 index 0000000..309934a --- /dev/null +++ b/_fresh/chunk-P55SGJLG.js @@ -0,0 +1,2 @@ +var BUILD_ID="c255b724e165fd67c294f69a9c9a2095d635994b";var ASSET_CACHE_BUST_KEY="__frsh_c",IS_BROWSER=typeof document<"u";function asset(path){if(!path.startsWith("/")||path.startsWith("//"))return path;try{let url=new URL(path,"https://freshassetcache.local");return url.protocol!=="https:"||url.host!=="freshassetcache.local"||url.searchParams.has(ASSET_CACHE_BUST_KEY)?path:(url.searchParams.set(ASSET_CACHE_BUST_KEY,BUILD_ID),url.pathname+url.search+url.hash)}catch(err){return console.warn(`Failed to create asset() URL, falling back to regular path ('${path}'):`,err),path}}function assetSrcSet(srcset){if(srcset.includes("("))return srcset;let parts=srcset.split(","),constructed=[];for(let part of parts){let trimmed=part.trimStart(),leadingWhitespace=part.length-trimmed.length;if(trimmed==="")return srcset;let urlEnd=trimmed.indexOf(" ");urlEnd===-1&&(urlEnd=trimmed.length);let leading=part.substring(0,leadingWhitespace),url=trimmed.substring(0,urlEnd),trailing=trimmed.substring(urlEnd);constructed.push(leading+asset(url)+trailing)}return constructed.join(",")}function assetHashingHook(vnode){if(vnode.type==="img"||vnode.type==="source"){let{props}=vnode;if(props["data-fresh-disable-lock"])return;typeof props.src=="string"&&(props.src=asset(props.src)),typeof props.srcset=="string"&&(props.srcset=assetSrcSet(props.srcset))}}export{IS_BROWSER,asset,assetHashingHook}; +//# sourceMappingURL=chunk-P55SGJLG.js.map diff --git a/_fresh/chunk-P55SGJLG.js.map b/_fresh/chunk-P55SGJLG.js.map new file mode 100644 index 0000000..4e5198f --- /dev/null +++ b/_fresh/chunk-P55SGJLG.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["https://deno.land/x/fresh@1.4.2/src/runtime/build_id.ts", "https://deno.land/x/fresh@1.4.2/src/runtime/utils.ts"], + "sourcesContent": ["export const BUILD_ID = \"c255b724e165fd67c294f69a9c9a2095d635994b\";", "import { VNode } from \"preact\";\nimport { BUILD_ID } from \"./build_id.ts\";\n\nexport const INTERNAL_PREFIX = \"/_frsh\";\nexport const ASSET_CACHE_BUST_KEY = \"__frsh_c\";\n\nexport const IS_BROWSER = typeof document !== \"undefined\";\n\n/**\n * Create a \"locked\" asset path. This differs from a plain path in that it is\n * specific to the current version of the application, and as such can be safely\n * served with a very long cache lifetime (1 year).\n */\nexport function asset(path: string): string {\n if (!path.startsWith(\"/\") || path.startsWith(\"//\")) return path;\n try {\n const url = new URL(path, \"https://freshassetcache.local\");\n if (\n url.protocol !== \"https:\" || url.host !== \"freshassetcache.local\" ||\n url.searchParams.has(ASSET_CACHE_BUST_KEY)\n ) {\n return path;\n }\n url.searchParams.set(ASSET_CACHE_BUST_KEY, BUILD_ID);\n return url.pathname + url.search + url.hash;\n } catch (err) {\n console.warn(\n `Failed to create asset() URL, falling back to regular path ('${path}'):`,\n err,\n );\n return path;\n }\n}\n\n/** Apply the `asset` function to urls in a `srcset` attribute. */\nexport function assetSrcSet(srcset: string): string {\n if (srcset.includes(\"(\")) return srcset; // Bail if the srcset contains complicated syntax.\n const parts = srcset.split(\",\");\n const constructed = [];\n for (const part of parts) {\n const trimmed = part.trimStart();\n const leadingWhitespace = part.length - trimmed.length;\n if (trimmed === \"\") return srcset; // Bail if the srcset is malformed.\n let urlEnd = trimmed.indexOf(\" \");\n if (urlEnd === -1) urlEnd = trimmed.length;\n const leading = part.substring(0, leadingWhitespace);\n const url = trimmed.substring(0, urlEnd);\n const trailing = trimmed.substring(urlEnd);\n constructed.push(leading + asset(url) + trailing);\n }\n return constructed.join(\",\");\n}\n\nexport function assetHashingHook(\n vnode: VNode<{\n src?: string;\n srcset?: string;\n [\"data-fresh-disable-lock\"]?: boolean;\n }>,\n) {\n if (vnode.type === \"img\" || vnode.type === \"source\") {\n const { props } = vnode;\n if (props[\"data-fresh-disable-lock\"]) return;\n if (typeof props.src === \"string\") {\n props.src = asset(props.src);\n }\n if (typeof props.srcset === \"string\") {\n props.srcset = assetSrcSet(props.srcset);\n }\n }\n}\n"], + "mappings": "AAAO,IAAM,SAAW,2CCIjB,IAAM,qBAAuB,WAEvB,WAAa,OAAO,SAAa,IAOvC,SAAS,MAAM,KAAsB,CAC1C,GAAI,CAAC,KAAK,WAAW,GAAG,GAAK,KAAK,WAAW,IAAI,EAAG,OAAO,KAC3D,GAAI,CACF,IAAM,IAAM,IAAI,IAAI,KAAM,+BAA+B,EACzD,OACE,IAAI,WAAa,UAAY,IAAI,OAAS,yBAC1C,IAAI,aAAa,IAAI,oBAAoB,EAElC,MAET,IAAI,aAAa,IAAI,qBAAsB,QAAQ,EAC5C,IAAI,SAAW,IAAI,OAAS,IAAI,KACzC,OAAS,IAAK,CACZ,eAAQ,KACN,gEAAgE,IAAI,MACpE,GACF,EACO,IACT,CACF,CAGO,SAAS,YAAY,OAAwB,CAClD,GAAI,OAAO,SAAS,GAAG,EAAG,OAAO,OACjC,IAAM,MAAQ,OAAO,MAAM,GAAG,EACxB,YAAc,CAAC,EACrB,QAAW,QAAQ,MAAO,CACxB,IAAM,QAAU,KAAK,UAAU,EACzB,kBAAoB,KAAK,OAAS,QAAQ,OAChD,GAAI,UAAY,GAAI,OAAO,OAC3B,IAAI,OAAS,QAAQ,QAAQ,GAAG,EAC5B,SAAW,KAAI,OAAS,QAAQ,QACpC,IAAM,QAAU,KAAK,UAAU,EAAG,iBAAiB,EAC7C,IAAM,QAAQ,UAAU,EAAG,MAAM,EACjC,SAAW,QAAQ,UAAU,MAAM,EACzC,YAAY,KAAK,QAAU,MAAM,GAAG,EAAI,QAAQ,CAClD,CACA,OAAO,YAAY,KAAK,GAAG,CAC7B,CAEO,SAAS,iBACd,MAKA,CACA,GAAI,MAAM,OAAS,OAAS,MAAM,OAAS,SAAU,CACnD,GAAM,CAAE,KAAM,EAAI,MAClB,GAAI,MAAM,yBAAyB,EAAG,OAClC,OAAO,MAAM,KAAQ,WACvB,MAAM,IAAM,MAAM,MAAM,GAAG,GAEzB,OAAO,MAAM,QAAW,WAC1B,MAAM,OAAS,YAAY,MAAM,MAAM,EAE3C,CACF", + "names": [] +} diff --git a/_fresh/chunk-PE2ZHJ3V.js b/_fresh/chunk-PE2ZHJ3V.js new file mode 100644 index 0000000..6ce42dc --- /dev/null +++ b/_fresh/chunk-PE2ZHJ3V.js @@ -0,0 +1,2 @@ +import{v}from"./chunk-CUT5GMLI.js";import{he}from"./chunk-YC2TUGGU.js";import{__export}from"./chunk-UK35T4TJ.js";var HEAD_CONTEXT=he([]);var CSP_CONTEXT=he(void 0);function IconCirclePlus({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-circle-plus",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"}),v("path",{d:"M9 12l6 0"}),v("path",{d:"M12 9l0 6"})]})}var circle_plus_default=IconCirclePlus;function IconCircleMinus({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-circle-minus",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"}),v("path",{d:"M9 12l6 0"})]})}var circle_minus_default=IconCircleMinus;function IconLoader2({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-loader-2",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M12 3a9 9 0 1 0 9 9"})]})}var loader_2_default=IconLoader2;function IconSearch({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-search",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"}),v("path",{d:"M21 21l-6 -6"})]})}var search_default=IconSearch;var icons_exports={};__export(icons_exports,{IconArrowLeft:()=>arrow_left_default,IconArrowNarrowLeft:()=>arrow_narrow_left_default,IconBrandYoutube:()=>brand_youtube_default,IconCircleMinus:()=>circle_minus_default,IconCirclePlus:()=>circle_plus_default,IconEdit:()=>edit_default,IconError404:()=>error_404_default,IconExternalLink:()=>external_link_default,IconGhost:()=>ghost_default,IconLoader2:()=>loader_2_default,IconLogin:()=>login_default,IconLogout:()=>logout_default,IconRefresh:()=>refresh_default,IconReportSearch:()=>report_search_default,IconSearch:()=>search_default,IconSquareRoundedPlus:()=>square_rounded_plus_default,IconStar:()=>star_default,IconStarFilled:()=>star_filled_default});function IconStar({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-star",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z"})]})}var star_default=IconStar;function IconStarFilled({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-star-filled",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z",strokeWidth:0,fill:"currentColor"})]})}var star_filled_default=IconStarFilled;function IconExternalLink({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-external-link",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M11 7h-5a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-5"}),v("path",{d:"M10 14l10 -10"}),v("path",{d:"M15 4l5 0l0 5"})]})}var external_link_default=IconExternalLink;function IconArrowNarrowLeft({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-arrow-narrow-left",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M5 12l14 0"}),v("path",{d:"M5 12l4 4"}),v("path",{d:"M5 12l4 -4"})]})}var arrow_narrow_left_default=IconArrowNarrowLeft;function IconEdit({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-edit",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1"}),v("path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z"}),v("path",{d:"M16 5l3 3"})]})}var edit_default=IconEdit;function IconArrowLeft({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-arrow-left",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M5 12l14 0"}),v("path",{d:"M5 12l6 6"}),v("path",{d:"M5 12l6 -6"})]})}var arrow_left_default=IconArrowLeft;function IconError404({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-error-404",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M3 7v4a1 1 0 0 0 1 1h3"}),v("path",{d:"M7 7v10"}),v("path",{d:"M10 8v8a1 1 0 0 0 1 1h2a1 1 0 0 0 1 -1v-8a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1z"}),v("path",{d:"M17 7v4a1 1 0 0 0 1 1h3"}),v("path",{d:"M21 7v10"})]})}var error_404_default=IconError404;function IconSquareRoundedPlus({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-square-rounded-plus",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M9 12h6"}),v("path",{d:"M12 9v6"}),v("path",{d:"M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z"})]})}var square_rounded_plus_default=IconSquareRoundedPlus;function IconReportSearch({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-report-search",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M8 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h5.697"}),v("path",{d:"M18 12v-5a2 2 0 0 0 -2 -2h-2"}),v("path",{d:"M8 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z"}),v("path",{d:"M8 11h4"}),v("path",{d:"M8 15h3"}),v("path",{d:"M16.5 17.5m-2.5 0a2.5 2.5 0 1 0 5 0a2.5 2.5 0 1 0 -5 0"}),v("path",{d:"M18.5 19.5l2.5 2.5"})]})}var report_search_default=IconReportSearch;function IconRefresh({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-refresh",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4"}),v("path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"})]})}var refresh_default=IconRefresh;function IconLogin({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-login",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"}),v("path",{d:"M20 12h-13l3 -3m0 6l-3 -3"})]})}var login_default=IconLogin;function IconLogout({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-logout",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"}),v("path",{d:"M7 12h14l-3 -3m0 6l3 -3"})]})}var logout_default=IconLogout;function IconGhost({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-ghost",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M5 11a7 7 0 0 1 14 0v7a1.78 1.78 0 0 1 -3.1 1.4a1.65 1.65 0 0 0 -2.6 0a1.65 1.65 0 0 1 -2.6 0a1.65 1.65 0 0 0 -2.6 0a1.78 1.78 0 0 1 -3.1 -1.4v-7"}),v("path",{d:"M10 10l.01 0"}),v("path",{d:"M14 10l.01 0"}),v("path",{d:"M10 14a3.5 3.5 0 0 0 4 0"})]})}var ghost_default=IconGhost;function IconBrandYoutube({size=24,color="currentColor",stroke=2,...props}){return v("svg",{xmlns:"http://www.w3.org/2000/svg",class:"icon icon-tabler icon-tabler-brand-youtube",width:size,height:size,viewBox:"0 0 24 24","stroke-width":stroke,stroke:color,fill:"none","stroke-linecap":"round","stroke-linejoin":"round",...props,children:[v("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),v("path",{d:"M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z"}),v("path",{d:"M10 9l5 3l-5 3z"})]})}var brand_youtube_default=IconBrandYoutube;export{star_default,star_filled_default,circle_plus_default,circle_minus_default,loader_2_default,search_default,icons_exports}; +//# sourceMappingURL=chunk-PE2ZHJ3V.js.map diff --git a/_fresh/chunk-PE2ZHJ3V.js.map b/_fresh/chunk-PE2ZHJ3V.js.map new file mode 100644 index 0000000..8e23686 --- /dev/null +++ b/_fresh/chunk-PE2ZHJ3V.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["https://deno.land/x/fresh@1.4.2/src/runtime/head.ts", "https://deno.land/x/fresh@1.4.2/src/runtime/csp.ts", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/circle-plus.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/circle-minus.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/loader-2.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/search.tsx", "components/icons.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/star.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/star-filled.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/external-link.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/arrow-narrow-left.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/edit.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/arrow-left.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/error-404.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/square-rounded-plus.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/report-search.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/refresh.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/login.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/logout.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/ghost.tsx", "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/brand-youtube.tsx"], + "sourcesContent": ["import { ComponentChildren, createContext } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\nexport interface HeadProps {\n children: ComponentChildren;\n}\n\nexport const HEAD_CONTEXT = createContext([]);\n\nexport function Head(props: HeadProps) {\n let context: ComponentChildren[];\n try {\n context = useContext(HEAD_CONTEXT);\n } catch (err) {\n throw new Error(\n \" component is not supported in the browser, or during suspense renders.\",\n { cause: err },\n );\n }\n context.push(props.children);\n return null;\n}\n", "import { createContext } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\nexport const SELF = \"'self'\";\nexport const UNSAFE_INLINE = \"'unsafe-inline'\";\nexport const UNSAFE_EVAL = \"'unsafe-eval'\";\nexport const UNSAFE_HASHES = \"'unsafe-hashes'\";\nexport const NONE = \"'none'\";\nexport const STRICT_DYNAMIC = \"'strict-dynamic'\";\n\nexport function nonce(val: string) {\n return `'nonce-${val}'`;\n}\n\nexport interface ContentSecurityPolicy {\n directives: ContentSecurityPolicyDirectives;\n reportOnly: boolean;\n}\n\nexport interface ContentSecurityPolicyDirectives {\n // Fetch directives\n /**\n * Defines the valid sources for web workers and nested browsing contexts\n * loaded using elements such as and