PageSourceSearch

https://rene.wang/_next/static/chunks/927.d326af92daea5e66.js

js rene.wang collected 2026-09-24 10:40:11 UTC 5,179 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[927],{50927:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o,frontmatter:()=>s,toc:()=>l});var r=n(89732),i=n(93873);let l=[],s={title:"Toolkits",description:"A digital toolbox for daily paper-cuts.",createAt:"2025-12-28T00:00:00.000Z",cover:"/project/toolkits.png",link:"https://tlkts.com",year:2019,seo:{keywords:["Book Review","Eckhart Tolle","Mindfulness"]}};function a(e){let t={p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Toolkits is Rene's first completed software project, started when he was 14."}),"\n",(0,r.jsx)(t.p,{children:'Rene initially named it "Ygktool", then renamed it "Geekits", and now it\'s called Toolkits.'}),"\n",(0,r.jsx)(t.p,{children:"The project was initially built with PHP. Then migrated to CRA. In 2021, Rene migrate to NextJS with a modern front-end tech stack."})]})}function o(e={}){let{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},93873:(e,t,n)=>{n.d(t,{R:()=>k});var r=n(89732),i=n(35560),l=n(69690),s=n(97005),a=n(83047);function o({children:e}){return(0,r.jsx)("span",{className:"hidden float-right clear-right my-1 ml-6 -mr-44 w-44 select-none font-script text-2xl italic leading-snug text-muted-foreground lg:block",role:"note",children:e})}var c=n(3224),d=n(89002),f=n(79995),h=n(17733);function p({children:e}){return(0,r.jsx)("div",{className:"mdx-sticky-first-column",children:e})}function u(e){return"string"==typeof e?e:"number"==typeof e?String(e):Array.isArray(e)?e.map(u).join(""):(0,i.isValidElement)(e)?u(e.props.children):""}let m=new URL(n(88988).W6).origin;function x({href:e,children:t,className:n,...i}){if(e?.startsWith("#"))return(0,r.jsx)(s.AnchorLink,{href:e,className:n,...i,children:t});let{faviconSrc:a,isExternal:o}=function(e){if(!e)return{faviconSrc:null,isExternal:!1};try{let t=new URL(e,m);if("http:"!==t.protocol&&"https:"!==t.protocol)return{faviconSrc:null,isExternal:!1};let n=t.origin!==m;return{faviconSrc:n?new URL("/favicon.ico",t.origin).href:"/icon/favicon-32x32.png",isExternal:n}}catch{return{faviconSrc:null,isExternal:!1}}}(e),c=a?(0,r.jsx)(d.LinkFavicon,{src:a}):null;if(!o)return(0,r.jsxs)("a",{href:e,className:n,...i,children:[c,t]});let f=(0,r.jsx)(l.A,{className:"ml-1 inline-block h-3.5 w-3.5 align-[-0.125em] transition-transform group-hover:-translate-y-0.5 group-hover:translate-x-0.5",strokeWidth:1.5,"aria-hidden":!0}),h="string"==typeof t?t:null,p=h?.slice(0,-1),u=h?.slice(-1);return(0,r.jsxs)("a",{href:e,target:"_blank",rel:"noreferrer noopener",className:`group ${n??""}`.trim(),...i,children:[c,h?(0,r.jsxs)(r.Fragment,{children:[p,(0,r.jsxs)("span",{className:"whitespace-nowrap",children:[u,f]})]}):(0,r.jsxs)(r.Fragment,{children:[t,f]})]})}function g({children:e,...t}){return(0,i.isValidElement)(e)&&e.type===f.MdxImage?(0,r.jsx)(r.Fragment,{children:e}):(0,r.jsx)("p",{...t,children:e})}function j(e){let t=e.children;if(!(0,i.isValidElement)(t))return(0,r.jsx)("pre",{...e});let n=t.props,l=n.className??"";if(l.includes("language-mermaid")){let e=u(n.children).replace(/\n$/,"");return(0,r.jsx)(a.Mermaid,{chart:e})}let s=u(n.children).replace(/\n$/,"");if(function(e,t){let n=!1,r=!1;for(let t of e.split("\n")){if(0===t.length)continue;let e=t[0];if("+"===e)n=!0;else if("-"===e)r=!0;else if(" "!==e)return!1}return"diff"===t?n||r:n&&r}(s,/language-([\w+-]+)/.exec(l)?.[1]??"")){let t=function(e){let t=[];!function e(t,n,r){if(null!=t&&"boolean"!=typeof t){if("string"==typeof t||"number"==typeof t)return void r.push({text:String(t),className:n||void 0});if(Array.isArray(t)){for(let i of t)e(i,n,r);return}if((0,i.isValidElement)(t)){let i=t.props,l=[n,i.className].filter(Boolean).join(" ");e(i.children,l,r)}}}(e,"",t);let n=[[]];for(let e of t)e.text.split("\n").forEach((t,r)=>{r>0&&n.push([]),t&&n[n.length-1].push({text:t,className:e.className})});n.length>1&&0===n[n.length-1].length&&n.pop();let r=n.map(e=>e.map(e=>e.text).join("")),l=r.filter(e=>e.length>=2),s=l.length>0&&l.every(e=>" "===e[1])?2:1;return n.map((e,t)=>{let n=r[t],i=n[0],l="+"===i?"add":"-"===i?"del":"context",a=Math.min(s,n.length);return{type:l,marker:"add"===l?"+":"del"===l?"-":"",segments:function(e,t){if(t<=0)return e;let n=t,r=[];for(let t of e)n<=0?r.push(t):t.text.length<=n?n-=t.text.length:(r.push({text:t.text.slice(n),className:t.className}),n=0);return r}(e,a),content:n.slice(a)}})}(n.children),s=t.filter(e=>"del"!==e.type).map(e=>e.content).join("\n");
1return(0,r.jsx)(c.CodeBlock,{code:s,isOneLine:!1,children:(0,r.jsx)("pre",{...e,children:(0,r.jsx)("code",{className:`${l} diff-code`.trim(),children:t.map((e,t)=>(0,r.jsxs)("span",{className:`diff-line diff-${e.type}`,children:[(0,r.jsx)("span",{className:"diff-marker","aria-hidden":!0,children:e.marker}),e.segments.map((e,t)=>e.className?(0,r.jsx)("span",{className:e.className,children:e.text},t):e.text)]},t))})})})}let o=!s.includes("\n");return(0,r.jsx)(c.CodeBlock,{code:s,isOneLine:o,children:(0,r.jsx)("pre",{...e})})}function k(e){return{...e,pre:j,p:g,a:x,table:h.MdxTable,img:f.MdxImage,StickyFirstColumn:p,Comment:o}}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.