create-gardener 2.1.6 → 2.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/package.json +1 -1
  2. package/template/.env +1 -1
  3. package/template/build/backend/controllers/gardener/addComponent.d.ts +8 -0
  4. package/template/build/backend/controllers/gardener/addComponent.d.ts.map +1 -0
  5. package/template/build/backend/controllers/gardener/addComponent.js +19 -0
  6. package/template/build/backend/controllers/gardener/addComponent.js.map +1 -0
  7. package/template/build/backend/controllers/gardener/addPage.d.ts +3 -0
  8. package/template/build/backend/controllers/gardener/addPage.d.ts.map +1 -0
  9. package/template/build/backend/controllers/gardener/addPage.js +86 -0
  10. package/template/build/backend/controllers/gardener/addPage.js.map +1 -0
  11. package/template/build/backend/controllers/gardener/createStatic.d.ts +2 -0
  12. package/template/build/backend/controllers/gardener/createStatic.d.ts.map +1 -0
  13. package/template/build/backend/controllers/gardener/createStatic.js +83 -0
  14. package/template/build/backend/controllers/gardener/createStatic.js.map +1 -0
  15. package/template/build/backend/controllers/gardener/hotReload.d.ts +3 -0
  16. package/template/build/backend/controllers/gardener/hotReload.d.ts.map +1 -0
  17. package/template/build/backend/controllers/gardener/hotReload.js +29 -0
  18. package/template/build/backend/controllers/gardener/hotReload.js.map +1 -0
  19. package/template/build/backend/controllers/gardener/imageOptimiser.d.ts +3 -0
  20. package/template/build/backend/controllers/gardener/imageOptimiser.d.ts.map +1 -0
  21. package/template/build/backend/controllers/gardener/imageOptimiser.js +123 -0
  22. package/template/build/backend/controllers/gardener/imageOptimiser.js.map +1 -0
  23. package/template/build/backend/controllers/gardener/index.d.ts +6 -0
  24. package/template/build/backend/controllers/gardener/index.d.ts.map +1 -0
  25. package/template/build/backend/controllers/gardener/index.js +6 -0
  26. package/template/build/backend/controllers/gardener/index.js.map +1 -0
  27. package/template/build/backend/controllers/gardener/saveTemplate.d.ts +3 -0
  28. package/template/build/backend/controllers/gardener/saveTemplate.d.ts.map +1 -0
  29. package/template/build/backend/controllers/gardener/saveTemplate.js +36 -0
  30. package/template/build/backend/controllers/gardener/saveTemplate.js.map +1 -0
  31. package/template/build/backend/libs/generateWebp.d.ts +2 -0
  32. package/template/build/backend/libs/generateWebp.d.ts.map +1 -0
  33. package/template/build/backend/libs/generateWebp.js +16 -0
  34. package/template/build/backend/libs/generateWebp.js.map +1 -0
  35. package/template/build/backend/routes/gardener.route.d.ts +4 -0
  36. package/template/build/backend/routes/gardener.route.d.ts.map +1 -0
  37. package/template/build/backend/routes/gardener.route.js +13 -0
  38. package/template/build/backend/routes/gardener.route.js.map +1 -0
  39. package/template/build/backend/server.d.ts +2 -0
  40. package/template/build/backend/server.d.ts.map +1 -0
  41. package/template/build/backend/server.js +26 -0
  42. package/template/build/backend/server.js.map +1 -0
  43. package/template/build/frontend/assets/favicon.png +0 -0
  44. package/template/build/frontend/assets/gardener.jpg +0 -0
  45. package/template/build/frontend/assets/remote/betterway.jpg +0 -0
  46. package/template/build/frontend/static/bundle/bundle._.js +1 -0
  47. package/template/build/frontend/static/cache/favicon_50x50.webp +0 -0
  48. package/template/build/frontend/static/cache/gardener_50x50.webp +0 -0
  49. package/template/build/frontend/static/style.css +2 -0
  50. package/template/build/frontend/static/style2.css +26 -0
  51. package/template/build/frontend/tailwind.css +1 -0
  52. package/template/build/frontend/views/_.ejs +137 -0
  53. package/template/build/frontend/views/partials/icons/clipboard.ejs +1 -0
  54. package/template/build/frontend/views/partials/icons/clipboardok.ejs +1 -0
  55. package/template/buildHelper.js +5 -5
  56. package/template/src/backend/server.ts +5 -4
  57. package/template/src/frontend/static/cache/betterway_200x200.webp +0 -0
  58. package/template/src/frontend/static/cache/favicon_50x50.webp +0 -0
  59. package/template/src/frontend/static/gardenerConfig.js +5 -1
  60. package/template/src/frontend/static/style.css +1093 -1
  61. package/template/src/frontend/tailwind.css +1 -1
  62. package/template/src/frontend/template/template._.ejs +101 -89
  63. package/template/src/frontend/views/_.ejs +1 -1
  64. package/template/src/frontend/style.css +0 -1045
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/backend/server.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AACvB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAEtD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAGtB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;AAE7D,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAClD,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAMjC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACxB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAGvB,GAAG,CAAC,GAAG,CAAC,CAAC,GAA+B,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC3F,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACjC,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,uBAAuB;KAChD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AAEtC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ var N=n("body");function d(t){a(N,i({t:"div",cn:["fixed","top-1/2","left-1/2","-translate-x-1/2","-translate-y-1/2","w-11/12","max-w-md","bg-white","text-gray-800","shadow-2xl","border-l-8","border-red-600","rounded-r-lg","z-[100]","p-0","overflow-hidden"],children:[{t:"div",cn:["bg-red-50","p-4","flex","items-center","gap-3"],children:[{t:"h2",cn:["text-red-700","font-bold","text-lg","uppercase","tracking-wider"],txt:"\u26A0\uFE0F System Error"}]},{t:"div",cn:["p-6","bg-white"],children:[{t:"p",cn:["font-mono","text-sm","bg-gray-100","p-3","rounded","border","border-gray-200","break-words"],txt:t},{t:"button",cn:["mt-4","w-full","py-2","bg-gray-800","text-white","rounded","hover:bg-black","transition-colors","cursor-pointer"],txt:"Dismiss",events:{click:e=>e.target.closest(".fixed").remove()}}]}]}))}function n(t){let e=document.querySelector(t);return e||console.warn(`Element not found: ${t}`),e}function a(t,e){try{if(typeof t=="string"&&(t=n(t)),!t)throw new Error("Parent element is null or undefined");if(!e)throw new Error("Child element is null or undefined");t.appendChild(e)}catch(r){d(r)}}function k(t,e){try{if(!t)throw new Error("Element type is required");let r=document.createElement(t);return e&&r.classList.add(...e),r}catch(r){return d(r),null}}function O(t,e){if(!t){console.warn("insertText: Element is null or undefined");return}t.textContent=e}function f(t,e){try{if(typeof t=="string"&&(t=n(t)),!t)throw new Error("Original element is null or undefined");if(!e)throw new Error("New element is null or undefined");t.replaceWith(e)}catch(r){d(r)}}function i(t){try{if(!t)throw new Error("DOM configuration is null or undefined");if(t.nodeType===1)return t;if(!t.t)throw new Error("Element type (t) is required in DOM configuration");let e=["svg","path","circle","rect","line","polygon","polyline","g","defs","clipPath","use"].includes(t.t),r;if(e?(r=document.createElementNS("http://www.w3.org/2000/svg",t.t),t.cn&&r.classList.add(...t.cn)):r=k(t.t,t.cn),!r)throw new Error(`Failed to create element: ${t.t}`);t.txt&&O(r,t.txt);let s=new Set(["value","selected","muted","disabled","selectedIndex","volume"]);if(t.attr)for(let[o,c]of Object.entries(t.attr))try{if(e||o.startsWith("data-")||o.startsWith("aria-"))r.setAttribute(o,c);else if(o in r&&!s.has(o))try{r[o]=c===""?!0:c}catch{r.setAttribute(o,c)}else r.setAttribute(o,c)}catch(p){console.warn(`Failed to set attribute ${o}:`,p)}return t.events&&Object.entries(t.events).forEach(([o,c])=>{try{if(typeof c!="function")throw new Error(`Event handler for '${o}' must be a function`);r.addEventListener(o,c)}catch(p){console.warn(`Failed to add event listener ${o}:`,p)}}),t.children&&t.children.forEach(o=>{try{a(r,i(o))}catch(c){console.warn("Failed to append child:",c)}}),r}catch(e){return d(e),null}}var u=n("#node_env").innerText==="production"?"prod":"dev";console.log(u);var h=n("#main");function b(){document.querySelectorAll("a").forEach(e=>{e.addEventListener("click",r=>{r.preventDefault(),j(e.href)})}),window.addEventListener("pagehide",()=>{setTimeout(()=>{h.style.transform="translateX(0px)",setTimeout(()=>{try{n(".tempnpdiv").remove()}catch{}},200)},200)})}function j(t){a(h,i({t:"div",cn:["tempnpdiv","top-0","left-[100vw]","fixed","h-screen","w-screen"]}));let e=window.innerWidth;console.log(e),h.style.transition=".2s",h.style.transform=`translateX(-${e}px)`,setTimeout(()=>{window.location.href=t},200)}function w(){let t=n(".loader");t.style.transition=".4s",t.style.opacity="0",u!=="dev"?setTimeout(()=>t.remove(),400):t.remove()}w();b();function l(t){console.log("clicked"),f(n(".notification"),S(t))}function S(t){return t?i({t:"div",cn:["notification","fixed","top-[-60px]","left-0","md:left-auto","md:right-[60px]","right-0","z-50","flex","justify-center","min-w-100","px-4","box-border"],children:[{t:"div",cn:["flex","items-center","w-full","max-w-sm","p-4","rounded-2xl","shadow-xl","text-white","backdrop-blur-md","bg-opacity-95",{success:"bg-[#2e7d32]",warning:"bg-[#ed6c02]",failure:"bg-[#d32f2f]"}[t.status]],children:[{t:"div",cn:["flex-1","text-sm","font-medium","tracking-wide"],txt:t.message}]}]}):null}function m(){return i({t:"button",events:{click:()=>{try{navigator.clipboard.writeText(n(".initCommand").innerText),f(".copybtn",m()),l({status:"success",message:"Copied"})}catch{l({status:"failure",message:"Couldn't Copy"})}}},cn:["copybtn","flex","items-center","justify-center","p-2","text-gray-400","hover:text-white","hover:bg-white/10","rounded","transition-all","duration-200","active:scale-95"],children:[{t:"span",cn:["w-5","h-5"],children:[{t:"svg",cn:["icon","icon-tabler","icons-tabler-outline","icon-tabler-clipboard-check"],attr:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},children:[{t:"path",attr:{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}},{t:"path",attr:{d:"M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2"}},{t:"path",attr:{d:"M9 5a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2"}},{t:"path",attr:{d:"M9 14l2 2l4 -4"}}]}]}]})}var $=n("body");function E(t=!0){if(t){let e=i({t:"form",cn:["addpageform","fixed","left-2/5","bg-gray-200","rounded-lg","block","top-2/5","p-2","flex","flex-col","p-5","gap-2"],events:{submit:async r=>{try{r.preventDefault();let s=new FormData(r.target),o=Object.fromEntries(s.entries()),c=await fetch("/addpage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}).then(p=>p.json());E(!1),window.location.href=`${o.page}`}catch(s){console.log(s)}}},children:[{t:"label",txt:"ENTER PATH FOR NEW PAGE"},{t:"input",attr:{name:"page"},cn:["pathinput"]}]});a($,e),n(".pathinput").focus()}else n(".addpageform").remove()}var y=i({t:"div",cn:["fixed","bottom-20","right-4","flex","flex-col","gap-2","bg-white","shadow-lg","rounded-xl","p-3","z-50"],children:[{t:"button",cn:["px-4","py-2","bg-blue-500","text-white","rounded-lg","hover:bg-blue-600","transition"],children:[{t:"span",txt:"New Page"}],events:{click:E}},{t:"button",cn:["px-4","py-2","bg-gray-800","text-white","rounded-lg","hover:bg-gray-900","transition"],children:[{t:"span",txt:"Save Template"}],events:{click:async()=>{let e=await(await fetch("/savetemplate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:n("#fileName").innerText})})).json();alert(e.message)}}}]}),g=i({t:"div",cn:["fixed","bottom-4","right-4","z-50"],events:{mouseenter:()=>a(g,y),mouseleave:()=>y.remove()},children:[{t:"span",cn:["flex","items-center","justify-center","h-14","w-14","bg-black","text-white","fixed","bottom-22","right-2","rounded-full","shadow-lg","cursor-pointer"],txt:"GR"}]});var Z=n("body");var L="/__gardener/hot-reload",x=null;async function v(){try{let t=await fetch(L);if(!t.ok)return;let{version:e}=await t.json();if(x===null){x=e;return}e!==x&&window.location.reload()}catch{}}function T(){v(),setInterval(v,500)}var P=n("body");u==="dev"&&(a(P,g),T());function C(t,e,r){try{typeof t=="string"&&(t=n(t)),t.addEventListener(e,r)}catch(s){d(`addElError: ${s}`)}}C(".copybtn","click",()=>{try{navigator.clipboard.writeText(n(".initCommand").innerText),f(".copybtn",m()),l({status:"success",message:"Copied"})}catch{l({status:"failure",message:"Couldn't Copy"})}});
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-300:oklch(80.8% .114 19.571);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-400:oklch(76.5% .177 163.223);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-5xl:64rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.static{position:static}.start{inset-inline-start:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-2\/5{top:40%}.top-\[-60px\]{top:-60px}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-20{bottom:calc(var(--spacing) * 20)}.bottom-22{bottom:calc(var(--spacing) * 22)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-1\/4{left:25%}.left-2\/5{left:40%}.left-\[100vw\]{left:100vw}.z-2{z-index:2}.z-50{z-index:50}.z-90{z-index:90}.z-\[100\]{z-index:100}.m-2{margin:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.my-10{margin-block:calc(var(--spacing) * 10)}.my-15{margin-block:calc(var(--spacing) * 15)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-10{margin-left:calc(var(--spacing) * 10)}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.h-2\/4{height:50%}.h-5{height:calc(var(--spacing) * 5)}.h-14{height:calc(var(--spacing) * 14)}.h-15{height:calc(var(--spacing) * 15)}.h-96{height:calc(var(--spacing) * 96)}.h-screen{height:100vh}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-5{width:calc(var(--spacing) * 5)}.w-11\/12{width:91.6667%}.w-14{width:calc(var(--spacing) * 14)}.w-15{width:calc(var(--spacing) * 15)}.w-96{width:calc(var(--spacing) * 96)}.w-200{width:calc(var(--spacing) * 200)}.w-full{width:100%}.w-screen{width:100vw}.max-w-5xl{max-width:var(--container-5xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-100{min-width:calc(var(--spacing) * 100)}.flex-1{flex:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-12{gap:calc(var(--spacing) * 12)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-l-8{border-left-style:var(--tw-border-style);border-left-width:8px}.border-black{border-color:var(--color-black)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-700{border-color:var(--color-gray-700)}.border-green-100{border-color:var(--color-green-100)}.border-green-500{border-color:var(--color-green-500)}.border-green-700{border-color:var(--color-green-700)}.border-red-600{border-color:var(--color-red-600)}.border-slate-700{border-color:var(--color-slate-700)}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#2e7d32\]{background-color:#2e7d32}.bg-\[\#d32f2f\]{background-color:#d32f2f}.bg-\[\#ed6c02\]{background-color:#ed6c02}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-700{background-color:var(--color-green-700)}.bg-green-900{background-color:var(--color-green-900)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-300{background-color:var(--color-red-300)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-white{background-color:var(--color-white)}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-20{padding-block:calc(var(--spacing) * 20)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-800{color:var(--color-gray-800)}.text-green-100{color:var(--color-green-100)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-red-700{color:var(--color-red-700)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-all{-webkit-user-select:all;user-select:all}@media (hover:hover){.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.hover\:bg-green-800:hover{background-color:var(--color-green-800)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.hover\:text-white:hover{color:var(--color-white)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:48rem){.md\:right-\[60px\]{right:60px}.md\:left-auto{left:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
@@ -0,0 +1,26 @@
1
+ /* your custom styles */
2
+
3
+
4
+ @keyframes drop{
5
+ 0%{
6
+ transform:translateY(0px);
7
+ }
8
+ 20%{
9
+ transform:translateY(100px);
10
+ }
11
+ 80%{
12
+ transform:translateY(100px);
13
+ }
14
+ 100%{
15
+ transform:translateY(0px);
16
+ }
17
+ }
18
+
19
+ .notification{
20
+ animation:drop;
21
+ animation-duration:2.5s;
22
+ }
23
+
24
+ /* *{ */
25
+ /* border:2px solid red; */
26
+ /* } */
@@ -0,0 +1 @@
1
+ @import "tailwindcss";
@@ -0,0 +1,137 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <link rel="icon" type="image/svg+xml" href="/static/cache/favicon_50x50.webp" />
8
+ <link href="/static/style.css" rel="stylesheet" />
9
+ <link href="/static/style2.css" rel="stylesheet" />
10
+ <title>Gardener: The Mini Web Framework</title>
11
+ </head>
12
+
13
+ <body class="bg-slate-50 text-slate-900 font-sans">
14
+ <div class='hidden' id='fileName'><%=fileName%></div>
15
+ <div class='hidden' id='node_env'><%=process.env.NODE_ENV%></div>
16
+ <div class='loader w-screen h-screen bg-white fixed z-2'> </div>
17
+ <div class='notification'></div>
18
+
19
+ <div id='main'>
20
+
21
+
22
+ <!-- hero -->
23
+ <div class='hero flex-wrap w-full h-screen bg-green-200 flex justify-center items-center px-10'>
24
+ <div class='w-200'>
25
+ <a href="https://ritish.site">Home</a> > <a href="https://ritish.site/projects">Projects</a> > <a
26
+ href="/">Gardener</a>
27
+ <h1 class='text-6xl my-10 font-bold text-green-900'>Gardener</h1>
28
+ <h2 class='text-2xl font-bold text-green-800 mb-4'>Develop With No Bloat</h2>
29
+ <p class="text-lg mb-6 max-w-md">Gardener is a lightweight, DOM-first front-end library. No virtual DOM, no JSX,
30
+ and no compilation step. Just the real DOM.</p>
31
+ <div class='flex gap-2 m-2'>
32
+ <a class="block bg-green-700 text-white px-8 py-3 rounded-lg font-bold hover:bg-green-800 transition"
33
+ href='/get-started'>Get Started</a>
34
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition"
35
+ href='/documentation/#introduction'>Documentation</a>
36
+ </div>
37
+ <div class='flex gap-2 m-2'>
38
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition"
39
+ href='https://github.com/ritishDas/Gardener'>View On Github</a>
40
+ <a class="block border border-green-700 text-black px-8 py-3 rounded-lg font-bold hover:text-white hover:bg-green-800 transition"
41
+ href='https://www.npmjs.com/package/create-gardener'>View On npm</a>
42
+ </div>
43
+ </div>
44
+ <img src="/static/cache/betterway_200x200.webp?url=https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQIc-V0t9zqjdPUe6IoI4M7U4jSW6yY6dhhtw&s" alt="Gardener Logo" class="w-96 h-96 object-contain ml-10">
45
+ </div>
46
+
47
+ <!-- Copy command -->
48
+ <div
49
+ class="flex w-1/4 items-center mx-auto my-15 justify-between gap-4 bg-[#1e1e1e] border border-gray-700 rounded-lg px-4 py-3 font-mono shadow-sm group">
50
+ <span class="text-sm md:text-base text-gray-300 select-all">
51
+ <span class="text-emerald-400 mr-2">$</span><span class='initCommand'>pnpm create gardener app</span>
52
+ </span>
53
+
54
+ <button
55
+ class="copybtn flex items-center justify-center p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded transition-all duration-200 active:scale-95"
56
+ title="Copy to clipboard">
57
+ <span class="w-5 h-5">
58
+ <%- include('partials/icons/clipboard') %>
59
+ </span>
60
+ </button>
61
+ </div>
62
+ <!-- Philosophy -->
63
+ <div class="max-w-5xl mx-auto py-20 px-6 grid md:grid-cols-2 gap-12">
64
+ <div>
65
+ <h3 class="text-3xl font-bold mb-4 text-green-900">✨ Philosophy</h3>
66
+ <ul class="space-y-3 text-slate-700">
67
+ <li><strong>DOM-First:</strong> Renders directly to the real DOM.</li>
68
+ <li><strong>Deterministic:</strong> If you can inspect it, you can understand it.</li>
69
+ <li><strong>Native:</strong> Works in the browser via ES modules.</li>
70
+ <li><strong>Zero Build:</strong> No bundlers or magic required.</li>
71
+ </ul>
72
+ </div>
73
+
74
+ <!-- Features -->
75
+ <div>
76
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🚀 Features</h3>
77
+ <div class="grid grid-cols-2 gap-4">
78
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Declarative UI</div>
79
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">SVG Namespace Support</div>
80
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Hot Reload</div>
81
+ <div class="p-4 bg-white shadow-sm border border-green-100 rounded">Image Optimization</div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+
86
+ <!-- Api Example -->
87
+ <div class="bg-slate-900 py-20 text-white">
88
+ <div class="max-w-5xl mx-auto px-6">
89
+ <h3 class="text-3xl font-bold mb-8 text-center text-green-400">The Core API</h3>
90
+ <div class="bg-slate-800 p-6 rounded-xl border border-slate-700 font-mono text-sm overflow-x-auto">
91
+ <pre class="text-blue-300">
92
+ gardener({
93
+ t: <span class="text-green-300">'div'</span>,
94
+ cn: [<span class="text-green-300">'p-6'</span>, <span class="text-green-300">'flex'</span>],
95
+ attr: { id: <span class="text-green-300">'hero'</span> },
96
+ txt: <span class="text-green-300">'Welcome to the Garden'</span>,
97
+ events: {
98
+ click: () => console.log(<span class="text-green-300">'Growth!'</span>)
99
+ },
100
+ children: [
101
+ { t: <span class="text-green-300">'span'</span>, txt: <span class="text-green-300">'Pure DOM nodes.'</span> }
102
+ ]
103
+ })
104
+ </pre>
105
+ </div>
106
+ </div>
107
+ </div>
108
+
109
+ <div class="max-w-5xl mx-auto py-20 px-6 text-center">
110
+ <h3 class="text-3xl font-bold mb-4 text-green-900">🧠 Simple State</h3>
111
+ <p class="mb-8 text-slate-600">No proxies. No diffing. Just clean, reactive callbacks.</p>
112
+ <div class="inline-block text-left bg-white p-6 rounded shadow-lg border-t-4 border-green-500 font-mono text-sm">
113
+ <p class="text-slate-500">// Initialize</p>
114
+ <p>const count = new State(0);</p>
115
+ <p class="text-slate-500 mt-2">// React</p>
116
+ <p>count.registerCb(val => updateUI(val));</p>
117
+ </div>
118
+ </div>
119
+
120
+ <!-- Footer -->
121
+ <footer class="bg-green-900 text-green-100 py-12 text-center">
122
+ <p class="text-xl italic">"Because sometimes you don't need a forest. Just a garden."</p>
123
+ <div class="mt-6 text-sm opacity-70">
124
+ MIT Licensed | Built on Express & EJS
125
+ </div>
126
+ </footer>
127
+ </div>
128
+
129
+ </body>
130
+ <% if (process.env.NODE_ENV==='production' ) { %>
131
+ <script type='module' src='/static/bundle/bundle.<%=fileName%>.js'></script>
132
+ <% } else { %>
133
+ <script type='module' src='/static/global.js'></script>
134
+ <script type='module' src='/static/pages/pages._.js'></script>
135
+ <% } %>
136
+
137
+ </html>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-clipboard"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2" /><path d="M9 5a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2" /></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-clipboard-check"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2" /><path d="M9 5a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2" /><path d="M9 14l2 2l4 -4" /></svg>
@@ -14,11 +14,11 @@ export default async function buildHelper() {
14
14
 
15
15
  await fs.cp(src, dest, { recursive: true });
16
16
 
17
- await fs.writeFile(
18
- path.join(dest, 'static', 'gardenerConfig.js'),
19
- "export const mode = 'prod';",
20
- 'utf8'
21
- );
17
+ // await fs.writeFile(
18
+ // path.join(dest, 'static', 'gardenerConfig.js'),
19
+ // "export const mode = 'prod';",
20
+ // 'utf8'
21
+ // );
22
22
 
23
23
  await fs.rm(path.join(dest, 'template'), { recursive: true });
24
24
 
@@ -18,10 +18,11 @@ const staticFiles = path.resolve(__dirname, '..', 'frontend')
18
18
  app.set('views', path.join(staticFiles, 'views'));
19
19
  app.set("view engine", "ejs");
20
20
  app.use(express.static(staticFiles,
21
- {
22
- maxAge: '1y', // 1 year
23
- immutable: true
24
- }
21
+ // Uncomment this for caching in production
22
+ // {
23
+ // maxAge: '1y', // 1 year
24
+ // immutable: true
25
+ // }
25
26
  ));
26
27
 
27
28
  app.use(express.json());
@@ -1 +1,5 @@
1
- export const mode = 'dev';
1
+ import { fetchElement } from "./gardener.js"
2
+
3
+ export const mode = fetchElement('#node_env').innerText === 'production' ? 'prod' : 'dev';
4
+ console.log(mode);
5
+