1"use strict";(self.webpackChunkzfir_dev=self.webpackChunkzfir_dev||[]).push([[526],{4098:(e,t,s)=>{s.d(t,{A:()=>d});var a=s(5043),r=s(875),i=s(5964),o=s(9788),l=s(308),n=s(579);const d=e=>{const t=(0,a.useRef)(null),[s,d]=(0,a.useState)(!1),[c,p]=(0,a.useState)(0);return(0,a.useEffect)((()=>{const e=new IntersectionObserver((e=>{let[t]=e;t.isIntersecting&&!s?(d(!0),p((e=>e+1))):!t.isIntersecting&&s&&d(!1)}),{threshold:.1});return t.current&&e.observe(t.current),()=>{t.current&&e.unobserve(t.current)}}),[s]),(0,n.jsx)(r.a,{className:"Heading","data-testid":"Heading",ref:t,children:(0,n.jsxs)(i.s,{gap:"4",children:[(0,n.jsx)(o.D,{as:"h2",className:"Heading-Cursor",children:(0,n.jsx)("strong",{children:(0,n.jsx)(l.A,{options:{speed:30,waitUntilVisible:!0,cursorChar:"_"}})})}),(0,n.jsx)(o.D,{as:"h2",className:"Heading-Text",children:s?(0,n.jsx)(l.A,{options:{speed:50,loop:!1},children:e.title.toLowerCase()},c):(0,n.jsx)("span",{style:{opacity:0},children:e.title.toLowerCase()})})]})})}},1199:(e,t,s)=>{s.r(t),s.d(t,{default:()=>A});s(5043);var a=s(875),r=s(1931),i=s(9945),o=s(4098),l=s(4792),n=s(5964),d=s(9788),c=s(3725),p=s(5925),g=s(579);const m=e=>(0,g.jsx)(a.a,{className:"ProjectCard",height:"100%",children:(0,g.jsx)(l.Z,{className:"ProjectCardWrapper",style:{background:"#10ddc270",borderRadius:"23px",height:"100%"},children:(0,g.jsxs)(n.s,{direction:"column",align:"center",justify:"center",height:"100%",gap:"3",children:[e.imagePath&&(0,g.jsx)("img",{className:"ProjectCardImage",src:e.imagePath,alt:e.title,loading:"lazy",decoding:"async"}),(0,g.jsx)(d.D,{as:"h4",size:"4",style:{color:"#053b50"},children:e.title}),(0,g.jsx)(c.E,{as:"p",style:{color:"#053b50"},children:e.description}),(0,g.jsxs)(n.s,{gap:"3",wrap:"wrap",justify:"center",children:[e.appUrl&&(0,g.jsx)(p.$,{asChild:!0,variant:"ghost",className:"ProjectCardButton",children:(0,g.jsx)("a",{href:e.appUrl,target:"_blank",rel:"noopener noreferrer",children:"App"})}),e.websiteUrl&&(0,g.jsx)(p.$,{asChild:!0,variant:"ghost",className:"ProjectCardButton",children:(0,g.jsx)("a",{href:e.websiteUrl,target:"_blank",rel:"noopener noreferrer",children:"Website"})}),e.gitUrl&&(0,g.jsx)(p.$,{asChild:!0,variant:"ghost",className:"ProjectCardButton",children:(0,g.jsx)("a",{href:e.gitUrl,target:"_blank",rel:"noopener noreferrer",children:"Git"})})]})]})})}),u=s.p+"static/media/dardotar-logo.a8a0669a5eadfff7f78d.webp",h=s.p+"static/media/budgeter-logo.061aa458cf062966f1dd.webp",b=s.p+"static/media/mwf-logo.284c45d35bf8819d59ec.webp",v=s.p+"static/media/nohunger-logo.4b7147a79006d3abd1f4.webp",f=s.p+"static/media/crashlens-logo-white.1c58409632690e879a1f.webp",j=s.p+"static/media/mangrove-matters-logo.167ec6a44ad650a490c1.webp",x=s.p+"static/media/quickqr-logo.cc22d227f8ad00a5ec0e.webp",w=s.p+"static/media/lesablier-logo.ed361d08334a99a229f8.webp",y=s.p+"static/media/wpautosri-logo.332c8de2a633d3d3724b.webp",P=s.p+"static/media/limitless-textarea-logo.a7b5af7aa5b6ee8dce34.webp",U=s.p+"static/media/slide-foundry-logo.3f93ae9b5b149e94dd5a.webp",A=()=>(0,g.jsx)(a.a,{className:"Projects",children:(0,g.jsxs)(r.m,{children:[(0,g.jsx)(o.A,{title:"Projects"}),(0,g.jsx)(a.a,{p:"4",children:(0,g.jsxs)(i.x,{columns:{initial:"1",md:"3"},gap:"4",children:[(0,g.jsx)(m,{imagePath:u,title:"DARTdotAR",description:"Developed using C#, Unity and Adobe XD",appUrl:"https://play.google.com/store/apps/details?id=com.zafir.dartdotar&hl=en&gl=US"}),(0,g.jsx)(m,{imagePath:h,title:"Budgeter",description:"Developed using Android Studio and Java",appUrl:"https://play.google.com/store/apps/details?id=com.silverappstudios.budgeting"}),(0,g.jsx)(m,{imagePath:b,title:"MWF Game",description:"Developed usign Unity and Adobe XD"}),(0,g.jsx)(m,{imagePath:v,title:"NoHunger",description:"Developed using Dart, Flutter and Google Firebase"}),(0,g.jsx)(m,{imagePath:f,title:"CrashLens",description:"Developed using Dart, Flutter, Python, FastAPI, AI and GAN to detect and analyze types of car crashes",appUrl:"https://play.google.com/store/apps/details?id=com.zafir.crashlens&hl=en&gl=US",websiteUrl:"https://crashlens.zfir.dev/"}),(0,g.jsx)(m,{imagePath:j,title:"Mangrove Matters",description:"Developed using Ionic, Cordova and Ruby on Rails to manage mangrove conservation efforts",appUrl:"https://play.google.com/store/apps/details?id=com.reef.mangrove&hl=en&gl=US",websiteUrl:"https://mangrove-matters.herokuapp.com/"}),(0,g.jsx)(m,{title:"RSS Medium Blog Viewer",description:"Developed using EmberJS and Bootstrap to view and display Blog RSS feeds from Medium",websiteUrl:"https://blog.zfir.dev",gitUrl:"https://github.com/zfir-dev/rss-medium-blog-viewer"}),(0,g.jsx)(m,{title:"Blog Post Template Exporter",description:"Developed using Pure JavaScript to export blog post templates",websiteUrl:"https://blog-post-template-exporter.sc.zfir.dev/"}),(0,g.jsx)(m,{title:"Link Shortener",description:"Developed using Flask, HTML, JavaScript and PostgreSQL to shorten URLs",websiteUrl:"https://l.zfir.dev/D2Xzywy"}),(0,g.jsx)(m,{imagePath:x,title:"QuickQR",description:"Developed using TypeScript and Chrome Extension APIs to generate QR codes quickly",websiteUrl:"https://chromewebstore.google.com/detail/jcccpgopmdbmlihmmepncacidmmnkaaj/"}),(0,g.jsx)(m,{imagePath:w,title:"LeSablier",description:"Developed using Angular (PWA), PostgreSQL, GoLang and GoAdmin",websiteUrl:"https://le-sablier.spoonconsulting.com"}),(0,g.jsx)(m,{imagePath:y,title:"WP Auto SRI",description:"Developed using PHP for WordPress to automatically add Subresource Integrity (SRI) attributes to scripts and styles",websiteUrl:"https://wordpress.org/plugins/auto-sri/"}),(0,g.jsx)(m,{imagePath:P,title:"Limitless Textarea",description:"Developed using TypeScript and Chrome Extension APIs to remove maxlength limitations from all textarea elements",websiteUrl:"https://chromewebstore.google.com/detail/limitless-textarea/diecajmacpfagiobbbkpfkkbdlfnpjem"}),(0,g.jsx)(m,{imagePath:U,title:"Slide Foundry",description:"Developed using React, Vite and Reveal.js to build interactive web presentations",websiteUrl:"https://slide-foundry.zf
1ir.dev/"})]})})]})})},9945:(e,t,s)=>{s.d(t,{x:()=>b});var a=s(2555),r=s(3986),i=s(5043),o=s(8139),l=s(1945),n=s(3335),d=s(8689);const c=(0,a.A)((0,a.A)({as:{type:"enum",values:["div","span"],default:"div"}},n.f),{},{display:{type:"enum",className:"rt-r-display",values:["none","inline-grid","grid"],responsive:!0},areas:{type:"string",className:"rt-r-gta",customProperties:["--grid-template-areas"],responsive:!0},columns:{type:"enum | string",className:"rt-r-gtc",customProperties:["--grid-template-columns"],values:["1","2","3","4","5","6","7","8","9"],parseValue:p,responsive:!0},rows:{type:"enum | string",className:"rt-r-gtr",customProperties:["--grid-template-rows"],values:["1","2","3","4","5","6","7","8","9"],parseValue:p,responsive:!0},flow:{type:"enum",className:"rt-r-gaf",values:["row","column","dense","row-dense","column-dense"],responsive:!0},align:{type:"enum",className:"rt-r-ai",values:["start","center","end","baseline","stretch"],responsive:!0},justify:{type:"enum",className:"rt-r-jc",values:["start","center","end","between"],parseValue:function(e){return"between"===e?"space-between":e},responsive:!0}},d.o);function p(e){return c.columns.values.includes(e)?e:null!==e&&void 0!==e&&e.match(/^\d+$/)?"repeat(".concat(e,", minmax(0, 1fr))"):e}var g=s(3497),m=s(8204),u=s(2371);const h=["className","asChild","as"],b=i.forwardRef(((e,t)=>{const s=(0,g.o)(e,c,m.i,u.y),{className:n,asChild:d,as:p="div"}=s,b=(0,r.A)(s,h);return i.createElement(d?l.DX:p,(0,a.A)((0,a.A)({},b),{},{ref:t,className:o("rt-Grid",n)}))}));b.displayName="Grid"}}]); 2//# sourceMappingURL=526.1a8c4de6.chunk.js.map
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.