diff --git a/asset-manifest.json b/asset-manifest.json index 29d3ca9..ba70c63 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,23 +1,23 @@ { "files": { "main.css": "/rental-car/static/css/main.f404f9b8.css", - "main.js": "/rental-car/static/js/main.a03e176b.js", - "static/js/466.774f1eb8.chunk.js": "/rental-car/static/js/466.774f1eb8.chunk.js", - "static/js/112.451f1206.chunk.js": "/rental-car/static/js/112.451f1206.chunk.js", - "static/js/634.de37193f.chunk.js": "/rental-car/static/js/634.de37193f.chunk.js", - "static/js/810.9ffa7e13.chunk.js": "/rental-car/static/js/810.9ffa7e13.chunk.js", + "main.js": "/rental-car/static/js/main.7c2b3a8c.js", + "static/js/466.6108aaba.chunk.js": "/rental-car/static/js/466.6108aaba.chunk.js", + "static/js/112.85da9c57.chunk.js": "/rental-car/static/js/112.85da9c57.chunk.js", + "static/js/634.83f7233a.chunk.js": "/rental-car/static/js/634.83f7233a.chunk.js", + "static/js/810.2592e3d8.chunk.js": "/rental-car/static/js/810.2592e3d8.chunk.js", "static/media/bg.webp": "/rental-car/static/media/bg.4c60543225bb973efa51.webp", "index.html": "/rental-car/index.html", "static/media/close.svg": "/rental-car/static/media/close.70f65c7e87a4e1e47d5b73074981fa46.svg", "main.f404f9b8.css.map": "/rental-car/static/css/main.f404f9b8.css.map", - "main.a03e176b.js.map": "/rental-car/static/js/main.a03e176b.js.map", - "466.774f1eb8.chunk.js.map": "/rental-car/static/js/466.774f1eb8.chunk.js.map", - "112.451f1206.chunk.js.map": "/rental-car/static/js/112.451f1206.chunk.js.map", - "634.de37193f.chunk.js.map": "/rental-car/static/js/634.de37193f.chunk.js.map", - "810.9ffa7e13.chunk.js.map": "/rental-car/static/js/810.9ffa7e13.chunk.js.map" + "main.7c2b3a8c.js.map": "/rental-car/static/js/main.7c2b3a8c.js.map", + "466.6108aaba.chunk.js.map": "/rental-car/static/js/466.6108aaba.chunk.js.map", + "112.85da9c57.chunk.js.map": "/rental-car/static/js/112.85da9c57.chunk.js.map", + "634.83f7233a.chunk.js.map": "/rental-car/static/js/634.83f7233a.chunk.js.map", + "810.2592e3d8.chunk.js.map": "/rental-car/static/js/810.2592e3d8.chunk.js.map" }, "entrypoints": [ "static/css/main.f404f9b8.css", - "static/js/main.a03e176b.js" + "static/js/main.7c2b3a8c.js" ] } \ No newline at end of file diff --git a/index.html b/index.html index 070de1a..6b3d3aa 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Rent Car
\ No newline at end of file +Rent Car
\ No newline at end of file diff --git a/static/js/112.451f1206.chunk.js b/static/js/112.451f1206.chunk.js deleted file mode 100644 index 0cd3dbd..0000000 --- a/static/js/112.451f1206.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkrental_car=self.webpackChunkrental_car||[]).push([[112],{8112:function(e,i,n){n.r(i),n.d(i,{default:function(){return ei}});var a,r,t,o,s,l,d,c,m,u,p=n(3433),g=n(9439),h=n(2791),f=n(168),y=n(7630),v=n(4294),b=n(6088),x=(0,y.ZP)(v.Z)((function(e){var i=e.theme;return{width:e.width,padding:"12px 0 12px 0",borderRadius:"12px",color:i.palette.getContrastText("#3470FF"),backgroundColor:"#3470FF","&:hover":{backgroundColor:"#0B44CD"}}})),C=b.Z.span(a||(a=(0,f.Z)(["\n color: #ffffff;\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n line-height: 1.42;\n text-transform: none;\n"]))),S=n(184);function k(e){var i=e.text,n=e.onClick,a=e.width;return(0,S.jsx)(x,{variant:"contained",onClick:n,style:{width:a},children:(0,S.jsx)(C,{children:i})})}var w,V=b.Z.div(r||(r=(0,f.Z)(["\n display: flex;\n width: 274px;\n height: 426px;\n flex-direction: column;\n align-items: flex-start;\n"]))),z=b.Z.div(t||(t=(0,f.Z)(["\n position: relative;\n width: 274px;\n height: 268px;\n margin-bottom: 14px;\n"]))),L=b.Z.img(o||(o=(0,f.Z)(["\n width: 100%;\n height: 268px;\n object-fit: cover;\n border-radius: 14px;\n"]))),j=b.Z.div(s||(s=(0,f.Z)(["\n width: 274px;\n align-items: center;\n color: #121417;\n display: flex;\n justify-content: space-between;\n margin-bottom: 8px;\n"]))),P=b.Z.h3(l||(l=(0,f.Z)(["\n color: #121417;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.5;\n"]))),M=b.Z.span(d||(d=(0,f.Z)(["\n color: #3470ff;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.5;\n"]))),R=b.Z.p(c||(c=(0,f.Z)(["\n color: #121417;\n font-size: 16px;\n font-weight: 500;\n line-height: 1.5;\n"]))),Z=b.Z.ul(m||(m=(0,f.Z)(["\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: fit-content;\n row-gap: 4px;\n margin-bottom: 28px;\n width: 255px;\n height: 40px;\n overflow: hidden;\n"]))),A=b.Z.li(u||(u=(0,f.Z)(["\n color: rgba(18, 20, 23, 0.5);\n font-size: 12px;\n font-weight: 400;\n line-height: 1.5;\n\n :not(:last-child) {\n border-right: 1px solid rgba(18, 20, 23, 0.1);\n margin-right: 6px;\n padding-right: 6px;\n }\n"]))),U=n(1413),q=n(4957),E=n(7488),D=n(7237),_=b.Z.div(w||(w=(0,f.Z)(["\n position: absolute;\n top: 0;\n right: 0;\n"]))),T=(0,y.ZP)(D.Z)({fill:"#3470FF"}),B=(0,y.ZP)(E.Z)({fill:"#FFFFFFCC"}),$={inputProps:{"aria-label":"Checkbox demo"}};function F(){return(0,S.jsx)(_,{children:(0,S.jsx)(q.Z,(0,U.Z)((0,U.Z)({},$),{},{icon:(0,S.jsx)(B,{}),checkedIcon:(0,S.jsx)(T,{})}))})}var H=n(6747),K=n(8237);var W,I,O,N,X,G,Y,Q,J,ee,ie,ne,ae,re,te,oe,se,le,de=n.p+"static/media/close.70f65c7e87a4e1e47d5b73074981fa46.svg",ce=b.Z.div(W||(W=(0,f.Z)(["\n position: relative;\n padding: 34px;\n"]))),me=b.Z.button(I||(I=(0,f.Z)(["\n position: absolute;\n background-color: transparent;\n border: none;\n top: 8px;\n right: 6px;\n cursor: pointer;\n"]))),ue=b.Z.img(O||(O=(0,f.Z)(["\n width: 30px;\n height: 30px;\n"]))),pe=b.Z.img(N||(N=(0,f.Z)(["\n width: 100%;\n height: 314px;\n display: block;\n object-fit: cover;\n border-radius: 14px;\n"]))),ge=b.Z.div(X||(X=(0,f.Z)(["\n margin-top: 14px;\n margin-bottom: 24px;\n"]))),he=b.Z.div(G||(G=(0,f.Z)(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-top: 14px;\n padding-bottom: 8px;\n"]))),fe=b.Z.h2(Y||(Y=(0,f.Z)(["\n font-weight: 500;\n font-size: 18px;\n line-height: 1.33;\n color: #121417;\n"]))),ye=b.Z.span(Q||(Q=(0,f.Z)(["\n color: #3470ff;\n"]))),ve=b.Z.ul(J||(J=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n"]))),be=b.Z.li(ee||(ee=(0,f.Z)(["\n font-size: 12px;\n color: rgba(18, 20, 23, 0.5);\n display: flex;\n align-items: center;\n\n &:not(:last-child)::after {\n content: '';\n display: inline-block;\n width: 1px;\n height: 16px;\n background-color: rgba(18, 20, 23, 0.1);\n margin-left: 6px;\n margin-right: 6px;\n }\n"]))),xe=b.Z.p(ie||(ie=(0,f.Z)(["\n line-height: 1.43;\n margin-top: 14px;\n width: 461px;\n"]))),Ce=b.Z.h3(ne||(ne=(0,f.Z)(["\n font-weight: 400;\n font-size: 14px;\n line-height: 1.43;\n color: #121417;\n margin-top: 24px;\n margin-bottom: 8px;\n"]))),Se=b.Z.ul(ae||(ae=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n\n font-size: 12px;\n letter-spacing: -0.24px;\n\n @media screen and (min-width: 768px) {\n width: 461px;\n }\n"]))),ke=b.Z.li(re||(re=(0,f.Z)(["\n border-radius: 35px;\n color: #363535;\n background-color: #f9f9f9;\n padding: 7px 14px;\n"]))),we=b.Z.span(te||(te=(0,f.Z)(["\n color: #3470ff;\n font-weight: 600;\n"]))),Ve={position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:541,maxHeight:830,bgcolor:"background.paper",borderRadius:6,boxShadow:24};function ze(e){var i=e.open,n=e.onClose,a=e.data;return(0,S.jsx)("div",{children:(0,S.jsx)(K.Z,{open:i,onClose:n,"aria-labelledby":"modal-modal-title","aria-describedby":"modal-modal-description",children:(0,S.jsx)(H.Z,{sx:Ve,children:(0,S.jsxs)(ce,{children:[(0,S.jsx)(me,{onClick:n,children:(0,S.jsx)(ue,{src:de,alt:"Close button"})}),(0,S.jsx)(pe,{src:a.img,alt:a.make,width:"461",height:"248"}),(0,S.jsxs)(ge,{children:[(0,S.jsx)(he,{children:(0,S.jsxs)(fe,{children:[a.make," ",(0,S.jsxs)(ye,{children:[a.model,", "]}),a.year]})}),(0,S.jsxs)(ve,{children:[(0,S.jsx)(be,{children:a.address.split(",")[1]}),(0,S.jsx)(be,{children:a.address.split(",")[2]}),(0,S.jsx)(be,{children:"Id: "}),(0,S.jsxs)(be,{children:["Year: ",a.year]}),(0,S.jsxs)(be,{children:["Type: ",a.type]})]}),(0,S.jsxs)(ve,{children:[(0,S.jsxs)(be,{children:["Fuel Consumption: ",a.fuelConsumption]}),(0,S.jsxs)(be,{children:["Engine Size: ",a.engineSize]})]}),(0,S.jsx)(xe,{children:a.description}),(0,S.jsx)(Ce,{children:"Accessories and functionalities:"}),(0,S.jsx)(ve,{children:a.accessories.map((function(e){return(0,S.jsx)(be,{children:e},e)}))}),(0,S.jsx)(ve,{children:a.functionalities.map((function(e){return(0,S.jsx)(be,{children:e},e)}))}),(0,S.jsx)(Ce,{children:"Rental Conditions:"}),(0,S.jsxs)(Se,{children:[(0,S.jsxs)(ke,{children:["Minimum age:"," ",(0,S.jsx)(we,{children:(new Date).getFullYear()-a.year})]}),(0,S.jsx)(ke,{children:a.rentalConditions.split("\n")[1]}),(0,S.jsx)(ke,{children:a.rentalConditions.split("\n")[2]}),(0,S.jsxs)(ke,{children:["Mileage:"," ",(0,S.jsx)(we,{children:a.mileage.toLocaleString("en-US")})]}),(0,S.jsxs)(ke,{children:["Price: ",(0,S.jsx)(we,{children:a.rentalPrice})]})]})]}),(0,S.jsx)(k,{text:"Rental car",width:"168px",onClick:function(){window.location.href="tel:+380730000000"}})]})})})})}function Le(e){var i=e.data,n=(0,h.useState)(!1),a=(0,g.Z)(n,2),r=a[0],t=a[1];return(0,S.jsxs)(V,{children:[(0,S.jsxs)(z,{children:[(0,S.jsx)(F,{}),(0,S.jsx)(L,{src:i.img,alt:"Car"})]}),(0,S.jsxs)(j,{children:[(0,S.jsxs)(P,{children:[i.make," ","",(0,S.jsx)(M,{children:i.model}),", ",i.year]}),(0,S.jsxs)(R,{children:[" ",i.rentalPrice]})]}),(0,S.jsxs)(Z,{children:[(0,S.jsx)(A,{children:i.address.split(",")[1]}),(0,S.jsx)(A,{children:i.address.split(",")[2]}),(0,S.jsx)(A,{children:i.rentalCompany}),(0,S.jsx)(A,{children:i.type}),(0,S.jsx)(A,{children:i.model}),(0,S.jsx)(A,{children:i.mileage}),(0,S.jsx)(A,{children:i.accessories[0]})]}),(0,S.jsx)(k,{onClick:function(){return t(!0)},text:"Learn more",width:"274px"}),r&&(0,S.jsx)(ze,{open:r,onClose:function(){return t(!1)},data:i})]})}var je,Pe,Me,Re,Ze,Ae,Ue,qe,Ee,De=b.Z.div(oe||(oe=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n padding-left: 128px;\n padding-right: 128px;\n"]))),_e=b.Z.div(se||(se=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 50px 29px;\n margin-top: 50px;\n width: 1184px;\n margin-left: auto;\n margin-right: auto;\n"]))),Te=b.Z.a(le||(le=(0,f.Z)(["\n color: #3470ff;\n font-family: 'Manrope';\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n line-height: 1.5;\n text-decoration-line: underline;\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 100px;\n padding-bottom: 100px;\n cursor: pointer;\n\n &:hover {\n color: #0b44cd;\n }\n"]))),Be=n(2647),$e=b.Z.div(je||(je=(0,f.Z)(["\n display: flex;\n align-items: flex-end;\n margin-top: 50px;\n gap: 8px;\n"]))),Fe=b.Z.div(Pe||(Pe=(0,f.Z)(["\n display: flex;\n flex-direction: column;\n"]))),He=b.Z.div(Me||(Me=(0,f.Z)(["\n display: flex;\n position: relative;\n height: 48px;\n"]))),Ke=b.Z.form(Re||(Re=(0,f.Z)(["\n display: flex;\n flex-direction: column;\n"]))),We=b.Z.label(Ze||(Ze=(0,f.Z)(["\n font-size: 14px;\n color: rgba(138, 138, 137, 1);\n font-family: 'Manrope';\n padding-left: 5px;\n margin-bottom: 8px;\n"]))),Ie=b.Z.input(Ae||(Ae=(0,f.Z)(["\n display: block;\n width: 160px;\n height: 48px;\n border: none;\n border-right: 1px solid rgba(138, 138, 137, 0.2);\n background-color: rgba(247, 247, 251, 1);\n border-radius: 14px 0 0 14px;\n padding-left: 0;\n text-indent: 70px;\n\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Oe=b.Z.input(Ue||(Ue=(0,f.Z)(["\n display: block;\n width: 160px;\n height: 48px;\n border: none;\n background-color: rgba(247, 247, 251, 1);\n border-radius: 0 14px 14px 0;\n padding-left: 0;\n text-indent: 45px;\n\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Ne=b.Z.span(qe||(qe=(0,f.Z)(["\n position: absolute;\n display: block;\n left: 20px;\n top: 15px;\n z-index: 9;\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Xe=b.Z.span(Ee||(Ee=(0,f.Z)(["\n position: absolute;\n display: block;\n left: 180px;\n top: 15px;\n z-index: 9;\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Ge=JSON.parse('[{"id":9582,"year":2008,"make":"Buick","model":"Enclave","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/buick_enclave.jpg","description":"The Buick Enclave is a stylish and spacious SUV known for its comfortable ride and luxurious features.","fuelConsumption":"10.5","engineSize":"3.6L V6","accessories":["Leather seats","Panoramic sunroof","Premium audio system"],"functionalities":["Power liftgate","Remote start","Blind-spot monitoring"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"123 Example Street, Kiev, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5858},{"id":9584,"year":2019,"make":"Volvo","model":"XC90","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc90.jpg","description":"The Volvo XC90 is a premium SUV that offers exceptional safety, advanced technology, and elegant design.","fuelConsumption":"8.3","engineSize":"2.0L 4-cylinder","accessories":["Nappa leather seats","Bowers & Wilkins premium sound system","Head-up display"],"functionalities":["IntelliSafe advanced safety features","Pilot Assist semi-autonomous driving","Four-zone automatic climate control"],"rentalPrice":"$50","rentalCompany":"Premium Auto Rentals","address":"456 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5352},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60.webp","description":"The Volvo XC60 is a compact luxury SUV with a beautiful interior, strong performance, and advanced safety features.","fuelConsumption":"7.9","engineSize":"2.0L 4-cylinder","accessories":["Premium leather seats","Harman Kardon audio system","Hands-free power tailgate"],"functionalities":["City Safety collision avoidance technology","Pilot Assist with adaptive cruise control","9-inch Sensus touchscreen infotainment system"],"rentalPrice":"$45","rentalCompany":"Luxury Car Rentals","address":"789 Example Boulevard, Odessa, Ukraine","rentalConditions":"Minimum age: 23\\nValid driver\'s license\\nCredit card required","mileage":5966},{"id":9587,"year":2006,"make":"HUMMER","model":"H2","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hummer_h2.webp","description":"The HUMMER H2 is a rugged and powerful SUV that stands out with its imposing presence and off-road capabilities.","fuelConsumption":"19.8","engineSize":"6.0L V8","accessories":["Heated leather seats","Bose premium sound system","Off-road package"],"functionalities":["Electronic locking front and rear differentials","Stabilitrak stability control","Tire pressure monitoring system"],"rentalPrice":"$55","rentalCompany":"Adventure Car Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4771},{"id":9590,"year":2016,"make":"Subaru","model":"Outback","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/subaru_outback.jpg","description":"The Subaru Outback is a versatile and reliable SUV that combines off-road capability with a comfortable and spacious interior.","fuelConsumption":"8.7","engineSize":"2.5L 4-cylinder","accessories":["Leather upholstery","Power moonroof","Harman Kardon premium audio system"],"functionalities":["Symmetrical All-Wheel Drive","X-Mode off-road assist","Subaru EyeSight driver-assist system"],"rentalPrice":"$35","rentalCompany":"Adventure Car Rentals","address":"987 Example Street, Kyiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4061},{"id":9591,"year":2010,"make":"Mitsubishi","model":"Outlander","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mitsubishi_outlander.jpg","description":"The Mitsubishi Outlander is a practical and fuel-efficient SUV with a stylish design and a range of modern features.","fuelConsumption":"7.9","engineSize":"2.4L 4-cylinder","accessories":["Heated front seats","Rockford Fosgate premium audio system","Power liftgate"],"functionalities":["Super All-Wheel Control","Multi-View camera system","Bluetooth hands-free system"],"rentalPrice":"$30","rentalCompany":"City Car Rentals","address":"654 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5374},{"id":9593,"year":2014,"make":"Nissan","model":"Pathfinder","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/nissan_pathfinder.jpg","description":"The Nissan Pathfinder is a versatile and family-friendly SUV that offers a comfortable ride and generous cargo space.","fuelConsumption":"9.5","engineSize":"3.5L V6","accessories":["Tri-Zone Automatic Climate Control","Bose premium audio system","Rear-seat entertainment system"],"functionalities":["Intelligent 4x4 system","Advanced Drive-Assist Display","Nissan Intelligent Key with push-button ignition"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"321 Example Road, Odessa, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":6282},{"id":9596,"year":2009,"make":"Lincoln","model":"Navigator L","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lincoln_navigator_l.webp","description":"The Lincoln Navigator L is a luxurious and spacious SUV with a refined interior and advanced technology features.","fuelConsumption":"18.2","engineSize":"5.4L V8","accessories":["Premium leather seats","THX II Certified audio system","Power-deployable running boards"],"functionalities":["AdvanceTrac with Roll Stability Control","Voice-Activated Navigation System","Power liftgate"],"rentalPrice":"$50","rentalCompany":"Elite Car Rentals","address":"123 Example Boulevard, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nInsurance coverage required","mileage":6173},{"id":9597,"year":2000,"make":"GMC","model":"Yukon Denali","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/gmc_yukon_denali.jpg","description":"The GMC Yukon Denali is a full-size luxury SUV that offers a powerful engine, a comfortable and spacious interior, and a host of advanced features.","fuelConsumption":"14.5","engineSize":"6.0L V8","accessories":["Heated and ventilated front seats","BOSE premium sound system","Power-folding third-row seats"],"functionalities":["All-Wheel Drive","Adaptive suspension","Advanced safety features"],"rentalPrice":"$45","rentalCompany":"Premium Car Rentals","address":"789 Example Square, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4989},{"id":9598,"year":2007,"make":"Hyundai","model":"Tucson","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hyundai_tucson.jpg","description":"The Hyundai Tucson is a reliable and fuel-efficient SUV that combines practicality with a stylish design and a comfortable ride.","fuelConsumption":"8.2","engineSize":"2.0L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Blind Spot Detection","Hands-free smart liftgate"],"functionalities":["Front-Wheel Drive","Hillstart Assist Control","LED headlights"],"rentalPrice":"$25","rentalCompany":"Economy Car Rentals","address":"456 Example Lane, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4591},{"id":9583,"year":2006,"make":"MINI","model":"Convertible","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mini_convertible.jpg","description":"The MINI Convertible is a compact and fun-to-drive convertible that offers a unique and iconic design, agile handling, and an open-air driving experience.","fuelConsumption":"6.9","engineSize":"1.6L 4-cylinder","accessories":["Convertible soft top","Sport seats","MINI Connected infotainment system"],"functionalities":["Front-Wheel Drive","Dynamic Stability Control","Rain-sensing wipers"],"rentalPrice":"$30","rentalCompany":"Fun Car Rentals","address":"234 Example Place, Vinnytsia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":6275},{"id":9606,"year":2007,"make":"Bentley","model":"Azure","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bentley_azure.jpg","description":"The Bentley Azure is a luxurious and prestigious convertible that combines exceptional craftsmanship, powerful performance, and sophisticated elegance.","fuelConsumption":"22.5","engineSize":"6.8L V8","accessories":["Mulliner Driving Specification","Naim for Bentley premium audio system","Heated steering wheel"],"functionalities":["Rear-Wheel Drive","Air suspension","Automatic convertible roof"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"567 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4317},{"id":9612,"year":2004,"make":"Mercedes-Benz","model":"SL-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_sl_class.jpg","description":"The Mercedes-Benz SL-Class is a legendary luxury convertible that offers a perfect blend of thrilling performance, advanced technology, and opulent comfort.","fuelConsumption":"11.8","engineSize":"5.0L V8","accessories":["Airscarf neck-level heating","Harman Kardon premium audio system","Active Body Control suspension"],"functionalities":["Rear-Wheel Drive","Retractable hardtop roof","Multi-contour seats"],"rentalPrice":"$75","rentalCompany":"Exquisite Car Rentals","address":"789 Example Boulevard, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5722},{"id":9616,"year":2010,"make":"Aston Martin","model":"DBS","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/aston_martin_dbs.webp","description":"The Aston Martin DBS is a stunning and high-performance convertible that exemplifies British luxury and delivers exhilarating driving dynamics.","fuelConsumption":"16.5","engineSize":"6.0L V12","accessories":["Carbon Ceramic brakes","Bang & Olufsen BeoSound audio system","Bridge of Weir leather upholstery"],"functionalities":["Rear-Wheel Drive","Carbon-fiber body panels","Adaptive Damping System"],"rentalPrice":"$200","rentalCompany":"Supreme Car Rentals","address":"123 Example Avenue, Odessa, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6464},{"id":9619,"year":1996,"make":"Pontiac","model":"Firebird","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/pontiac_firebird.jpg","description":"The Pontiac Firebird is a classic American muscle car with bold styling, powerful engines, and an iconic presence that captures the essence of the golden era of performance.","fuelConsumption":"15.2","engineSize":"5.7L V8","accessories":["T-Top roof","Delco premium audio system","Sport suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","High-performance exhaust"],"rentalPrice":"$50","rentalCompany":"Classic Car Rentals","address":"456 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5091},{"id":9629,"year":2009,"make":"Lamborghini","model":"Murcielago","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lamborghini_murcielago.webp","description":"The Lamborghini Murcielago is an exotic and high-performance convertible that represents the epitome of Italian automotive engineering, combining breathtaking design, blistering speed, and a spine-tingling exhaust note.","fuelConsumption":"25.0","engineSize":"6.5L V12","accessories":["Carbon-fiber body panels","Alcantara upholstery","Lamborghini Infotainment System"],"functionalities":["All-Wheel Drive","Electronic Stability Control","Retractable soft-top roof"],"rentalPrice":"$500","rentalCompany":"Supercar Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5832},{"id":9631,"year":2011,"make":"Audi","model":"A5","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/audi_a5.jpg","description":"The Audi A5 is a stylish and refined convertible that offers a perfect blend of elegance, cutting-edge technology, and exhilarating driving dynamics.","fuelConsumption":"8.5","engineSize":"2.0L Inline-4","accessories":["Bang & Olufsen 3D sound system","Audi Virtual Cockpit","Audi Drive Select"],"functionalities":["Front-Wheel Drive","Quattro all-wheel drive available","Power-folding acoustic soft-top"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"987 Example Lane, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4635},{"id":9634,"year":2001,"make":"BMW","model":"Z8","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bmw_z8.jpg","description":"The BMW Z8 is a classic and timeless convertible that combines iconic retro-inspired design, outstanding performance, and luxurious comfort.","fuelConsumption":"14.2","engineSize":"4.9L V8","accessories":["Aluminum space frame","Nappa leather upholstery","Harman Kardon audio system"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Power-operated soft-top roof"],"rentalPrice":"$300","rentalCompany":"Classic Car Rentals","address":"654 Example Circle, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5990},{"id":9655,"year":1998,"make":"Chevrolet","model":"Camaro","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chevrolet_camaro.jpg","description":"The Chevrolet Camaro is an American muscle car legend with a rich heritage, boasting aggressive styling, powerful engines, and exhilarating performance.","fuelConsumption":"13.5","engineSize":"5.7L V8","accessories":["Leather upholstery","Bose premium sound system","Performance suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","Power-operated convertible top"],"rentalPrice":"$200","rentalCompany":"Muscle Car Rentals","address":"123 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6330},{"id":9685,"year":2006,"make":"Mercedes-Benz","model":"SLK-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_slk_class.jpg","description":"The Mercedes-Benz SLK-Class is a luxurious and sporty convertible that offers a perfect balance of style, performance, and refinement, delivering an enjoyable open-top driving experience.","fuelConsumption":"9.8","engineSize":"3.5L V6","accessories":["Airscarf neck-level heating","Harman Kardon surround sound system","Magic Sky Control panoramic roof"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Retractable hardtop roof"],"rentalPrice":"$250","rentalCompany":"Luxury Car Rentals","address":"456 Example Avenue, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6280},{"id":9660,"year":2020,"make":"Chrysler","model":"Voyager","type":"Van/Minivan","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chrysler_voyager.jpg","description":"The Chrysler Voyager is a practical and versatile van/minivan that provides comfortable seating, ample cargo space, and a range of convenient features for family-oriented transportation.","fuelConsumption":"8.2","engineSize":"3.6L V6","accessories":["Stow \'n Go seating","Uconnect infotainment system","Blind Spot Monitoring"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Power sliding side doors"],"rentalPrice":"$100","rentalCompany":"Family Car Rentals","address":"789 Example Boulevard, Odesa, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5807},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_hatchback.jpg","description":"The Kia Rio is a compact and fuel-efficient hatchback that offers a blend of affordability, reliability, and practicality, making it an excellent choice for urban commuting and everyday driving.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4618},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60_2.jpg","description":"The Volvo XC60 is a luxurious and versatile SUV that combines Scandinavian design, advanced safety features, and a comfortable driving experience, making it an ideal choice for families and adventure enthusiasts.","fuelConsumption":"8.5","engineSize":"2.0L 4-cylinder","accessories":["Leather upholstery","Panoramic sunroof","Harman Kardon premium sound system"],"functionalities":["All-Wheel Drive","City Safety collision avoidance technology","Power tailgate"],"rentalPrice":"$150","rentalCompany":"Premium Car Rentals","address":"987 Example Road, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6618},{"id":9618,"year":2020,"make":"Land Rover","model":"Range Rover Sport","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/land_rover_range_rover_sport.jpg","description":"The Land Rover Range Rover Sport is a premium SUV that offers a perfect blend of luxury, off-road capability, and dynamic performance, providing a refined driving experience both on and off the road.","fuelConsumption":"11.8","engineSize":"3.0L V6","accessories":["Premium Windsor leather seats","Meridian surround sound system","Adaptive Dynamics suspension"],"functionalities":["All-Wheel Drive","Terrain Response 2 system","Power-operated gesture tailgate"],"rentalPrice":"$300","rentalCompany":"Luxury SUV Rentals","address":"654 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4856},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Sedan, Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_sedan_hatchback.jpg","description":"The Kia Rio is a versatile and fuel-efficient vehicle available in both sedan and hatchback body styles, offering a comfortable cabin, modern features, and a smooth driving experience, making it an attractive choice for urban commuters.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6234},{"id":9582,"year":2008,"make":"Buick","model":"Enclave","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/buick_enclave.jpg","description":"The Buick Enclave is a stylish and spacious SUV known for its comfortable ride and luxurious features.","fuelConsumption":"10.5","engineSize":"3.6L V6","accessories":["Leather seats","Panoramic sunroof","Premium audio system"],"functionalities":["Power liftgate","Remote start","Blind-spot monitoring"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"123 Example Street, Kiev, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5858},{"id":9584,"year":2019,"make":"Volvo","model":"XC90","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc90.jpg","description":"The Volvo XC90 is a premium SUV that offers exceptional safety, advanced technology, and elegant design.","fuelConsumption":"8.3","engineSize":"2.0L 4-cylinder","accessories":["Nappa leather seats","Bowers & Wilkins premium sound system","Head-up display"],"functionalities":["IntelliSafe advanced safety features","Pilot Assist semi-autonomous driving","Four-zone automatic climate control"],"rentalPrice":"$50","rentalCompany":"Premium Auto Rentals","address":"456 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5352},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60.webp","description":"The Volvo XC60 is a compact luxury SUV with a beautiful interior, strong performance, and advanced safety features.","fuelConsumption":"7.9","engineSize":"2.0L 4-cylinder","accessories":["Premium leather seats","Harman Kardon audio system","Hands-free power tailgate"],"functionalities":["City Safety collision avoidance technology","Pilot Assist with adaptive cruise control","9-inch Sensus touchscreen infotainment system"],"rentalPrice":"$45","rentalCompany":"Luxury Car Rentals","address":"789 Example Boulevard, Odessa, Ukraine","rentalConditions":"Minimum age: 23\\nValid driver\'s license\\nCredit card required","mileage":5966},{"id":9587,"year":2006,"make":"HUMMER","model":"H2","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hummer_h2.webp","description":"The HUMMER H2 is a rugged and powerful SUV that stands out with its imposing presence and off-road capabilities.","fuelConsumption":"19.8","engineSize":"6.0L V8","accessories":["Heated leather seats","Bose premium sound system","Off-road package"],"functionalities":["Electronic locking front and rear differentials","Stabilitrak stability control","Tire pressure monitoring system"],"rentalPrice":"$55","rentalCompany":"Adventure Car Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4771},{"id":9590,"year":2016,"make":"Subaru","model":"Outback","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/subaru_outback.jpg","description":"The Subaru Outback is a versatile and reliable SUV that combines off-road capability with a comfortable and spacious interior.","fuelConsumption":"8.7","engineSize":"2.5L 4-cylinder","accessories":["Leather upholstery","Power moonroof","Harman Kardon premium audio system"],"functionalities":["Symmetrical All-Wheel Drive","X-Mode off-road assist","Subaru EyeSight driver-assist system"],"rentalPrice":"$35","rentalCompany":"Adventure Car Rentals","address":"987 Example Street, Kyiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4061},{"id":9591,"year":2010,"make":"Mitsubishi","model":"Outlander","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mitsubishi_outlander.jpg","description":"The Mitsubishi Outlander is a practical and fuel-efficient SUV with a stylish design and a range of modern features.","fuelConsumption":"7.9","engineSize":"2.4L 4-cylinder","accessories":["Heated front seats","Rockford Fosgate premium audio system","Power liftgate"],"functionalities":["Super All-Wheel Control","Multi-View camera system","Bluetooth hands-free system"],"rentalPrice":"$30","rentalCompany":"City Car Rentals","address":"654 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5374},{"id":9593,"year":2014,"make":"Nissan","model":"Pathfinder","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/nissan_pathfinder.jpg","description":"The Nissan Pathfinder is a versatile and family-friendly SUV that offers a comfortable ride and generous cargo space.","fuelConsumption":"9.5","engineSize":"3.5L V6","accessories":["Tri-Zone Automatic Climate Control","Bose premium audio system","Rear-seat entertainment system"],"functionalities":["Intelligent 4x4 system","Advanced Drive-Assist Display","Nissan Intelligent Key with push-button ignition"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"321 Example Road, Odessa, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":6282},{"id":9596,"year":2009,"make":"Lincoln","model":"Navigator L","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lincoln_navigator_l.webp","description":"The Lincoln Navigator L is a luxurious and spacious SUV with a refined interior and advanced technology features.","fuelConsumption":"18.2","engineSize":"5.4L V8","accessories":["Premium leather seats","THX II Certified audio system","Power-deployable running boards"],"functionalities":["AdvanceTrac with Roll Stability Control","Voice-Activated Navigation System","Power liftgate"],"rentalPrice":"$50","rentalCompany":"Elite Car Rentals","address":"123 Example Boulevard, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nInsurance coverage required","mileage":6173},{"id":9597,"year":2000,"make":"GMC","model":"Yukon Denali","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/gmc_yukon_denali.jpg","description":"The GMC Yukon Denali is a full-size luxury SUV that offers a powerful engine, a comfortable and spacious interior, and a host of advanced features.","fuelConsumption":"14.5","engineSize":"6.0L V8","accessories":["Heated and ventilated front seats","BOSE premium sound system","Power-folding third-row seats"],"functionalities":["All-Wheel Drive","Adaptive suspension","Advanced safety features"],"rentalPrice":"$45","rentalCompany":"Premium Car Rentals","address":"789 Example Square, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4989},{"id":9598,"year":2007,"make":"Hyundai","model":"Tucson","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hyundai_tucson.jpg","description":"The Hyundai Tucson is a reliable and fuel-efficient SUV that combines practicality with a stylish design and a comfortable ride.","fuelConsumption":"8.2","engineSize":"2.0L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Blind Spot Detection","Hands-free smart liftgate"],"functionalities":["Front-Wheel Drive","Hillstart Assist Control","LED headlights"],"rentalPrice":"$25","rentalCompany":"Economy Car Rentals","address":"456 Example Lane, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4591},{"id":9583,"year":2006,"make":"MINI","model":"Convertible","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mini_convertible.jpg","description":"The MINI Convertible is a compact and fun-to-drive convertible that offers a unique and iconic design, agile handling, and an open-air driving experience.","fuelConsumption":"6.9","engineSize":"1.6L 4-cylinder","accessories":["Convertible soft top","Sport seats","MINI Connected infotainment system"],"functionalities":["Front-Wheel Drive","Dynamic Stability Control","Rain-sensing wipers"],"rentalPrice":"$30","rentalCompany":"Fun Car Rentals","address":"234 Example Place, Vinnytsia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":6275},{"id":9606,"year":2007,"make":"Bentley","model":"Azure","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bentley_azure.jpg","description":"The Bentley Azure is a luxurious and prestigious convertible that combines exceptional craftsmanship, powerful performance, and sophisticated elegance.","fuelConsumption":"22.5","engineSize":"6.8L V8","accessories":["Mulliner Driving Specification","Naim for Bentley premium audio system","Heated steering wheel"],"functionalities":["Rear-Wheel Drive","Air suspension","Automatic convertible roof"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"567 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4317},{"id":9612,"year":2004,"make":"Mercedes-Benz","model":"SL-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_sl_class.jpg","description":"The Mercedes-Benz SL-Class is a legendary luxury convertible that offers a perfect blend of thrilling performance, advanced technology, and opulent comfort.","fuelConsumption":"11.8","engineSize":"5.0L V8","accessories":["Airscarf neck-level heating","Harman Kardon premium audio system","Active Body Control suspension"],"functionalities":["Rear-Wheel Drive","Retractable hardtop roof","Multi-contour seats"],"rentalPrice":"$75","rentalCompany":"Exquisite Car Rentals","address":"789 Example Boulevard, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5722},{"id":9616,"year":2010,"make":"Aston Martin","model":"DBS","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/aston_martin_dbs.webp","description":"The Aston Martin DBS is a stunning and high-performance convertible that exemplifies British luxury and delivers exhilarating driving dynamics.","fuelConsumption":"16.5","engineSize":"6.0L V12","accessories":["Carbon Ceramic brakes","Bang & Olufsen BeoSound audio system","Bridge of Weir leather upholstery"],"functionalities":["Rear-Wheel Drive","Carbon-fiber body panels","Adaptive Damping System"],"rentalPrice":"$200","rentalCompany":"Supreme Car Rentals","address":"123 Example Avenue, Odessa, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6464},{"id":9619,"year":1996,"make":"Pontiac","model":"Firebird","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/pontiac_firebird.jpg","description":"The Pontiac Firebird is a classic American muscle car with bold styling, powerful engines, and an iconic presence that captures the essence of the golden era of performance.","fuelConsumption":"15.2","engineSize":"5.7L V8","accessories":["T-Top roof","Delco premium audio system","Sport suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","High-performance exhaust"],"rentalPrice":"$50","rentalCompany":"Classic Car Rentals","address":"456 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5091},{"id":9629,"year":2009,"make":"Lamborghini","model":"Murcielago","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lamborghini_murcielago.webp","description":"The Lamborghini Murcielago is an exotic and high-performance convertible that represents the epitome of Italian automotive engineering, combining breathtaking design, blistering speed, and a spine-tingling exhaust note.","fuelConsumption":"25.0","engineSize":"6.5L V12","accessories":["Carbon-fiber body panels","Alcantara upholstery","Lamborghini Infotainment System"],"functionalities":["All-Wheel Drive","Electronic Stability Control","Retractable soft-top roof"],"rentalPrice":"$500","rentalCompany":"Supercar Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5832},{"id":9631,"year":2011,"make":"Audi","model":"A5","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/audi_a5.jpg","description":"The Audi A5 is a stylish and refined convertible that offers a perfect blend of elegance, cutting-edge technology, and exhilarating driving dynamics.","fuelConsumption":"8.5","engineSize":"2.0L Inline-4","accessories":["Bang & Olufsen 3D sound system","Audi Virtual Cockpit","Audi Drive Select"],"functionalities":["Front-Wheel Drive","Quattro all-wheel drive available","Power-folding acoustic soft-top"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"987 Example Lane, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4635},{"id":9634,"year":2001,"make":"BMW","model":"Z8","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bmw_z8.jpg","description":"The BMW Z8 is a classic and timeless convertible that combines iconic retro-inspired design, outstanding performance, and luxurious comfort.","fuelConsumption":"14.2","engineSize":"4.9L V8","accessories":["Aluminum space frame","Nappa leather upholstery","Harman Kardon audio system"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Power-operated soft-top roof"],"rentalPrice":"$300","rentalCompany":"Classic Car Rentals","address":"654 Example Circle, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5990},{"id":9655,"year":1998,"make":"Chevrolet","model":"Camaro","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chevrolet_camaro.jpg","description":"The Chevrolet Camaro is an American muscle car legend with a rich heritage, boasting aggressive styling, powerful engines, and exhilarating performance.","fuelConsumption":"13.5","engineSize":"5.7L V8","accessories":["Leather upholstery","Bose premium sound system","Performance suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","Power-operated convertible top"],"rentalPrice":"$200","rentalCompany":"Muscle Car Rentals","address":"123 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6330},{"id":9685,"year":2006,"make":"Mercedes-Benz","model":"SLK-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_slk_class.jpg","description":"The Mercedes-Benz SLK-Class is a luxurious and sporty convertible that offers a perfect balance of style, performance, and refinement, delivering an enjoyable open-top driving experience.","fuelConsumption":"9.8","engineSize":"3.5L V6","accessories":["Airscarf neck-level heating","Harman Kardon surround sound system","Magic Sky Control panoramic roof"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Retractable hardtop roof"],"rentalPrice":"$250","rentalCompany":"Luxury Car Rentals","address":"456 Example Avenue, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6280},{"id":9660,"year":2020,"make":"Chrysler","model":"Voyager","type":"Van/Minivan","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chrysler_voyager.jpg","description":"The Chrysler Voyager is a practical and versatile van/minivan that provides comfortable seating, ample cargo space, and a range of convenient features for family-oriented transportation.","fuelConsumption":"8.2","engineSize":"3.6L V6","accessories":["Stow \'n Go seating","Uconnect infotainment system","Blind Spot Monitoring"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Power sliding side doors"],"rentalPrice":"$100","rentalCompany":"Family Car Rentals","address":"789 Example Boulevard, Odesa, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5807},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_hatchback.jpg","description":"The Kia Rio is a compact and fuel-efficient hatchback that offers a blend of affordability, reliability, and practicality, making it an excellent choice for urban commuting and everyday driving.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4618},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60_2.jpg","description":"The Volvo XC60 is a luxurious and versatile SUV that combines Scandinavian design, advanced safety features, and a comfortable driving experience, making it an ideal choice for families and adventure enthusiasts.","fuelConsumption":"8.5","engineSize":"2.0L 4-cylinder","accessories":["Leather upholstery","Panoramic sunroof","Harman Kardon premium sound system"],"functionalities":["All-Wheel Drive","City Safety collision avoidance technology","Power tailgate"],"rentalPrice":"$150","rentalCompany":"Premium Car Rentals","address":"987 Example Road, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6618},{"id":9618,"year":2020,"make":"Land Rover","model":"Range Rover Sport","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/land_rover_range_rover_sport.jpg","description":"The Land Rover Range Rover Sport is a premium SUV that offers a perfect blend of luxury, off-road capability, and dynamic performance, providing a refined driving experience both on and off the road.","fuelConsumption":"11.8","engineSize":"3.0L V6","accessories":["Premium Windsor leather seats","Meridian surround sound system","Adaptive Dynamics suspension"],"functionalities":["All-Wheel Drive","Terrain Response 2 system","Power-operated gesture tailgate"],"rentalPrice":"$300","rentalCompany":"Luxury SUV Rentals","address":"654 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4856},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Sedan, Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_sedan_hatchback.jpg","description":"The Kia Rio is a versatile and fuel-efficient vehicle available in both sedan and hatchback body styles, offering a comfortable cabin, modern features, and a smooth driving experience, making it an attractive choice for urban commuters.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6234}]');function Ye(){var e=(0,p.Z)(new Set(Ge.map((function(e){return{value:e.make,label:e.make}}))));return(0,S.jsxs)($e,{children:[(0,S.jsxs)(Fe,{children:[(0,S.jsx)(We,{htmlFor:"nameSelect",children:"Car brand"}),(0,S.jsx)(Be.ZP,{id:"nameSelect",placeholder:"Enter the text",options:e,styles:{control:function(e){return(0,U.Z)((0,U.Z)({},e),{},{width:"224px",height:"48px",borderColor:"rgba(18, 20, 23, 0.2)",border:"none",borderRadius:"14px",padding:"8px",fontSize:"16px",fontFamily:"ManropeMedium",backgroundColor:"rgba(247, 247, 251, 1)",appearance:"none"})},option:function(e,i){var n=i.isFocused;return(0,U.Z)((0,U.Z)({},e),{},{color:n?"black":"rgba(18, 20, 23, 0.2)",fontFamily:"ManropeMedium"})},menuList:function(e){return(0,U.Z)((0,U.Z)({},e),{},{"::-webkit-scrollbar":{width:"9px"},"::-webkit-scrollbar-track":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb:hover":{background:"rgba(18, 20, 23, 0.05)"}})},placeholder:function(e){return(0,U.Z)((0,U.Z)({},e),{},{color:"rgba(18, 20, 23, 1)"})}},components:{IndicatorSeparator:function(){return null}}})]}),(0,S.jsxs)(Fe,{children:[(0,S.jsx)(We,{htmlFor:"priceSelect",children:"Price/ 1 hour"}),(0,S.jsx)(Be.ZP,{id:"priceSelect",placeholder:"To $",options:["$10","$20","$30","$40","$50","$60","$70","$80","$90","$100"].map((function(e){return{value:e,label:e}})),styles:{control:function(e){return(0,U.Z)((0,U.Z)({},e),{},{width:"125",height:"48px",borderColor:"rgba(18, 20, 23, 0.2)",border:"none",borderRadius:"14px",padding:"8px",fontSize:"16px",fontFamily:"ManropeMedium",backgroundColor:"rgba(247, 247, 251, 1)",appearance:"none"})},option:function(e,i){var n=i.isFocused;return(0,U.Z)((0,U.Z)({},e),{},{color:n?"black":"rgba(18, 20, 23, 0.2)",fontFamily:"ManropeMedium"})},menuList:function(e){return(0,U.Z)((0,U.Z)({},e),{},{"::-webkit-scrollbar":{width:"9px"},"::-webkit-scrollbar-track":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb:hover":{background:"rgba(18, 20, 23, 0.05)"}})},placeholder:function(e){return(0,U.Z)((0,U.Z)({},e),{},{color:"rgba(18, 20, 23, 1)"})}},components:{IndicatorSeparator:function(){return null}}})]}),(0,S.jsxs)(Ke,{children:[(0,S.jsx)(We,{children:"Car mileage / km"}),(0,S.jsxs)(He,{children:[(0,S.jsx)(Ie,{type:"text"}),(0,S.jsx)(Ne,{children:"From"}),(0,S.jsx)(Oe,{type:"text"}),(0,S.jsx)(Xe,{children:"To"})]})]}),(0,S.jsx)(k,{text:"Search",onClick:function(){return console.log()},width:"135px"})]})}var Qe=n(722),Je=n(6095);function ei(){var e=(0,h.useState)(1),i=(0,g.Z)(e,2),n=i[0],a=i[1],r=(0,h.useState)([]),t=(0,g.Z)(r,2),o=t[0],s=t[1],l=(0,Qe.U)(n),d=l.data,c=l.error,m=l.isLoading,u=l.isFetching;return(0,h.useEffect)((function(){d&&s((function(e){return[].concat((0,p.Z)(e),(0,p.Z)(d))}))}),[d]),(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(De,{children:(0,S.jsx)(Ye,{})}),(0,S.jsx)(_e,{children:c?(0,S.jsx)(S.Fragment,{children:"Oops, there was an error..."}):m?(0,S.jsx)(Je.a,{}):o.length>0?(0,S.jsx)(S.Fragment,{children:o.map((function(e){return(0,S.jsx)(Le,{data:e},e.id)}))}):null}),d&&d.length>=8&&(0,S.jsx)(Te,{onClick:function(){a(n+1)},disabled:u,children:"Load more"})]})}}}]); -//# sourceMappingURL=112.451f1206.chunk.js.map \ No newline at end of file diff --git a/static/js/112.85da9c57.chunk.js b/static/js/112.85da9c57.chunk.js new file mode 100644 index 0000000..a577ac1 --- /dev/null +++ b/static/js/112.85da9c57.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkrental_car=self.webpackChunkrental_car||[]).push([[112],{8112:function(e,i,n){n.r(i),n.d(i,{default:function(){return ei}});var a,r,t,o,s,l,d,c,m,u,p=n(3433),g=n(9439),h=n(2791),f=n(168),y=n(7630),v=n(4294),b=n(6088),x=(0,y.ZP)(v.Z)((function(e){var i=e.theme;return{width:e.width,padding:"12px 0 12px 0",borderRadius:"12px",color:i.palette.getContrastText("#3470FF"),backgroundColor:"#3470FF","&:hover":{backgroundColor:"#0B44CD"}}})),C=b.Z.span(a||(a=(0,f.Z)(["\n color: #ffffff;\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n line-height: 1.42;\n text-transform: none;\n"]))),S=n(3329);function k(e){var i=e.text,n=e.onClick,a=e.width;return(0,S.jsx)(x,{variant:"contained",onClick:n,style:{width:a},children:(0,S.jsx)(C,{children:i})})}var w,V=b.Z.div(r||(r=(0,f.Z)(["\n display: flex;\n width: 274px;\n height: 426px;\n flex-direction: column;\n align-items: flex-start;\n"]))),z=b.Z.div(t||(t=(0,f.Z)(["\n position: relative;\n width: 274px;\n height: 268px;\n margin-bottom: 14px;\n"]))),L=b.Z.img(o||(o=(0,f.Z)(["\n width: 100%;\n height: 268px;\n object-fit: cover;\n border-radius: 14px;\n"]))),j=b.Z.div(s||(s=(0,f.Z)(["\n width: 274px;\n align-items: center;\n color: #121417;\n display: flex;\n justify-content: space-between;\n margin-bottom: 8px;\n"]))),P=b.Z.h3(l||(l=(0,f.Z)(["\n color: #121417;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.5;\n"]))),M=b.Z.span(d||(d=(0,f.Z)(["\n color: #3470ff;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.5;\n"]))),R=b.Z.p(c||(c=(0,f.Z)(["\n color: #121417;\n font-size: 16px;\n font-weight: 500;\n line-height: 1.5;\n"]))),Z=b.Z.ul(m||(m=(0,f.Z)(["\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: fit-content;\n row-gap: 4px;\n margin-bottom: 28px;\n width: 255px;\n height: 40px;\n overflow: hidden;\n"]))),A=b.Z.li(u||(u=(0,f.Z)(["\n color: rgba(18, 20, 23, 0.5);\n font-size: 12px;\n font-weight: 400;\n line-height: 1.5;\n\n :not(:last-child) {\n border-right: 1px solid rgba(18, 20, 23, 0.1);\n margin-right: 6px;\n padding-right: 6px;\n }\n"]))),U=n(1413),q=n(4957),E=n(7488),D=n(7237),_=b.Z.div(w||(w=(0,f.Z)(["\n position: absolute;\n top: 0;\n right: 0;\n"]))),T=(0,y.ZP)(D.Z)({fill:"#3470FF"}),B=(0,y.ZP)(E.Z)({fill:"#FFFFFFCC"}),$={inputProps:{"aria-label":"Checkbox demo"}};function F(){return(0,S.jsx)(_,{children:(0,S.jsx)(q.Z,(0,U.Z)((0,U.Z)({},$),{},{icon:(0,S.jsx)(B,{}),checkedIcon:(0,S.jsx)(T,{})}))})}var H=n(6747),K=n(8237);var W,I,O,N,X,G,Y,Q,J,ee,ie,ne,ae,re,te,oe,se,le,de=n.p+"static/media/close.70f65c7e87a4e1e47d5b73074981fa46.svg",ce=b.Z.div(W||(W=(0,f.Z)(["\n position: relative;\n padding: 34px;\n"]))),me=b.Z.button(I||(I=(0,f.Z)(["\n position: absolute;\n background-color: transparent;\n border: none;\n top: 8px;\n right: 6px;\n cursor: pointer;\n"]))),ue=b.Z.img(O||(O=(0,f.Z)(["\n width: 30px;\n height: 30px;\n"]))),pe=b.Z.img(N||(N=(0,f.Z)(["\n width: 100%;\n height: 314px;\n display: block;\n object-fit: cover;\n border-radius: 14px;\n"]))),ge=b.Z.div(X||(X=(0,f.Z)(["\n margin-top: 14px;\n margin-bottom: 24px;\n"]))),he=b.Z.div(G||(G=(0,f.Z)(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-top: 14px;\n padding-bottom: 8px;\n"]))),fe=b.Z.h2(Y||(Y=(0,f.Z)(["\n font-weight: 500;\n font-size: 18px;\n line-height: 1.33;\n color: #121417;\n"]))),ye=b.Z.span(Q||(Q=(0,f.Z)(["\n color: #3470ff;\n"]))),ve=b.Z.ul(J||(J=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n"]))),be=b.Z.li(ee||(ee=(0,f.Z)(["\n font-size: 12px;\n color: rgba(18, 20, 23, 0.5);\n display: flex;\n align-items: center;\n\n &:not(:last-child)::after {\n content: '';\n display: inline-block;\n width: 1px;\n height: 16px;\n background-color: rgba(18, 20, 23, 0.1);\n margin-left: 6px;\n margin-right: 6px;\n }\n"]))),xe=b.Z.p(ie||(ie=(0,f.Z)(["\n line-height: 1.43;\n margin-top: 14px;\n width: 461px;\n"]))),Ce=b.Z.h3(ne||(ne=(0,f.Z)(["\n font-weight: 400;\n font-size: 14px;\n line-height: 1.43;\n color: #121417;\n margin-top: 24px;\n margin-bottom: 8px;\n"]))),Se=b.Z.ul(ae||(ae=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n\n font-size: 12px;\n letter-spacing: -0.24px;\n\n @media screen and (min-width: 768px) {\n width: 461px;\n }\n"]))),ke=b.Z.li(re||(re=(0,f.Z)(["\n border-radius: 35px;\n color: #363535;\n background-color: #f9f9f9;\n padding: 7px 14px;\n"]))),we=b.Z.span(te||(te=(0,f.Z)(["\n color: #3470ff;\n font-weight: 600;\n"]))),Ve={position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:541,maxHeight:830,bgcolor:"background.paper",borderRadius:6,boxShadow:24};function ze(e){var i=e.open,n=e.onClose,a=e.data;return(0,S.jsx)("div",{children:(0,S.jsx)(K.Z,{open:i,onClose:n,"aria-labelledby":"modal-modal-title","aria-describedby":"modal-modal-description",children:(0,S.jsx)(H.Z,{sx:Ve,children:(0,S.jsxs)(ce,{children:[(0,S.jsx)(me,{onClick:n,children:(0,S.jsx)(ue,{src:de,alt:"Close button"})}),(0,S.jsx)(pe,{src:a.img,alt:a.make,width:"461",height:"248"}),(0,S.jsxs)(ge,{children:[(0,S.jsx)(he,{children:(0,S.jsxs)(fe,{children:[a.make," ",(0,S.jsxs)(ye,{children:[a.model,", "]}),a.year]})}),(0,S.jsxs)(ve,{children:[(0,S.jsx)(be,{children:a.address.split(",")[1]}),(0,S.jsx)(be,{children:a.address.split(",")[2]}),(0,S.jsx)(be,{children:"Id: "}),(0,S.jsxs)(be,{children:["Year: ",a.year]}),(0,S.jsxs)(be,{children:["Type: ",a.type]})]}),(0,S.jsxs)(ve,{children:[(0,S.jsxs)(be,{children:["Fuel Consumption: ",a.fuelConsumption]}),(0,S.jsxs)(be,{children:["Engine Size: ",a.engineSize]})]}),(0,S.jsx)(xe,{children:a.description}),(0,S.jsx)(Ce,{children:"Accessories and functionalities:"}),(0,S.jsx)(ve,{children:a.accessories.map((function(e){return(0,S.jsx)(be,{children:e},e)}))}),(0,S.jsx)(ve,{children:a.functionalities.map((function(e){return(0,S.jsx)(be,{children:e},e)}))}),(0,S.jsx)(Ce,{children:"Rental Conditions:"}),(0,S.jsxs)(Se,{children:[(0,S.jsxs)(ke,{children:["Minimum age:"," ",(0,S.jsx)(we,{children:(new Date).getFullYear()-a.year})]}),(0,S.jsx)(ke,{children:a.rentalConditions.split("\n")[1]}),(0,S.jsx)(ke,{children:a.rentalConditions.split("\n")[2]}),(0,S.jsxs)(ke,{children:["Mileage:"," ",(0,S.jsx)(we,{children:a.mileage.toLocaleString("en-US")})]}),(0,S.jsxs)(ke,{children:["Price: ",(0,S.jsx)(we,{children:a.rentalPrice})]})]})]}),(0,S.jsx)(k,{text:"Rental car",width:"168px",onClick:function(){window.location.href="tel:+380730000000"}})]})})})})}function Le(e){var i=e.data,n=(0,h.useState)(!1),a=(0,g.Z)(n,2),r=a[0],t=a[1];return(0,S.jsxs)(V,{children:[(0,S.jsxs)(z,{children:[(0,S.jsx)(F,{}),(0,S.jsx)(L,{src:i.img,alt:"Car"})]}),(0,S.jsxs)(j,{children:[(0,S.jsxs)(P,{children:[i.make," ","",(0,S.jsx)(M,{children:i.model}),", ",i.year]}),(0,S.jsxs)(R,{children:[" ",i.rentalPrice]})]}),(0,S.jsxs)(Z,{children:[(0,S.jsx)(A,{children:i.address.split(",")[1]}),(0,S.jsx)(A,{children:i.address.split(",")[2]}),(0,S.jsx)(A,{children:i.rentalCompany}),(0,S.jsx)(A,{children:i.type}),(0,S.jsx)(A,{children:i.model}),(0,S.jsx)(A,{children:i.mileage}),(0,S.jsx)(A,{children:i.accessories[0]})]}),(0,S.jsx)(k,{onClick:function(){return t(!0)},text:"Learn more",width:"274px"}),r&&(0,S.jsx)(ze,{open:r,onClose:function(){return t(!1)},data:i})]})}var je,Pe,Me,Re,Ze,Ae,Ue,qe,Ee,De=b.Z.div(oe||(oe=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n padding-left: 128px;\n padding-right: 128px;\n"]))),_e=b.Z.div(se||(se=(0,f.Z)(["\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 50px 29px;\n margin-top: 50px;\n width: 1184px;\n margin-left: auto;\n margin-right: auto;\n"]))),Te=b.Z.a(le||(le=(0,f.Z)(["\n color: #3470ff;\n font-family: 'Manrope';\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n line-height: 1.5;\n text-decoration-line: underline;\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 100px;\n padding-bottom: 100px;\n cursor: pointer;\n\n &:hover {\n color: #0b44cd;\n }\n"]))),Be=n(2647),$e=b.Z.div(je||(je=(0,f.Z)(["\n display: flex;\n align-items: flex-end;\n margin-top: 50px;\n gap: 8px;\n"]))),Fe=b.Z.div(Pe||(Pe=(0,f.Z)(["\n display: flex;\n flex-direction: column;\n"]))),He=b.Z.div(Me||(Me=(0,f.Z)(["\n display: flex;\n position: relative;\n height: 48px;\n"]))),Ke=b.Z.form(Re||(Re=(0,f.Z)(["\n display: flex;\n flex-direction: column;\n"]))),We=b.Z.label(Ze||(Ze=(0,f.Z)(["\n font-size: 14px;\n color: rgba(138, 138, 137, 1);\n font-family: 'Manrope';\n padding-left: 5px;\n margin-bottom: 8px;\n"]))),Ie=b.Z.input(Ae||(Ae=(0,f.Z)(["\n display: block;\n width: 160px;\n height: 48px;\n border: none;\n border-right: 1px solid rgba(138, 138, 137, 0.2);\n background-color: rgba(247, 247, 251, 1);\n border-radius: 14px 0 0 14px;\n padding-left: 0;\n text-indent: 70px;\n\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Oe=b.Z.input(Ue||(Ue=(0,f.Z)(["\n display: block;\n width: 160px;\n height: 48px;\n border: none;\n background-color: rgba(247, 247, 251, 1);\n border-radius: 0 14px 14px 0;\n padding-left: 0;\n text-indent: 45px;\n\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Ne=b.Z.span(qe||(qe=(0,f.Z)(["\n position: absolute;\n display: block;\n left: 20px;\n top: 15px;\n z-index: 9;\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Xe=b.Z.span(Ee||(Ee=(0,f.Z)(["\n position: absolute;\n display: block;\n left: 180px;\n top: 15px;\n z-index: 9;\n font-family: 'Manrope';\n color: rgba(18, 20, 23, 1);\n font-size: 18px;\n"]))),Ge=JSON.parse('[{"id":9582,"year":2008,"make":"Buick","model":"Enclave","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/buick_enclave.jpg","description":"The Buick Enclave is a stylish and spacious SUV known for its comfortable ride and luxurious features.","fuelConsumption":"10.5","engineSize":"3.6L V6","accessories":["Leather seats","Panoramic sunroof","Premium audio system"],"functionalities":["Power liftgate","Remote start","Blind-spot monitoring"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"123 Example Street, Kiev, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5858},{"id":9584,"year":2019,"make":"Volvo","model":"XC90","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc90.jpg","description":"The Volvo XC90 is a premium SUV that offers exceptional safety, advanced technology, and elegant design.","fuelConsumption":"8.3","engineSize":"2.0L 4-cylinder","accessories":["Nappa leather seats","Bowers & Wilkins premium sound system","Head-up display"],"functionalities":["IntelliSafe advanced safety features","Pilot Assist semi-autonomous driving","Four-zone automatic climate control"],"rentalPrice":"$50","rentalCompany":"Premium Auto Rentals","address":"456 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5352},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60.webp","description":"The Volvo XC60 is a compact luxury SUV with a beautiful interior, strong performance, and advanced safety features.","fuelConsumption":"7.9","engineSize":"2.0L 4-cylinder","accessories":["Premium leather seats","Harman Kardon audio system","Hands-free power tailgate"],"functionalities":["City Safety collision avoidance technology","Pilot Assist with adaptive cruise control","9-inch Sensus touchscreen infotainment system"],"rentalPrice":"$45","rentalCompany":"Luxury Car Rentals","address":"789 Example Boulevard, Odessa, Ukraine","rentalConditions":"Minimum age: 23\\nValid driver\'s license\\nCredit card required","mileage":5966},{"id":9587,"year":2006,"make":"HUMMER","model":"H2","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hummer_h2.webp","description":"The HUMMER H2 is a rugged and powerful SUV that stands out with its imposing presence and off-road capabilities.","fuelConsumption":"19.8","engineSize":"6.0L V8","accessories":["Heated leather seats","Bose premium sound system","Off-road package"],"functionalities":["Electronic locking front and rear differentials","Stabilitrak stability control","Tire pressure monitoring system"],"rentalPrice":"$55","rentalCompany":"Adventure Car Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4771},{"id":9590,"year":2016,"make":"Subaru","model":"Outback","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/subaru_outback.jpg","description":"The Subaru Outback is a versatile and reliable SUV that combines off-road capability with a comfortable and spacious interior.","fuelConsumption":"8.7","engineSize":"2.5L 4-cylinder","accessories":["Leather upholstery","Power moonroof","Harman Kardon premium audio system"],"functionalities":["Symmetrical All-Wheel Drive","X-Mode off-road assist","Subaru EyeSight driver-assist system"],"rentalPrice":"$35","rentalCompany":"Adventure Car Rentals","address":"987 Example Street, Kyiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4061},{"id":9591,"year":2010,"make":"Mitsubishi","model":"Outlander","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mitsubishi_outlander.jpg","description":"The Mitsubishi Outlander is a practical and fuel-efficient SUV with a stylish design and a range of modern features.","fuelConsumption":"7.9","engineSize":"2.4L 4-cylinder","accessories":["Heated front seats","Rockford Fosgate premium audio system","Power liftgate"],"functionalities":["Super All-Wheel Control","Multi-View camera system","Bluetooth hands-free system"],"rentalPrice":"$30","rentalCompany":"City Car Rentals","address":"654 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5374},{"id":9593,"year":2014,"make":"Nissan","model":"Pathfinder","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/nissan_pathfinder.jpg","description":"The Nissan Pathfinder is a versatile and family-friendly SUV that offers a comfortable ride and generous cargo space.","fuelConsumption":"9.5","engineSize":"3.5L V6","accessories":["Tri-Zone Automatic Climate Control","Bose premium audio system","Rear-seat entertainment system"],"functionalities":["Intelligent 4x4 system","Advanced Drive-Assist Display","Nissan Intelligent Key with push-button ignition"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"321 Example Road, Odessa, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":6282},{"id":9596,"year":2009,"make":"Lincoln","model":"Navigator L","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lincoln_navigator_l.webp","description":"The Lincoln Navigator L is a luxurious and spacious SUV with a refined interior and advanced technology features.","fuelConsumption":"18.2","engineSize":"5.4L V8","accessories":["Premium leather seats","THX II Certified audio system","Power-deployable running boards"],"functionalities":["AdvanceTrac with Roll Stability Control","Voice-Activated Navigation System","Power liftgate"],"rentalPrice":"$50","rentalCompany":"Elite Car Rentals","address":"123 Example Boulevard, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nInsurance coverage required","mileage":6173},{"id":9597,"year":2000,"make":"GMC","model":"Yukon Denali","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/gmc_yukon_denali.jpg","description":"The GMC Yukon Denali is a full-size luxury SUV that offers a powerful engine, a comfortable and spacious interior, and a host of advanced features.","fuelConsumption":"14.5","engineSize":"6.0L V8","accessories":["Heated and ventilated front seats","BOSE premium sound system","Power-folding third-row seats"],"functionalities":["All-Wheel Drive","Adaptive suspension","Advanced safety features"],"rentalPrice":"$45","rentalCompany":"Premium Car Rentals","address":"789 Example Square, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4989},{"id":9598,"year":2007,"make":"Hyundai","model":"Tucson","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hyundai_tucson.jpg","description":"The Hyundai Tucson is a reliable and fuel-efficient SUV that combines practicality with a stylish design and a comfortable ride.","fuelConsumption":"8.2","engineSize":"2.0L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Blind Spot Detection","Hands-free smart liftgate"],"functionalities":["Front-Wheel Drive","Hillstart Assist Control","LED headlights"],"rentalPrice":"$25","rentalCompany":"Economy Car Rentals","address":"456 Example Lane, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4591},{"id":9583,"year":2006,"make":"MINI","model":"Convertible","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mini_convertible.jpg","description":"The MINI Convertible is a compact and fun-to-drive convertible that offers a unique and iconic design, agile handling, and an open-air driving experience.","fuelConsumption":"6.9","engineSize":"1.6L 4-cylinder","accessories":["Convertible soft top","Sport seats","MINI Connected infotainment system"],"functionalities":["Front-Wheel Drive","Dynamic Stability Control","Rain-sensing wipers"],"rentalPrice":"$30","rentalCompany":"Fun Car Rentals","address":"234 Example Place, Vinnytsia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":6275},{"id":9606,"year":2007,"make":"Bentley","model":"Azure","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bentley_azure.jpg","description":"The Bentley Azure is a luxurious and prestigious convertible that combines exceptional craftsmanship, powerful performance, and sophisticated elegance.","fuelConsumption":"22.5","engineSize":"6.8L V8","accessories":["Mulliner Driving Specification","Naim for Bentley premium audio system","Heated steering wheel"],"functionalities":["Rear-Wheel Drive","Air suspension","Automatic convertible roof"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"567 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4317},{"id":9612,"year":2004,"make":"Mercedes-Benz","model":"SL-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_sl_class.jpg","description":"The Mercedes-Benz SL-Class is a legendary luxury convertible that offers a perfect blend of thrilling performance, advanced technology, and opulent comfort.","fuelConsumption":"11.8","engineSize":"5.0L V8","accessories":["Airscarf neck-level heating","Harman Kardon premium audio system","Active Body Control suspension"],"functionalities":["Rear-Wheel Drive","Retractable hardtop roof","Multi-contour seats"],"rentalPrice":"$75","rentalCompany":"Exquisite Car Rentals","address":"789 Example Boulevard, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5722},{"id":9616,"year":2010,"make":"Aston Martin","model":"DBS","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/aston_martin_dbs.webp","description":"The Aston Martin DBS is a stunning and high-performance convertible that exemplifies British luxury and delivers exhilarating driving dynamics.","fuelConsumption":"16.5","engineSize":"6.0L V12","accessories":["Carbon Ceramic brakes","Bang & Olufsen BeoSound audio system","Bridge of Weir leather upholstery"],"functionalities":["Rear-Wheel Drive","Carbon-fiber body panels","Adaptive Damping System"],"rentalPrice":"$200","rentalCompany":"Supreme Car Rentals","address":"123 Example Avenue, Odessa, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6464},{"id":9619,"year":1996,"make":"Pontiac","model":"Firebird","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/pontiac_firebird.jpg","description":"The Pontiac Firebird is a classic American muscle car with bold styling, powerful engines, and an iconic presence that captures the essence of the golden era of performance.","fuelConsumption":"15.2","engineSize":"5.7L V8","accessories":["T-Top roof","Delco premium audio system","Sport suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","High-performance exhaust"],"rentalPrice":"$50","rentalCompany":"Classic Car Rentals","address":"456 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5091},{"id":9629,"year":2009,"make":"Lamborghini","model":"Murcielago","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lamborghini_murcielago.webp","description":"The Lamborghini Murcielago is an exotic and high-performance convertible that represents the epitome of Italian automotive engineering, combining breathtaking design, blistering speed, and a spine-tingling exhaust note.","fuelConsumption":"25.0","engineSize":"6.5L V12","accessories":["Carbon-fiber body panels","Alcantara upholstery","Lamborghini Infotainment System"],"functionalities":["All-Wheel Drive","Electronic Stability Control","Retractable soft-top roof"],"rentalPrice":"$500","rentalCompany":"Supercar Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5832},{"id":9631,"year":2011,"make":"Audi","model":"A5","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/audi_a5.jpg","description":"The Audi A5 is a stylish and refined convertible that offers a perfect blend of elegance, cutting-edge technology, and exhilarating driving dynamics.","fuelConsumption":"8.5","engineSize":"2.0L Inline-4","accessories":["Bang & Olufsen 3D sound system","Audi Virtual Cockpit","Audi Drive Select"],"functionalities":["Front-Wheel Drive","Quattro all-wheel drive available","Power-folding acoustic soft-top"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"987 Example Lane, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4635},{"id":9634,"year":2001,"make":"BMW","model":"Z8","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bmw_z8.jpg","description":"The BMW Z8 is a classic and timeless convertible that combines iconic retro-inspired design, outstanding performance, and luxurious comfort.","fuelConsumption":"14.2","engineSize":"4.9L V8","accessories":["Aluminum space frame","Nappa leather upholstery","Harman Kardon audio system"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Power-operated soft-top roof"],"rentalPrice":"$300","rentalCompany":"Classic Car Rentals","address":"654 Example Circle, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5990},{"id":9655,"year":1998,"make":"Chevrolet","model":"Camaro","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chevrolet_camaro.jpg","description":"The Chevrolet Camaro is an American muscle car legend with a rich heritage, boasting aggressive styling, powerful engines, and exhilarating performance.","fuelConsumption":"13.5","engineSize":"5.7L V8","accessories":["Leather upholstery","Bose premium sound system","Performance suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","Power-operated convertible top"],"rentalPrice":"$200","rentalCompany":"Muscle Car Rentals","address":"123 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6330},{"id":9685,"year":2006,"make":"Mercedes-Benz","model":"SLK-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_slk_class.jpg","description":"The Mercedes-Benz SLK-Class is a luxurious and sporty convertible that offers a perfect balance of style, performance, and refinement, delivering an enjoyable open-top driving experience.","fuelConsumption":"9.8","engineSize":"3.5L V6","accessories":["Airscarf neck-level heating","Harman Kardon surround sound system","Magic Sky Control panoramic roof"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Retractable hardtop roof"],"rentalPrice":"$250","rentalCompany":"Luxury Car Rentals","address":"456 Example Avenue, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6280},{"id":9660,"year":2020,"make":"Chrysler","model":"Voyager","type":"Van/Minivan","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chrysler_voyager.jpg","description":"The Chrysler Voyager is a practical and versatile van/minivan that provides comfortable seating, ample cargo space, and a range of convenient features for family-oriented transportation.","fuelConsumption":"8.2","engineSize":"3.6L V6","accessories":["Stow \'n Go seating","Uconnect infotainment system","Blind Spot Monitoring"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Power sliding side doors"],"rentalPrice":"$100","rentalCompany":"Family Car Rentals","address":"789 Example Boulevard, Odesa, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5807},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_hatchback.jpg","description":"The Kia Rio is a compact and fuel-efficient hatchback that offers a blend of affordability, reliability, and practicality, making it an excellent choice for urban commuting and everyday driving.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4618},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60_2.jpg","description":"The Volvo XC60 is a luxurious and versatile SUV that combines Scandinavian design, advanced safety features, and a comfortable driving experience, making it an ideal choice for families and adventure enthusiasts.","fuelConsumption":"8.5","engineSize":"2.0L 4-cylinder","accessories":["Leather upholstery","Panoramic sunroof","Harman Kardon premium sound system"],"functionalities":["All-Wheel Drive","City Safety collision avoidance technology","Power tailgate"],"rentalPrice":"$150","rentalCompany":"Premium Car Rentals","address":"987 Example Road, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6618},{"id":9618,"year":2020,"make":"Land Rover","model":"Range Rover Sport","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/land_rover_range_rover_sport.jpg","description":"The Land Rover Range Rover Sport is a premium SUV that offers a perfect blend of luxury, off-road capability, and dynamic performance, providing a refined driving experience both on and off the road.","fuelConsumption":"11.8","engineSize":"3.0L V6","accessories":["Premium Windsor leather seats","Meridian surround sound system","Adaptive Dynamics suspension"],"functionalities":["All-Wheel Drive","Terrain Response 2 system","Power-operated gesture tailgate"],"rentalPrice":"$300","rentalCompany":"Luxury SUV Rentals","address":"654 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4856},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Sedan, Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_sedan_hatchback.jpg","description":"The Kia Rio is a versatile and fuel-efficient vehicle available in both sedan and hatchback body styles, offering a comfortable cabin, modern features, and a smooth driving experience, making it an attractive choice for urban commuters.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6234},{"id":9582,"year":2008,"make":"Buick","model":"Enclave","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/buick_enclave.jpg","description":"The Buick Enclave is a stylish and spacious SUV known for its comfortable ride and luxurious features.","fuelConsumption":"10.5","engineSize":"3.6L V6","accessories":["Leather seats","Panoramic sunroof","Premium audio system"],"functionalities":["Power liftgate","Remote start","Blind-spot monitoring"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"123 Example Street, Kiev, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5858},{"id":9584,"year":2019,"make":"Volvo","model":"XC90","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc90.jpg","description":"The Volvo XC90 is a premium SUV that offers exceptional safety, advanced technology, and elegant design.","fuelConsumption":"8.3","engineSize":"2.0L 4-cylinder","accessories":["Nappa leather seats","Bowers & Wilkins premium sound system","Head-up display"],"functionalities":["IntelliSafe advanced safety features","Pilot Assist semi-autonomous driving","Four-zone automatic climate control"],"rentalPrice":"$50","rentalCompany":"Premium Auto Rentals","address":"456 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5352},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60.webp","description":"The Volvo XC60 is a compact luxury SUV with a beautiful interior, strong performance, and advanced safety features.","fuelConsumption":"7.9","engineSize":"2.0L 4-cylinder","accessories":["Premium leather seats","Harman Kardon audio system","Hands-free power tailgate"],"functionalities":["City Safety collision avoidance technology","Pilot Assist with adaptive cruise control","9-inch Sensus touchscreen infotainment system"],"rentalPrice":"$45","rentalCompany":"Luxury Car Rentals","address":"789 Example Boulevard, Odessa, Ukraine","rentalConditions":"Minimum age: 23\\nValid driver\'s license\\nCredit card required","mileage":5966},{"id":9587,"year":2006,"make":"HUMMER","model":"H2","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hummer_h2.webp","description":"The HUMMER H2 is a rugged and powerful SUV that stands out with its imposing presence and off-road capabilities.","fuelConsumption":"19.8","engineSize":"6.0L V8","accessories":["Heated leather seats","Bose premium sound system","Off-road package"],"functionalities":["Electronic locking front and rear differentials","Stabilitrak stability control","Tire pressure monitoring system"],"rentalPrice":"$55","rentalCompany":"Adventure Car Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4771},{"id":9590,"year":2016,"make":"Subaru","model":"Outback","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/subaru_outback.jpg","description":"The Subaru Outback is a versatile and reliable SUV that combines off-road capability with a comfortable and spacious interior.","fuelConsumption":"8.7","engineSize":"2.5L 4-cylinder","accessories":["Leather upholstery","Power moonroof","Harman Kardon premium audio system"],"functionalities":["Symmetrical All-Wheel Drive","X-Mode off-road assist","Subaru EyeSight driver-assist system"],"rentalPrice":"$35","rentalCompany":"Adventure Car Rentals","address":"987 Example Street, Kyiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4061},{"id":9591,"year":2010,"make":"Mitsubishi","model":"Outlander","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mitsubishi_outlander.jpg","description":"The Mitsubishi Outlander is a practical and fuel-efficient SUV with a stylish design and a range of modern features.","fuelConsumption":"7.9","engineSize":"2.4L 4-cylinder","accessories":["Heated front seats","Rockford Fosgate premium audio system","Power liftgate"],"functionalities":["Super All-Wheel Control","Multi-View camera system","Bluetooth hands-free system"],"rentalPrice":"$30","rentalCompany":"City Car Rentals","address":"654 Example Avenue, Lviv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":5374},{"id":9593,"year":2014,"make":"Nissan","model":"Pathfinder","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/nissan_pathfinder.jpg","description":"The Nissan Pathfinder is a versatile and family-friendly SUV that offers a comfortable ride and generous cargo space.","fuelConsumption":"9.5","engineSize":"3.5L V6","accessories":["Tri-Zone Automatic Climate Control","Bose premium audio system","Rear-seat entertainment system"],"functionalities":["Intelligent 4x4 system","Advanced Drive-Assist Display","Nissan Intelligent Key with push-button ignition"],"rentalPrice":"$40","rentalCompany":"Luxury Car Rentals","address":"321 Example Road, Odessa, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":6282},{"id":9596,"year":2009,"make":"Lincoln","model":"Navigator L","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lincoln_navigator_l.webp","description":"The Lincoln Navigator L is a luxurious and spacious SUV with a refined interior and advanced technology features.","fuelConsumption":"18.2","engineSize":"5.4L V8","accessories":["Premium leather seats","THX II Certified audio system","Power-deployable running boards"],"functionalities":["AdvanceTrac with Roll Stability Control","Voice-Activated Navigation System","Power liftgate"],"rentalPrice":"$50","rentalCompany":"Elite Car Rentals","address":"123 Example Boulevard, Kharkiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nInsurance coverage required","mileage":6173},{"id":9597,"year":2000,"make":"GMC","model":"Yukon Denali","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/gmc_yukon_denali.jpg","description":"The GMC Yukon Denali is a full-size luxury SUV that offers a powerful engine, a comfortable and spacious interior, and a host of advanced features.","fuelConsumption":"14.5","engineSize":"6.0L V8","accessories":["Heated and ventilated front seats","BOSE premium sound system","Power-folding third-row seats"],"functionalities":["All-Wheel Drive","Adaptive suspension","Advanced safety features"],"rentalPrice":"$45","rentalCompany":"Premium Car Rentals","address":"789 Example Square, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":4989},{"id":9598,"year":2007,"make":"Hyundai","model":"Tucson","type":"SUV","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/hyundai_tucson.jpg","description":"The Hyundai Tucson is a reliable and fuel-efficient SUV that combines practicality with a stylish design and a comfortable ride.","fuelConsumption":"8.2","engineSize":"2.0L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Blind Spot Detection","Hands-free smart liftgate"],"functionalities":["Front-Wheel Drive","Hillstart Assist Control","LED headlights"],"rentalPrice":"$25","rentalCompany":"Economy Car Rentals","address":"456 Example Lane, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nCredit card required","mileage":4591},{"id":9583,"year":2006,"make":"MINI","model":"Convertible","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mini_convertible.jpg","description":"The MINI Convertible is a compact and fun-to-drive convertible that offers a unique and iconic design, agile handling, and an open-air driving experience.","fuelConsumption":"6.9","engineSize":"1.6L 4-cylinder","accessories":["Convertible soft top","Sport seats","MINI Connected infotainment system"],"functionalities":["Front-Wheel Drive","Dynamic Stability Control","Rain-sensing wipers"],"rentalPrice":"$30","rentalCompany":"Fun Car Rentals","address":"234 Example Place, Vinnytsia, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nProof of insurance required","mileage":6275},{"id":9606,"year":2007,"make":"Bentley","model":"Azure","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bentley_azure.jpg","description":"The Bentley Azure is a luxurious and prestigious convertible that combines exceptional craftsmanship, powerful performance, and sophisticated elegance.","fuelConsumption":"22.5","engineSize":"6.8L V8","accessories":["Mulliner Driving Specification","Naim for Bentley premium audio system","Heated steering wheel"],"functionalities":["Rear-Wheel Drive","Air suspension","Automatic convertible roof"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"567 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4317},{"id":9612,"year":2004,"make":"Mercedes-Benz","model":"SL-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_sl_class.jpg","description":"The Mercedes-Benz SL-Class is a legendary luxury convertible that offers a perfect blend of thrilling performance, advanced technology, and opulent comfort.","fuelConsumption":"11.8","engineSize":"5.0L V8","accessories":["Airscarf neck-level heating","Harman Kardon premium audio system","Active Body Control suspension"],"functionalities":["Rear-Wheel Drive","Retractable hardtop roof","Multi-contour seats"],"rentalPrice":"$75","rentalCompany":"Exquisite Car Rentals","address":"789 Example Boulevard, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5722},{"id":9616,"year":2010,"make":"Aston Martin","model":"DBS","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/aston_martin_dbs.webp","description":"The Aston Martin DBS is a stunning and high-performance convertible that exemplifies British luxury and delivers exhilarating driving dynamics.","fuelConsumption":"16.5","engineSize":"6.0L V12","accessories":["Carbon Ceramic brakes","Bang & Olufsen BeoSound audio system","Bridge of Weir leather upholstery"],"functionalities":["Rear-Wheel Drive","Carbon-fiber body panels","Adaptive Damping System"],"rentalPrice":"$200","rentalCompany":"Supreme Car Rentals","address":"123 Example Avenue, Odessa, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6464},{"id":9619,"year":1996,"make":"Pontiac","model":"Firebird","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/pontiac_firebird.jpg","description":"The Pontiac Firebird is a classic American muscle car with bold styling, powerful engines, and an iconic presence that captures the essence of the golden era of performance.","fuelConsumption":"15.2","engineSize":"5.7L V8","accessories":["T-Top roof","Delco premium audio system","Sport suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","High-performance exhaust"],"rentalPrice":"$50","rentalCompany":"Classic Car Rentals","address":"456 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit required","mileage":5091},{"id":9629,"year":2009,"make":"Lamborghini","model":"Murcielago","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/lamborghini_murcielago.webp","description":"The Lamborghini Murcielago is an exotic and high-performance convertible that represents the epitome of Italian automotive engineering, combining breathtaking design, blistering speed, and a spine-tingling exhaust note.","fuelConsumption":"25.0","engineSize":"6.5L V12","accessories":["Carbon-fiber body panels","Alcantara upholstery","Lamborghini Infotainment System"],"functionalities":["All-Wheel Drive","Electronic Stability Control","Retractable soft-top roof"],"rentalPrice":"$500","rentalCompany":"Supercar Rentals","address":"321 Example Road, Kharkiv, Ukraine","rentalConditions":"Minimum age: 30\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5832},{"id":9631,"year":2011,"make":"Audi","model":"A5","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/audi_a5.jpg","description":"The Audi A5 is a stylish and refined convertible that offers a perfect blend of elegance, cutting-edge technology, and exhilarating driving dynamics.","fuelConsumption":"8.5","engineSize":"2.0L Inline-4","accessories":["Bang & Olufsen 3D sound system","Audi Virtual Cockpit","Audi Drive Select"],"functionalities":["Front-Wheel Drive","Quattro all-wheel drive available","Power-folding acoustic soft-top"],"rentalPrice":"$150","rentalCompany":"Luxury Car Rentals","address":"987 Example Lane, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4635},{"id":9634,"year":2001,"make":"BMW","model":"Z8","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/bmw_z8.jpg","description":"The BMW Z8 is a classic and timeless convertible that combines iconic retro-inspired design, outstanding performance, and luxurious comfort.","fuelConsumption":"14.2","engineSize":"4.9L V8","accessories":["Aluminum space frame","Nappa leather upholstery","Harman Kardon audio system"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Power-operated soft-top roof"],"rentalPrice":"$300","rentalCompany":"Classic Car Rentals","address":"654 Example Circle, Zaporizhzhia, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and proof of insurance required","mileage":5990},{"id":9655,"year":1998,"make":"Chevrolet","model":"Camaro","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chevrolet_camaro.jpg","description":"The Chevrolet Camaro is an American muscle car legend with a rich heritage, boasting aggressive styling, powerful engines, and exhilarating performance.","fuelConsumption":"13.5","engineSize":"5.7L V8","accessories":["Leather upholstery","Bose premium sound system","Performance suspension"],"functionalities":["Rear-Wheel Drive","Limited-slip differential","Power-operated convertible top"],"rentalPrice":"$200","rentalCompany":"Muscle Car Rentals","address":"123 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6330},{"id":9685,"year":2006,"make":"Mercedes-Benz","model":"SLK-Class","type":"Convertible","img":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/mercedes_slk_class.jpg","description":"The Mercedes-Benz SLK-Class is a luxurious and sporty convertible that offers a perfect balance of style, performance, and refinement, delivering an enjoyable open-top driving experience.","fuelConsumption":"9.8","engineSize":"3.5L V6","accessories":["Airscarf neck-level heating","Harman Kardon surround sound system","Magic Sky Control panoramic roof"],"functionalities":["Rear-Wheel Drive","Dynamic Stability Control","Retractable hardtop roof"],"rentalPrice":"$250","rentalCompany":"Luxury Car Rentals","address":"456 Example Avenue, Kyiv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6280},{"id":9660,"year":2020,"make":"Chrysler","model":"Voyager","type":"Van/Minivan","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/chrysler_voyager.jpg","description":"The Chrysler Voyager is a practical and versatile van/minivan that provides comfortable seating, ample cargo space, and a range of convenient features for family-oriented transportation.","fuelConsumption":"8.2","engineSize":"3.6L V6","accessories":["Stow \'n Go seating","Uconnect infotainment system","Blind Spot Monitoring"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Power sliding side doors"],"rentalPrice":"$100","rentalCompany":"Family Car Rentals","address":"789 Example Boulevard, Odesa, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":5807},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_hatchback.jpg","description":"The Kia Rio is a compact and fuel-efficient hatchback that offers a blend of affordability, reliability, and practicality, making it an excellent choice for urban commuting and everyday driving.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4618},{"id":9586,"year":2020,"make":"Volvo","model":"XC60","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/volvo_xc60_2.jpg","description":"The Volvo XC60 is a luxurious and versatile SUV that combines Scandinavian design, advanced safety features, and a comfortable driving experience, making it an ideal choice for families and adventure enthusiasts.","fuelConsumption":"8.5","engineSize":"2.0L 4-cylinder","accessories":["Leather upholstery","Panoramic sunroof","Harman Kardon premium sound system"],"functionalities":["All-Wheel Drive","City Safety collision avoidance technology","Power tailgate"],"rentalPrice":"$150","rentalCompany":"Premium Car Rentals","address":"987 Example Road, Dnipro, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6618},{"id":9618,"year":2020,"make":"Land Rover","model":"Range Rover Sport","type":"SUV","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/land_rover_range_rover_sport.jpg","description":"The Land Rover Range Rover Sport is a premium SUV that offers a perfect blend of luxury, off-road capability, and dynamic performance, providing a refined driving experience both on and off the road.","fuelConsumption":"11.8","engineSize":"3.0L V6","accessories":["Premium Windsor leather seats","Meridian surround sound system","Adaptive Dynamics suspension"],"functionalities":["All-Wheel Drive","Terrain Response 2 system","Power-operated gesture tailgate"],"rentalPrice":"$300","rentalCompany":"Luxury SUV Rentals","address":"654 Example Street, Lviv, Ukraine","rentalConditions":"Minimum age: 25\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":4856},{"id":9630,"year":2020,"make":"Kia","model":"Rio","type":"Sedan, Hatchback","photoLink":"https://res.cloudinary.com/ditdqzoio/image/upload/v1687252635/cars/kia_rio_sedan_hatchback.jpg","description":"The Kia Rio is a versatile and fuel-efficient vehicle available in both sedan and hatchback body styles, offering a comfortable cabin, modern features, and a smooth driving experience, making it an attractive choice for urban commuters.","fuelConsumption":"6.2","engineSize":"1.6L 4-cylinder","accessories":["Apple CarPlay and Android Auto integration","Smart Key with Push Button Start","Automatic climate control"],"functionalities":["Front-Wheel Drive","Electronic Stability Control","Rearview camera"],"rentalPrice":"$50","rentalCompany":"Economy Car Rentals","address":"321 Example Lane, Kharkiv, Ukraine","rentalConditions":"Minimum age: 21\\nValid driver\'s license\\nSecurity deposit and insurance required","mileage":6234}]');function Ye(){var e=(0,p.Z)(new Set(Ge.map((function(e){return{value:e.make,label:e.make}}))));return(0,S.jsxs)($e,{children:[(0,S.jsxs)(Fe,{children:[(0,S.jsx)(We,{htmlFor:"nameSelect",children:"Car brand"}),(0,S.jsx)(Be.ZP,{id:"nameSelect",placeholder:"Enter the text",options:e,styles:{control:function(e){return(0,U.Z)((0,U.Z)({},e),{},{width:"224px",height:"48px",borderColor:"rgba(18, 20, 23, 0.2)",border:"none",borderRadius:"14px",padding:"8px",fontSize:"16px",fontFamily:"ManropeMedium",backgroundColor:"rgba(247, 247, 251, 1)",appearance:"none"})},option:function(e,i){var n=i.isFocused;return(0,U.Z)((0,U.Z)({},e),{},{color:n?"black":"rgba(18, 20, 23, 0.2)",fontFamily:"ManropeMedium"})},menuList:function(e){return(0,U.Z)((0,U.Z)({},e),{},{"::-webkit-scrollbar":{width:"9px"},"::-webkit-scrollbar-track":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb:hover":{background:"rgba(18, 20, 23, 0.05)"}})},placeholder:function(e){return(0,U.Z)((0,U.Z)({},e),{},{color:"rgba(18, 20, 23, 1)"})}},components:{IndicatorSeparator:function(){return null}}})]}),(0,S.jsxs)(Fe,{children:[(0,S.jsx)(We,{htmlFor:"priceSelect",children:"Price/ 1 hour"}),(0,S.jsx)(Be.ZP,{id:"priceSelect",placeholder:"To $",options:["$10","$20","$30","$40","$50","$60","$70","$80","$90","$100"].map((function(e){return{value:e,label:e}})),styles:{control:function(e){return(0,U.Z)((0,U.Z)({},e),{},{width:"125",height:"48px",borderColor:"rgba(18, 20, 23, 0.2)",border:"none",borderRadius:"14px",padding:"8px",fontSize:"16px",fontFamily:"ManropeMedium",backgroundColor:"rgba(247, 247, 251, 1)",appearance:"none"})},option:function(e,i){var n=i.isFocused;return(0,U.Z)((0,U.Z)({},e),{},{color:n?"black":"rgba(18, 20, 23, 0.2)",fontFamily:"ManropeMedium"})},menuList:function(e){return(0,U.Z)((0,U.Z)({},e),{},{"::-webkit-scrollbar":{width:"9px"},"::-webkit-scrollbar-track":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb":{background:"rgba(18, 20, 23, 0.05)"},"::-webkit-scrollbar-thumb:hover":{background:"rgba(18, 20, 23, 0.05)"}})},placeholder:function(e){return(0,U.Z)((0,U.Z)({},e),{},{color:"rgba(18, 20, 23, 1)"})}},components:{IndicatorSeparator:function(){return null}}})]}),(0,S.jsxs)(Ke,{children:[(0,S.jsx)(We,{children:"Car mileage / km"}),(0,S.jsxs)(He,{children:[(0,S.jsx)(Ie,{type:"text"}),(0,S.jsx)(Ne,{children:"From"}),(0,S.jsx)(Oe,{type:"text"}),(0,S.jsx)(Xe,{children:"To"})]})]}),(0,S.jsx)(k,{text:"Search",onClick:function(){return console.log()},width:"135px"})]})}var Qe=n(2520),Je=n(6095);function ei(){var e=(0,h.useState)(1),i=(0,g.Z)(e,2),n=i[0],a=i[1],r=(0,h.useState)([]),t=(0,g.Z)(r,2),o=t[0],s=t[1],l=(0,Qe.Uh)(n),d=l.data,c=l.error,m=l.isLoading,u=l.isFetching;return(0,h.useEffect)((function(){d&&s((function(e){return[].concat((0,p.Z)(e),(0,p.Z)(d))}))}),[d]),(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(De,{children:(0,S.jsx)(Ye,{})}),(0,S.jsx)(_e,{children:c?(0,S.jsx)(S.Fragment,{children:"Oops, there was an error..."}):m?(0,S.jsx)(Je.a,{}):o.length>0?(0,S.jsx)(S.Fragment,{children:o.map((function(e){return(0,S.jsx)(Le,{data:e},e.id)}))}):null}),d&&d.length>=8&&(0,S.jsx)(Te,{onClick:function(){a(n+1)},disabled:u,children:"Load more"})]})}}}]); +//# sourceMappingURL=112.85da9c57.chunk.js.map \ No newline at end of file diff --git a/static/js/112.451f1206.chunk.js.map b/static/js/112.85da9c57.chunk.js.map similarity index 99% rename from static/js/112.451f1206.chunk.js.map rename to static/js/112.85da9c57.chunk.js.map index f98bed0..23673b3 100644 --- a/static/js/112.451f1206.chunk.js.map +++ b/static/js/112.85da9c57.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/112.451f1206.chunk.js","mappings":"wPAIaA,GAAeC,EAAAA,EAAAA,IAAUC,EAAAA,EAAVD,EAAkB,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAY,MAAQ,CACnEC,MAD2DF,EAALE,MAEtDC,QAAS,gBACTC,aAAc,OACdC,MAAOJ,EAAMK,QAAQC,gBAAgB,WACrCC,gBAAiB,UACjB,UAAW,CACTA,gBAAiB,WAEpB,IAEYC,EAAOC,EAAAA,EAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qK,SCbhB,SAASd,EAAMC,GAA4B,IAAzBc,EAAId,EAAJc,KAAMC,EAAOf,EAAPe,QAASb,EAAKF,EAALE,MAC9C,OACEc,EAAAA,EAAAA,KAACnB,EAAY,CACXoB,QAAQ,YACRF,QAASA,EACTG,MAAO,CAAEhB,MAAOA,GAAQiB,UAExBH,EAAAA,EAAAA,KAACP,EAAI,CAAAU,SAAEL,KAGb,CCVO,I,EAAMM,EAAUV,EAAAA,EAAOW,IAAGT,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sHAQpBS,EAAYZ,EAAAA,EAAOW,IAAGE,IAAAA,GAAAV,EAAAA,EAAAA,GAAA,4FAOtBW,EAAQd,EAAAA,EAAOe,IAAGC,IAAAA,GAAAb,EAAAA,EAAAA,GAAA,0FAOlBc,EAAYjB,EAAAA,EAAOW,IAAGO,IAAAA,GAAAf,EAAAA,EAAAA,GAAA,kJAStBgB,EAAQnB,EAAAA,EAAOoB,GAAEC,IAAAA,GAAAlB,EAAAA,EAAAA,GAAA,2FAOjBmB,EAAOtB,EAAAA,EAAOC,KAAIsB,IAAAA,GAAApB,EAAAA,EAAAA,GAAA,2FAOlBJ,EAAOC,EAAAA,EAAOwB,EAACC,IAAAA,GAAAtB,EAAAA,EAAAA,GAAA,2FAOfuB,EAAO1B,EAAAA,EAAO2B,GAAEC,IAAAA,GAAAzB,EAAAA,EAAAA,GAAA,+LAYhB0B,EAAO7B,EAAAA,EAAO8B,GAAEC,IAAAA,GAAA5B,EAAAA,EAAAA,GAAA,4O,wCC7DhB6B,EAAYhC,EAAAA,EAAOW,IAAGT,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yDAMtB8B,GAAY7C,EAAAA,EAAAA,IAAU8C,EAAAA,EAAV9C,CAAoB,CAC3C+C,KAAM,YAGKC,GAAchD,EAAAA,EAAAA,IAAUiD,EAAAA,EAAVjD,CAA0B,CACnD+C,KAAM,cCdFG,EAAQ,CAAEC,WAAY,CAAE,aAAc,kBAE7B,SAASC,IACtB,OACElC,EAAAA,EAAAA,KAAC0B,EAAS,CAAAvB,UACRH,EAAAA,EAAAA,KAACmC,EAAAA,GAAQC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKJ,GAAK,IAAEK,MAAMrC,EAAAA,EAAAA,KAAC8B,EAAW,IAAKQ,aAAatC,EAAAA,EAAAA,KAAC2B,EAAS,QAGzE,C,wBCgBA,I,6CACA,GAAe,IAA0B,0DCzB5BvB,GAAUV,EAAAA,EAAOW,IAAGT,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mDAKpB0C,GAAY7C,EAAAA,EAAO8C,OAAMjC,IAAAA,GAAAV,EAAAA,EAAAA,GAAA,oIASzB4C,GAAQ/C,EAAAA,EAAOe,IAAGC,IAAAA,GAAAb,EAAAA,EAAAA,GAAA,2CAKlBW,GAAQd,EAAAA,EAAOe,IAAGG,IAAAA,GAAAf,EAAAA,EAAAA,GAAA,6GAQlB6C,GAAOhD,EAAAA,EAAOW,IAAGU,IAAAA,GAAAlB,EAAAA,EAAAA,GAAA,uDAKjB8C,GAAWjD,EAAAA,EAAOW,IAAGY,IAAAA,GAAApB,EAAAA,EAAAA,GAAA,qIAQrBgB,GAAQnB,EAAAA,EAAOkD,GAAEzB,IAAAA,GAAAtB,EAAAA,EAAAA,GAAA,4FAOjBmB,GAAOtB,EAAAA,EAAOC,KAAI2B,IAAAA,GAAAzB,EAAAA,EAAAA,GAAA,6BAIlBuB,GAAO1B,EAAAA,EAAO2B,GAAEI,IAAAA,GAAA5B,EAAAA,EAAAA,GAAA,gDAKhB0B,GAAO7B,EAAAA,EAAO8B,GAAEqB,KAAAA,IAAAhD,EAAAA,EAAAA,GAAA,8TAiBhBiD,GAAcpD,EAAAA,EAAOwB,EAAC6B,KAAAA,IAAAlD,EAAAA,EAAAA,GAAA,sEAKtBmD,GAAOtD,EAAAA,EAAOoB,GAAEmC,KAAAA,IAAApD,EAAAA,EAAAA,GAAA,wIAShBqD,GAAgBxD,EAAAA,EAAO2B,GAAE8B,KAAAA,IAAAtD,EAAAA,EAAAA,GAAA,mLAazBuD,GAAgB1D,EAAAA,EAAO8B,GAAE6B,KAAAA,IAAAxD,EAAAA,EAAAA,GAAA,yGAOzByD,GAAgB5D,EAAAA,EAAOC,KAAI4D,KAAAA,IAAA1D,EAAAA,EAAAA,GAAA,kDCvFlCK,GAAQ,CACZsD,SAAU,WACVC,IAAK,MACLC,KAAM,MACNC,UAAW,wBACXzE,MAAO,IACP0E,UAAW,IACXC,QAAS,mBACTzE,aAAc,EACd0E,UAAW,IAGE,SAASC,GAAU/E,GAA2B,IAAxBgF,EAAIhF,EAAJgF,KAAMC,EAAOjF,EAAPiF,QAASC,EAAIlF,EAAJkF,KAClD,OACElE,EAAAA,EAAAA,KAAA,OAAAG,UACEH,EAAAA,EAAAA,KAACmE,EAAAA,EAAK,CACJH,KAAMA,EACNC,QAASA,EACT,kBAAgB,oBAChB,mBAAiB,0BAAyB9D,UAE1CH,EAAAA,EAAAA,KAACoE,EAAAA,EAAG,CAACC,GAAInE,GAAMC,UACbmE,EAAAA,EAAAA,MAAClE,GAAO,CAAAD,SAAA,EACNH,EAAAA,EAAAA,KAACuC,GAAS,CAACxC,QAASkE,EAAQ9D,UAC1BH,EAAAA,EAAAA,KAACyC,GAAK,CAAC8B,IAAKC,GAAOC,IAAI,oBAEzBzE,EAAAA,EAAAA,KAACQ,GAAK,CAAC+D,IAAKL,EAAKzD,IAAKgE,IAAKP,EAAKQ,KAAMxF,MAAM,MAAMyF,OAAO,SACzDL,EAAAA,EAAAA,MAAC5B,GAAI,CAAAvC,SAAA,EACHH,EAAAA,EAAAA,KAAC2C,GAAQ,CAAAxC,UACPmE,EAAAA,EAAAA,MAACzD,GAAK,CAAAV,SAAA,CACH+D,EAAKQ,KAAK,KAACJ,EAAAA,EAAAA,MAACtD,GAAI,CAAAb,SAAA,CAAE+D,EAAKU,MAAM,QAC7BV,EAAKW,WAGVP,EAAAA,EAAAA,MAAClD,GAAI,CAAAjB,SAAA,EACHH,EAAAA,EAAAA,KAACuB,GAAI,CAAApB,SAAE+D,EAAKY,QAAQC,MAAM,KAAK,MAC/B/E,EAAAA,EAAAA,KAACuB,GAAI,CAAApB,SAAE+D,EAAKY,QAAQC,MAAM,KAAK,MAC/B/E,EAAAA,EAAAA,KAACuB,GAAI,CAAApB,SAAC,UACNmE,EAAAA,EAAAA,MAAC/C,GAAI,CAAApB,SAAA,CAAC,SAAO+D,EAAKW,SAClBP,EAAAA,EAAAA,MAAC/C,GAAI,CAAApB,SAAA,CAAC,SAAO+D,EAAKc,YAEpBV,EAAAA,EAAAA,MAAClD,GAAI,CAAAjB,SAAA,EACHmE,EAAAA,EAAAA,MAAC/C,GAAI,CAAApB,SAAA,CAAC,qBAAmB+D,EAAKe,oBAC9BX,EAAAA,EAAAA,MAAC/C,GAAI,CAAApB,SAAA,CAAC,gBAAc+D,EAAKgB,kBAE3BlF,EAAAA,EAAAA,KAAC8C,GAAW,CAAA3C,SAAE+D,EAAKiB,eACnBnF,EAAAA,EAAAA,KAACgD,GAAI,CAAA7C,SAAC,sCACNH,EAAAA,EAAAA,KAACoB,GAAI,CAAAjB,SACF+D,EAAKkB,YAAYC,KAAI,SAAAC,GAAI,OACxBtF,EAAAA,EAAAA,KAACuB,GAAI,CAAApB,SAAamF,GAAPA,EAAmB,OAGlCtF,EAAAA,EAAAA,KAACoB,GAAI,CAAAjB,SACF+D,EAAKqB,gBAAgBF,KAAI,SAAAC,GAAI,OAC5BtF,EAAAA,EAAAA,KAACuB,GAAI,CAAApB,SAAamF,GAAPA,EAAmB,OAGlCtF,EAAAA,EAAAA,KAACgD,GAAI,CAAA7C,SAAC,wBACNmE,EAAAA,EAAAA,MAACpB,GAAa,CAAA/C,SAAA,EACZmE,EAAAA,EAAAA,MAAClB,GAAa,CAAAjD,SAAA,CAAC,eACA,KACbH,EAAAA,EAAAA,KAACsD,GAAa,CAAAnD,UACX,IAAIqF,MAAOC,cAAgBvB,EAAKW,WAGrC7E,EAAAA,EAAAA,KAACoD,GAAa,CAAAjD,SACX+D,EAAKwB,iBAAiBX,MAAM,MAAM,MAErC/E,EAAAA,EAAAA,KAACoD,GAAa,CAAAjD,SACX+D,EAAKwB,iBAAiBX,MAAM,MAAM,MAErCT,EAAAA,EAAAA,MAAClB,GAAa,CAAAjD,SAAA,CAAC,WACJ,KACTH,EAAAA,EAAAA,KAACsD,GAAa,CAAAnD,SACX+D,EAAKyB,QAAQC,eAAe,eAGjCtB,EAAAA,EAAAA,MAAClB,GAAa,CAAAjD,SAAA,CAAC,WACNH,EAAAA,EAAAA,KAACsD,GAAa,CAAAnD,SAAE+D,EAAK2B,wBAIlC7F,EAAAA,EAAAA,KAACjB,EAAM,CACLe,KAAK,aACLZ,MAAM,QACNa,QAAS,WACP+F,OAAOC,SAASC,KAAO,mBACzB,YAOd,CCnGe,SAASC,GAAOjH,GAAY,IAATkF,EAAIlF,EAAJkF,KAChCgC,GAAwBC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAhClC,EAAIoC,EAAA,GAAEE,EAAOF,EAAA,GAIpB,OACE9B,EAAAA,EAAAA,MAAClE,EAAO,CAAAD,SAAA,EACNmE,EAAAA,EAAAA,MAAChE,EAAS,CAAAH,SAAA,EACRH,EAAAA,EAAAA,KAACkC,EAAS,KACVlC,EAAAA,EAAAA,KAACQ,EAAK,CAAC+D,IAAKL,EAAKzD,IAAKgE,IAAI,YAE5BH,EAAAA,EAAAA,MAAC3D,EAAS,CAAAR,SAAA,EACRmE,EAAAA,EAAAA,MAACzD,EAAK,CAAAV,SAAA,CACH+D,EAAKQ,KAAK,IAAE,IACb1E,EAAAA,EAAAA,KAACgB,EAAI,CAAAb,SAAE+D,EAAKU,QAAc,KAAEV,EAAKW,SAEnCP,EAAAA,EAAAA,MAAC7E,EAAI,CAAAU,SAAA,CAAC,IAAE+D,EAAK2B,mBAEfvB,EAAAA,EAAAA,MAAClD,EAAI,CAAAjB,SAAA,EACHH,EAAAA,EAAAA,KAACuB,EAAI,CAAApB,SAAE+D,EAAKY,QAAQC,MAAM,KAAK,MAC/B/E,EAAAA,EAAAA,KAACuB,EAAI,CAAApB,SAAE+D,EAAKY,QAAQC,MAAM,KAAK,MAC/B/E,EAAAA,EAAAA,KAACuB,EAAI,CAAApB,SAAE+D,EAAKqC,iBACZvG,EAAAA,EAAAA,KAACuB,EAAI,CAAApB,SAAE+D,EAAKc,QACZhF,EAAAA,EAAAA,KAACuB,EAAI,CAAApB,SAAE+D,EAAKU,SACZ5E,EAAAA,EAAAA,KAACuB,EAAI,CAAApB,SAAE+D,EAAKyB,WACZ3F,EAAAA,EAAAA,KAACuB,EAAI,CAAApB,SAAE+D,EAAKkB,YAAY,SAE1BpF,EAAAA,EAAAA,KAACjB,EAAM,CAACgB,QAzBO,WAAH,OAASuG,GAAQ,EAAM,EAyBNxG,KAAK,aAAaZ,MAAM,UACpD8E,IAAQhE,EAAAA,EAAAA,KAAC+D,GAAU,CAACC,KAAMA,EAAMC,QAzBjB,WAAH,OAASqC,GAAQ,EAAO,EAyBkBpC,KAAMA,MAGnE,CC9CO,I,2BAAMsC,GAAgB9G,EAAAA,EAAOW,IAAGT,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,6HAQ1B4G,GAAc/G,EAAAA,EAAOW,IAAGE,KAAAA,IAAAV,EAAAA,EAAAA,GAAA,mLAWxB6G,GAAWhH,EAAAA,EAAOiH,EAACjG,KAAAA,IAAAb,EAAAA,EAAAA,GAAA,qW,WCnBnB+G,GAAYlH,EAAAA,EAAOW,IAAGT,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,wFAOtBgH,GAAkBnH,EAAAA,EAAOW,IAAGE,KAAAA,IAAAV,EAAAA,EAAAA,GAAA,uDAK5BiH,GAAiBpH,EAAAA,EAAOW,IAAGK,KAAAA,IAAAb,EAAAA,EAAAA,GAAA,oEAM3BkH,GAAOrH,EAAAA,EAAOsH,KAAIpG,KAAAA,IAAAf,EAAAA,EAAAA,GAAA,uDAKlBoH,GAAQvH,EAAAA,EAAOsC,MAAKjB,KAAAA,IAAAlB,EAAAA,EAAAA,GAAA,wIAQpBqH,GAAYxH,EAAAA,EAAOyH,MAAKlG,KAAAA,IAAApB,EAAAA,EAAAA,GAAA,6UAgBxBuH,GAAa1H,EAAAA,EAAOyH,MAAKhG,KAAAA,IAAAtB,EAAAA,EAAAA,GAAA,wRAezBwH,GAAW3H,EAAAA,EAAOC,KAAI2B,KAAAA,IAAAzB,EAAAA,EAAAA,GAAA,8KAWtByH,GAAY5H,EAAAA,EAAOC,KAAI8B,KAAAA,IAAA5B,EAAAA,EAAAA,GAAA,+K,+5vCC1DrB,SAAS0H,KACtB,IAAMC,GAAWC,EAAAA,EAAAA,GACZ,IAAIC,IAAIC,GAAYtC,KAAI,SAAAuC,GAAG,MAAK,CAAEC,MAAOD,EAAIlD,KAAM1C,MAAO4F,EAAIlD,KAAM,MAgBzE,OACEJ,EAAAA,EAAAA,MAACsC,GAAS,CAAAzG,SAAA,EACRmE,EAAAA,EAAAA,MAACuC,GAAe,CAAA1G,SAAA,EACdH,EAAAA,EAAAA,KAACiH,GAAK,CAACa,QAAQ,aAAY3H,SAAC,eAC5BH,EAAAA,EAAAA,KAAC+H,GAAAA,GAAM,CACLC,GAAG,aACHC,YAAY,iBACZC,QAASV,EACTW,OAAQ,CACNC,QAAS,SAAAD,GAAM,OAAA/F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACV+F,GAAM,IACTjJ,MAAO,QACPyF,OAAQ,OACR0D,YAAa,wBACbC,OAAQ,OACRlJ,aAAc,OACdD,QAAS,MACToJ,SAAU,OACVC,WAAY,gBACZhJ,gBAAiB,yBACjBiJ,WAAY,QAAM,EAEpBC,OAAQ,SAACP,EAAMnJ,GAAqB,IAAjB2J,EAAS3J,EAAT2J,UACjB,OAAAvG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACK+F,GAAM,IACT9I,MAAOsJ,EAAY,QAAU,wBAC7BH,WAAY,iBAEhB,EACAI,SAAU,SAAAC,GAAI,OAAAzG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTyG,GAAI,IACP,sBAAuB,CACrB3J,MAAO,OAET,4BAA6B,CAC3B4J,WAAY,0BAEd,4BAA6B,CAC3BA,WAAY,0BAEd,kCAAmC,CACjCA,WAAY,2BACb,EAEHb,YAAa,SAAAE,GAAM,OAAA/F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACd+F,GAAM,IACT9I,MAAO,uBAAqB,GAGhC0J,WAAY,CACVC,mBAAoB,kBAAM,IAAI,SAKpC1E,EAAAA,EAAAA,MAACuC,GAAe,CAAA1G,SAAA,EACdH,EAAAA,EAAAA,KAACiH,GAAK,CAACa,QAAQ,cAAa3H,SAAC,mBAC7BH,EAAAA,EAAAA,KAAC+H,GAAAA,GAAM,CACLC,GAAG,cACHC,YAAY,OACZC,QAzEO,CACb,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QA+DsB7C,KAAI,SAAA4D,GAAK,MAAK,CAAEpB,MAAOoB,EAAOjH,MAAOiH,EAAO,IAC5Dd,OAAQ,CACNC,QAAS,SAAAD,GAAM,OAAA/F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACV+F,GAAM,IACTjJ,MAAO,MACPyF,OAAQ,OACR0D,YAAa,wBACbC,OAAQ,OACRlJ,aAAc,OACdD,QAAS,MACToJ,SAAU,OACVC,WAAY,gBACZhJ,gBAAiB,yBACjBiJ,WAAY,QAAM,EAEpBC,OAAQ,SAACP,EAAMe,GAAqB,IAAjBP,EAASO,EAATP,UACjB,OAAAvG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACK+F,GAAM,IACT9I,MAAOsJ,EAAY,QAAU,wBAC7BH,WAAY,iBAEhB,EACAI,SAAU,SAAAC,GAAI,OAAAzG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTyG,GAAI,IACP,sBAAuB,CACrB3J,MAAO,OAET,4BAA6B,CAC3B4J,WAAY,0BAEd,4BAA6B,CAC3BA,WAAY,0BAEd,kCAAmC,CACjCA,WAAY,2BACb,EAEHb,YAAa,SAAAE,GAAM,OAAA/F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACd+F,GAAM,IACT9I,MAAO,uBAAqB,GAGhC0J,WAAY,CACVC,mBAAoB,kBAAM,IAAI,SAKpC1E,EAAAA,EAAAA,MAACyC,GAAI,CAAA5G,SAAA,EACHH,EAAAA,EAAAA,KAACiH,GAAK,CAAA9G,SAAC,sBACPmE,EAAAA,EAAAA,MAACwC,GAAc,CAAA3G,SAAA,EACbH,EAAAA,EAAAA,KAACkH,GAAS,CAAClC,KAAK,UAChBhF,EAAAA,EAAAA,KAACqH,GAAQ,CAAAlH,SAAC,UACVH,EAAAA,EAAAA,KAACoH,GAAU,CAACpC,KAAK,UACjBhF,EAAAA,EAAAA,KAACsH,GAAS,CAAAnH,SAAC,cAGfH,EAAAA,EAAAA,KAACjB,EAAM,CAACe,KAAK,SAASC,QAAS,kBAAMoJ,QAAQC,KAAK,EAAElK,MAAM,YAGhE,C,yBCnJe,SAASmK,KACtB,IAAAnD,GAAwBC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA5BoD,EAAIlD,EAAA,GAAEmD,EAAOnD,EAAA,GACpBoD,GAA8BrD,EAAAA,EAAAA,UAAS,IAAGsD,GAAApD,EAAAA,EAAAA,GAAAmD,EAAA,GAAnCE,EAAOD,EAAA,GAAEE,EAAUF,EAAA,GAE1BG,GAA+CC,EAAAA,GAAAA,GAAsBP,GAA7DpF,EAAI0F,EAAJ1F,KAAM4F,EAAKF,EAALE,MAAOC,EAASH,EAATG,UAAWC,EAAUJ,EAAVI,WAYhC,OANAC,EAAAA,EAAAA,YAAU,WACJ/F,GACFyF,GAAW,SAAAO,GAAQ,SAAAC,QAAA1C,EAAAA,EAAAA,GAAQyC,IAAQzC,EAAAA,EAAAA,GAAKvD,GAAI,GAEhD,GAAG,CAACA,KAGFI,EAAAA,EAAAA,MAAA8F,EAAAA,SAAA,CAAAjK,SAAA,EACEH,EAAAA,EAAAA,KAACwG,GAAa,CAAArG,UACZH,EAAAA,EAAAA,KAACuH,GAAM,OAETvH,EAAAA,EAAAA,KAACyG,GAAW,CAAAtG,SACT2J,GACC9J,EAAAA,EAAAA,KAAAoK,EAAAA,SAAA,CAAAjK,SAAE,gCACA4J,GACF/J,EAAAA,EAAAA,KAACqK,GAAAA,EAAM,IACLX,EAAQY,OAAS,GACnBtK,EAAAA,EAAAA,KAAAoK,EAAAA,SAAA,CAAAjK,SACGuJ,EAAQrE,KAAI,SAAAuC,GAAG,OACd5H,EAAAA,EAAAA,KAACiG,GAAO,CAAc/B,KAAM0D,GAAdA,EAAII,GAAiB,MAGrC,OAEL9D,GAAQA,EAAKoG,QAAU,IACtBtK,EAAAA,EAAAA,KAAC0G,GAAQ,CAAC3G,QA7BC,WACfwJ,EAAQD,EAAO,EACjB,EA2BmCiB,SAAUP,EAAW7J,SAAC,gBAM3D,C","sources":["components/Button/Button.styled.jsx","components/Button/Button.jsx","components/CarItem/CarItem.styled.jsx","components/HeartIcon/HeartIcon.styled.jsx","components/HeartIcon/HeartIcon.jsx","images/close.svg","components/Modal/Modal.styled.jsx","components/Modal/Modal.jsx","components/CarItem/CarItem.jsx","pages/Catalog/Catalog.styled.jsx","components/Filter/Filter.styled.jsx","components/Filter/Filter.jsx","pages/Catalog/Catalog.jsx"],"sourcesContent":["import { styled as muiStyled } from '@mui/material/styles';\nimport Button from '@mui/material/Button';\nimport styled from '@emotion/styled';\n\nexport const StylesButton = muiStyled(Button)(({ theme, width }) => ({\n width: width,\n padding: '12px 0 12px 0',\n borderRadius: '12px',\n color: theme.palette.getContrastText('#3470FF'),\n backgroundColor: '#3470FF',\n '&:hover': {\n backgroundColor: '#0B44CD',\n },\n}));\n\nexport const Text = styled.span`\n color: #ffffff;\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n line-height: 1.42;\n text-transform: none;\n`;\n","import { StylesButton, Text } from './Button.styled';\n\nexport default function Button({ text, onClick, width }) {\n return (\n \n {text}\n \n );\n}\n","import styled from '@emotion/styled';\n\nexport const Wrapper = styled.div`\n display: flex;\n width: 274px;\n height: 426px;\n flex-direction: column;\n align-items: flex-start;\n`;\n\nexport const ImageWrap = styled.div`\n position: relative;\n width: 274px;\n height: 268px;\n margin-bottom: 14px;\n`;\n\nexport const Image = styled.img`\n width: 100%;\n height: 268px;\n object-fit: cover;\n border-radius: 14px;\n`;\n\nexport const TitleWrap = styled.div`\n width: 274px;\n align-items: center;\n color: #121417;\n display: flex;\n justify-content: space-between;\n margin-bottom: 8px;\n`;\n\nexport const Title = styled.h3`\n color: #121417;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.5;\n`;\n\nexport const Span = styled.span`\n color: #3470ff;\n font-size: 14px;\n font-weight: 500;\n line-height: 1.5;\n`;\n\nexport const Text = styled.p`\n color: #121417;\n font-size: 16px;\n font-weight: 500;\n line-height: 1.5;\n`;\n\nexport const List = styled.ul`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: fit-content;\n row-gap: 4px;\n margin-bottom: 28px;\n width: 255px;\n height: 40px;\n overflow: hidden;\n`;\n\nexport const Item = styled.li`\n color: rgba(18, 20, 23, 0.5);\n font-size: 12px;\n font-weight: 400;\n line-height: 1.5;\n\n :not(:last-child) {\n border-right: 1px solid rgba(18, 20, 23, 0.1);\n margin-right: 6px;\n padding-right: 6px;\n }\n`;\n","import FavoriteBorder from '@mui/icons-material/FavoriteBorder';\nimport Favorite from '@mui/icons-material/Favorite';\nimport { styled as muiStyled } from '@mui/material/styles';\nimport styled from '@emotion/styled';\n\nexport const HeartWrap = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n`;\n\nexport const HeartFill = muiStyled(Favorite)({\n fill: '#3470FF',\n});\n\nexport const HeartStroke = muiStyled(FavoriteBorder)({\n fill: '#FFFFFFCC',\n});\n","import Checkbox from '@mui/material/Checkbox';\nimport { HeartFill, HeartStroke, HeartWrap } from './HeartIcon.styled';\nconst label = { inputProps: { 'aria-label': 'Checkbox demo' } };\n\nexport default function HeartIcon() {\n return (\n \n } checkedIcon={} />\n \n );\n}\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgClose(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 6 6 18M6 6l12 12\",\n stroke: \"#121417\",\n strokeWidth: 1.8,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgClose);\nexport default __webpack_public_path__ + \"static/media/close.70f65c7e87a4e1e47d5b73074981fa46.svg\";\nexport { ForwardRef as ReactComponent };","import styled from '@emotion/styled';\n\nexport const Wrapper = styled.div`\n position: relative;\n padding: 34px;\n`;\n\nexport const CloseIcon = styled.button`\n position: absolute;\n background-color: transparent;\n border: none;\n top: 8px;\n right: 6px;\n cursor: pointer;\n`;\n\nexport const IconX = styled.img`\n width: 30px;\n height: 30px;\n`;\n\nexport const Image = styled.img`\n width: 100%;\n height: 314px;\n display: block;\n object-fit: cover;\n border-radius: 14px;\n`;\n\nexport const Wrap = styled.div`\n margin-top: 14px;\n margin-bottom: 24px;\n`;\n\nexport const TextWrap = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-top: 14px;\n padding-bottom: 8px;\n`;\n\nexport const Title = styled.h2`\n font-weight: 500;\n font-size: 18px;\n line-height: 1.33;\n color: #121417;\n`;\n\nexport const Span = styled.span`\n color: #3470ff;\n`;\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n`;\n\nexport const Item = styled.li`\n font-size: 12px;\n color: rgba(18, 20, 23, 0.5);\n display: flex;\n align-items: center;\n\n &:not(:last-child)::after {\n content: '';\n display: inline-block;\n width: 1px;\n height: 16px;\n background-color: rgba(18, 20, 23, 0.1);\n margin-left: 6px;\n margin-right: 6px;\n }\n`;\n\nexport const Description = styled.p`\n line-height: 1.43;\n margin-top: 14px;\n width: 461px;\n`;\nexport const Info = styled.h3`\n font-weight: 400;\n font-size: 14px;\n line-height: 1.43;\n color: #121417;\n margin-top: 24px;\n margin-bottom: 8px;\n`;\n\nexport const ConditionList = styled.ul`\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n\n font-size: 12px;\n letter-spacing: -0.24px;\n\n @media screen and (min-width: 768px) {\n width: 461px;\n }\n`;\n\nexport const ConditionItem = styled.li`\n border-radius: 35px;\n color: #363535;\n background-color: #f9f9f9;\n padding: 7px 14px;\n`;\n\nexport const ConditionSpan = styled.span`\n color: #3470ff;\n font-weight: 600;\n`;\n","import Box from '@mui/material/Box';\nimport Modal from '@mui/material/Modal';\nimport Close from '../../images/close.svg';\nimport Button from 'components/Button/Button';\nimport {\n Wrapper,\n CloseIcon,\n IconX,\n Wrap,\n Image,\n TextWrap,\n Title,\n Span,\n List,\n Item,\n Description,\n Info,\n ConditionItem,\n ConditionList,\n ConditionSpan,\n} from './Modal.styled';\n\nconst style = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: 541,\n maxHeight: 830,\n bgcolor: 'background.paper',\n borderRadius: 6,\n boxShadow: 24,\n};\n\nexport default function BasicModal({ open, onClose, data }) {\n return (\n
\n \n \n \n \n \n \n {data.make}\n \n \n \n {data.make} <Span>{data.model}, </Span>\n {data.year}\n \n \n \n {data.address.split(',')[1]}\n {data.address.split(',')[2]}\n Id: \n Year: {data.year}\n Type: {data.type}\n \n \n Fuel Consumption: {data.fuelConsumption}\n Engine Size: {data.engineSize}\n \n {data.description}\n Accessories and functionalities:\n \n {data.accessories.map(item => (\n {item}\n ))}\n \n \n {data.functionalities.map(item => (\n {item}\n ))}\n \n Rental Conditions:\n \n \n Minimum age:{' '}\n \n {new Date().getFullYear() - data.year}\n \n \n \n {data.rentalConditions.split('\\n')[1]}\n \n \n {data.rentalConditions.split('\\n')[2]}\n \n \n Mileage:{' '}\n \n {data.mileage.toLocaleString('en-US')}\n \n \n \n Price: {data.rentalPrice}\n \n \n \n {\n window.location.href = 'tel:+380730000000';\n }}\n />\n \n \n \n
\n );\n}\n","import { useState } from 'react';\n\nimport Button from 'components/Button/Button';\nimport {\n Wrapper,\n ImageWrap,\n Image,\n TitleWrap,\n Title,\n Span,\n Text,\n List,\n Item,\n} from './CarItem.styled';\nimport HeartIcon from 'components/HeartIcon/HeartIcon';\nimport BasicModal from 'components/Modal/Modal';\n\nexport default function CarItem({ data }) {\n const [open, setOpen] = useState(false);\n const handleOpen = () => setOpen(true);\n const handleClose = () => setOpen(false);\n\n return (\n \n \n \n \"Car\"\n \n \n \n {data.make} {''}\n <Span>{data.model}</Span>, {data.year}\n \n {data.rentalPrice}\n \n \n {data.address.split(',')[1]}\n {data.address.split(',')[2]}\n {data.rentalCompany}\n {data.type}\n {data.model}\n {data.mileage}\n {data.accessories[0]}\n \n \n * \n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * \n * {state => (\n * \n * )}\n * \n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","export const reflow = node => node.scrollTop;\nexport function getTransitionProps(props, options) {\n var _style$transitionDura, _style$transitionTimi;\n const {\n timeout,\n easing,\n style = {}\n } = props;\n return {\n duration: (_style$transitionDura = style.transitionDuration) != null ? _style$transitionDura : typeof timeout === 'number' ? timeout : timeout[options.mode] || 0,\n easing: (_style$transitionTimi = style.transitionTimingFunction) != null ? _style$transitionTimi : typeof easing === 'object' ? easing[options.mode] : easing,\n delay: style.transitionDelay\n };\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"addEndListener\", \"appear\", \"children\", \"easing\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"timeout\", \"TransitionComponent\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport { elementAcceptingRef } from '@mui/utils';\nimport useTheme from '../styles/useTheme';\nimport { reflow, getTransitionProps } from '../transitions/utils';\nimport useForkRef from '../utils/useForkRef';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst styles = {\n entering: {\n opacity: 1\n },\n entered: {\n opacity: 1\n }\n};\n\n/**\n * The Fade transition is used by the [Modal](/material-ui/react-modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\nconst Fade = /*#__PURE__*/React.forwardRef(function Fade(props, ref) {\n const theme = useTheme();\n const defaultTimeout = {\n enter: theme.transitions.duration.enteringScreen,\n exit: theme.transitions.duration.leavingScreen\n };\n const {\n addEndListener,\n appear = true,\n children,\n easing,\n in: inProp,\n onEnter,\n onEntered,\n onEntering,\n onExit,\n onExited,\n onExiting,\n style,\n timeout = defaultTimeout,\n // eslint-disable-next-line react/prop-types\n TransitionComponent = Transition\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const enableStrictModeCompat = true;\n const nodeRef = React.useRef(null);\n const handleRef = useForkRef(nodeRef, children.ref, ref);\n const normalizedTransitionCallback = callback => maybeIsAppearing => {\n if (callback) {\n const node = nodeRef.current;\n\n // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n if (maybeIsAppearing === undefined) {\n callback(node);\n } else {\n callback(node, maybeIsAppearing);\n }\n }\n };\n const handleEntering = normalizedTransitionCallback(onEntering);\n const handleEnter = normalizedTransitionCallback((node, isAppearing) => {\n reflow(node); // So the animation always start from the start.\n\n const transitionProps = getTransitionProps({\n style,\n timeout,\n easing\n }, {\n mode: 'enter'\n });\n node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n node.style.transition = theme.transitions.create('opacity', transitionProps);\n if (onEnter) {\n onEnter(node, isAppearing);\n }\n });\n const handleEntered = normalizedTransitionCallback(onEntered);\n const handleExiting = normalizedTransitionCallback(onExiting);\n const handleExit = normalizedTransitionCallback(node => {\n const transitionProps = getTransitionProps({\n style,\n timeout,\n easing\n }, {\n mode: 'exit'\n });\n node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n node.style.transition = theme.transitions.create('opacity', transitionProps);\n if (onExit) {\n onExit(node);\n }\n });\n const handleExited = normalizedTransitionCallback(onExited);\n const handleAddEndListener = next => {\n if (addEndListener) {\n // Old call signature before `react-transition-group` implemented `nodeRef`\n addEndListener(nodeRef.current, next);\n }\n };\n return /*#__PURE__*/_jsx(TransitionComponent, _extends({\n appear: appear,\n in: inProp,\n nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n onEnter: handleEnter,\n onEntered: handleEntered,\n onEntering: handleEntering,\n onExit: handleExit,\n onExited: handleExited,\n onExiting: handleExiting,\n addEndListener: handleAddEndListener,\n timeout: timeout\n }, other, {\n children: (state, childProps) => {\n return /*#__PURE__*/React.cloneElement(children, _extends({\n style: _extends({\n opacity: 0,\n visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n }, styles[state], style, children.props.style),\n ref: handleRef\n }, childProps));\n }\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Fade.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Add a custom transition end trigger. Called with the transitioning DOM\n * node and a done callback. Allows for more fine grained transition end\n * logic. Note: Timeouts are still used as a fallback if provided.\n */\n addEndListener: PropTypes.func,\n /**\n * Perform the enter transition when it first mounts if `in` is also `true`.\n * Set this to `false` to disable this behavior.\n * @default true\n */\n appear: PropTypes.bool,\n /**\n * A single child content element.\n */\n children: elementAcceptingRef.isRequired,\n /**\n * The transition timing function.\n * You may specify a single easing or a object containing enter and exit values.\n */\n easing: PropTypes.oneOfType([PropTypes.shape({\n enter: PropTypes.string,\n exit: PropTypes.string\n }), PropTypes.string]),\n /**\n * If `true`, the component will transition in.\n */\n in: PropTypes.bool,\n /**\n * @ignore\n */\n onEnter: PropTypes.func,\n /**\n * @ignore\n */\n onEntered: PropTypes.func,\n /**\n * @ignore\n */\n onEntering: PropTypes.func,\n /**\n * @ignore\n */\n onExit: PropTypes.func,\n /**\n * @ignore\n */\n onExited: PropTypes.func,\n /**\n * @ignore\n */\n onExiting: PropTypes.func,\n /**\n * @ignore\n */\n style: PropTypes.object,\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n * @default {\n * enter: theme.transitions.duration.enteringScreen,\n * exit: theme.transitions.duration.leavingScreen,\n * }\n */\n timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default Fade;","'use client';\n\nimport * as React from 'react';\nimport { useTheme as useThemeSystem } from '@mui/system';\nimport defaultTheme from './defaultTheme';\nimport THEME_ID from './identifier';\nexport default function useTheme() {\n const theme = useThemeSystem(defaultTheme);\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useDebugValue(theme);\n }\n return theme[THEME_ID] || theme;\n}","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getBackdropUtilityClass(slot) {\n return generateUtilityClass('MuiBackdrop', slot);\n}\nconst backdropClasses = generateUtilityClasses('MuiBackdrop', ['root', 'invisible']);\nexport default backdropClasses;","'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"className\", \"component\", \"components\", \"componentsProps\", \"invisible\", \"open\", \"slotProps\", \"slots\", \"TransitionComponent\", \"transitionDuration\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base/composeClasses';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Fade from '../Fade';\nimport { getBackdropUtilityClass } from './backdropClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n invisible\n } = ownerState;\n const slots = {\n root: ['root', invisible && 'invisible']\n };\n return composeClasses(slots, getBackdropUtilityClass, classes);\n};\nconst BackdropRoot = styled('div', {\n name: 'MuiBackdrop',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.invisible && styles.invisible];\n }\n})(({\n ownerState\n}) => _extends({\n position: 'fixed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n right: 0,\n bottom: 0,\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n WebkitTapHighlightColor: 'transparent'\n}, ownerState.invisible && {\n backgroundColor: 'transparent'\n}));\nconst Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(inProps, ref) {\n var _slotProps$root, _ref, _slots$root;\n const props = useThemeProps({\n props: inProps,\n name: 'MuiBackdrop'\n });\n const {\n children,\n className,\n component = 'div',\n components = {},\n componentsProps = {},\n invisible = false,\n open,\n slotProps = {},\n slots = {},\n TransitionComponent = Fade,\n transitionDuration\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n component,\n invisible\n });\n const classes = useUtilityClasses(ownerState);\n const rootSlotProps = (_slotProps$root = slotProps.root) != null ? _slotProps$root : componentsProps.root;\n return /*#__PURE__*/_jsx(TransitionComponent, _extends({\n in: open,\n timeout: transitionDuration\n }, other, {\n children: /*#__PURE__*/_jsx(BackdropRoot, _extends({\n \"aria-hidden\": true\n }, rootSlotProps, {\n as: (_ref = (_slots$root = slots.root) != null ? _slots$root : components.Root) != null ? _ref : component,\n className: clsx(classes.root, className, rootSlotProps == null ? void 0 : rootSlotProps.className),\n ownerState: _extends({}, ownerState, rootSlotProps == null ? void 0 : rootSlotProps.ownerState),\n classes: classes,\n ref: ref,\n children: children\n }))\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The components used for each slot inside.\n *\n * This prop is an alias for the `slots` prop.\n * It's recommended to use the `slots` prop instead.\n *\n * @default {}\n */\n components: PropTypes.shape({\n Root: PropTypes.elementType\n }),\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n *\n * This prop is an alias for the `slotProps` prop.\n * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.\n *\n * @default {}\n */\n componentsProps: PropTypes.shape({\n root: PropTypes.object\n }),\n /**\n * If `true`, the backdrop is invisible.\n * It can be used when rendering a popover or a custom select component.\n * @default false\n */\n invisible: PropTypes.bool,\n /**\n * If `true`, the component is shown.\n */\n open: PropTypes.bool.isRequired,\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n *\n * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n *\n * @default {}\n */\n slotProps: PropTypes.shape({\n root: PropTypes.object\n }),\n /**\n * The components used for each slot inside.\n *\n * This prop is an alias for the `components` prop, which will be deprecated in the future.\n *\n * @default {}\n */\n slots: PropTypes.shape({\n root: PropTypes.elementType\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The component used for the transition.\n * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n * @default Fade\n */\n TransitionComponent: PropTypes.elementType,\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default Backdrop;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getModalUtilityClass(slot) {\n return generateUtilityClass('MuiModal', slot);\n}\nconst modalClasses = generateUtilityClasses('MuiModal', ['root', 'hidden', 'backdrop']);\nexport default modalClasses;","'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"BackdropComponent\", \"BackdropProps\", \"classes\", \"className\", \"closeAfterTransition\", \"children\", \"container\", \"component\", \"components\", \"componentsProps\", \"disableAutoFocus\", \"disableEnforceFocus\", \"disableEscapeKeyDown\", \"disablePortal\", \"disableRestoreFocus\", \"disableScrollLock\", \"hideBackdrop\", \"keepMounted\", \"onBackdropClick\", \"onClose\", \"onTransitionEnter\", \"onTransitionExited\", \"open\", \"slotProps\", \"slots\", \"theme\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { elementAcceptingRef, HTMLElementType } from '@mui/utils';\nimport { useSlotProps } from '@mui/base';\nimport { unstable_useModal as useModal } from '@mui/base/unstable_useModal';\nimport { unstable_composeClasses as composeClasses } from '@mui/base/composeClasses';\nimport FocusTrap from '../Unstable_TrapFocus';\nimport Portal from '../Portal';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Backdrop from '../Backdrop';\nimport { getModalUtilityClass } from './modalClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n open,\n exited,\n classes\n } = ownerState;\n const slots = {\n root: ['root', !open && exited && 'hidden'],\n backdrop: ['backdrop']\n };\n return composeClasses(slots, getModalUtilityClass, classes);\n};\nconst ModalRoot = styled('div', {\n name: 'MuiModal',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, !ownerState.open && ownerState.exited && styles.hidden];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n position: 'fixed',\n zIndex: (theme.vars || theme).zIndex.modal,\n right: 0,\n bottom: 0,\n top: 0,\n left: 0\n}, !ownerState.open && ownerState.exited && {\n visibility: 'hidden'\n}));\nconst ModalBackdrop = styled(Backdrop, {\n name: 'MuiModal',\n slot: 'Backdrop',\n overridesResolver: (props, styles) => {\n return styles.backdrop;\n }\n})({\n zIndex: -1\n});\n\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/material-ui/api/dialog/)\n * - [Drawer](/material-ui/api/drawer/)\n * - [Menu](/material-ui/api/menu/)\n * - [Popover](/material-ui/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/material-ui/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\nconst Modal = /*#__PURE__*/React.forwardRef(function Modal(inProps, ref) {\n var _ref, _slots$root, _ref2, _slots$backdrop, _slotProps$root, _slotProps$backdrop;\n const props = useThemeProps({\n name: 'MuiModal',\n props: inProps\n });\n const {\n BackdropComponent = ModalBackdrop,\n BackdropProps,\n className,\n closeAfterTransition = false,\n children,\n container,\n component,\n components = {},\n componentsProps = {},\n disableAutoFocus = false,\n disableEnforceFocus = false,\n disableEscapeKeyDown = false,\n disablePortal = false,\n disableRestoreFocus = false,\n disableScrollLock = false,\n hideBackdrop = false,\n keepMounted = false,\n onBackdropClick,\n open,\n slotProps,\n slots\n // eslint-disable-next-line react/prop-types\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const propsWithDefaults = _extends({}, props, {\n closeAfterTransition,\n disableAutoFocus,\n disableEnforceFocus,\n disableEscapeKeyDown,\n disablePortal,\n disableRestoreFocus,\n disableScrollLock,\n hideBackdrop,\n keepMounted\n });\n const {\n getRootProps,\n getBackdropProps,\n getTransitionProps,\n portalRef,\n isTopModal,\n exited,\n hasTransition\n } = useModal(_extends({}, propsWithDefaults, {\n rootRef: ref\n }));\n const ownerState = _extends({}, propsWithDefaults, {\n exited\n });\n const classes = useUtilityClasses(ownerState);\n const childProps = {};\n if (children.props.tabIndex === undefined) {\n childProps.tabIndex = '-1';\n }\n\n // It's a Transition like component\n if (hasTransition) {\n const {\n onEnter,\n onExited\n } = getTransitionProps();\n childProps.onEnter = onEnter;\n childProps.onExited = onExited;\n }\n const RootSlot = (_ref = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : components.Root) != null ? _ref : ModalRoot;\n const BackdropSlot = (_ref2 = (_slots$backdrop = slots == null ? void 0 : slots.backdrop) != null ? _slots$backdrop : components.Backdrop) != null ? _ref2 : BackdropComponent;\n const rootSlotProps = (_slotProps$root = slotProps == null ? void 0 : slotProps.root) != null ? _slotProps$root : componentsProps.root;\n const backdropSlotProps = (_slotProps$backdrop = slotProps == null ? void 0 : slotProps.backdrop) != null ? _slotProps$backdrop : componentsProps.backdrop;\n const rootProps = useSlotProps({\n elementType: RootSlot,\n externalSlotProps: rootSlotProps,\n externalForwardedProps: other,\n getSlotProps: getRootProps,\n additionalProps: {\n ref,\n as: component\n },\n ownerState,\n className: clsx(className, rootSlotProps == null ? void 0 : rootSlotProps.className, classes == null ? void 0 : classes.root, !ownerState.open && ownerState.exited && (classes == null ? void 0 : classes.hidden))\n });\n const backdropProps = useSlotProps({\n elementType: BackdropSlot,\n externalSlotProps: backdropSlotProps,\n additionalProps: BackdropProps,\n getSlotProps: otherHandlers => {\n return getBackdropProps(_extends({}, otherHandlers, {\n onClick: e => {\n if (onBackdropClick) {\n onBackdropClick(e);\n }\n if (otherHandlers != null && otherHandlers.onClick) {\n otherHandlers.onClick(e);\n }\n }\n }));\n },\n className: clsx(backdropSlotProps == null ? void 0 : backdropSlotProps.className, BackdropProps == null ? void 0 : BackdropProps.className, classes == null ? void 0 : classes.backdrop),\n ownerState\n });\n if (!keepMounted && !open && (!hasTransition || exited)) {\n return null;\n }\n return /*#__PURE__*/_jsx(Portal, {\n ref: portalRef,\n container: container,\n disablePortal: disablePortal,\n children: /*#__PURE__*/_jsxs(RootSlot, _extends({}, rootProps, {\n children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/_jsx(BackdropSlot, _extends({}, backdropProps)) : null, /*#__PURE__*/_jsx(FocusTrap, {\n disableEnforceFocus: disableEnforceFocus,\n disableAutoFocus: disableAutoFocus,\n disableRestoreFocus: disableRestoreFocus,\n isEnabled: isTopModal,\n open: open,\n children: /*#__PURE__*/React.cloneElement(children, childProps)\n })]\n }))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Modal.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * A backdrop component. This prop enables custom backdrop rendering.\n * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.\n * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.\n * @default styled(Backdrop, {\n * name: 'MuiModal',\n * slot: 'Backdrop',\n * overridesResolver: (props, styles) => {\n * return styles.backdrop;\n * },\n * })({\n * zIndex: -1,\n * })\n */\n BackdropComponent: PropTypes.elementType,\n /**\n * Props applied to the [`Backdrop`](/material-ui/api/backdrop/) element.\n * @deprecated Use `slotProps.backdrop` instead.\n */\n BackdropProps: PropTypes.object,\n /**\n * A single child content element.\n */\n children: elementAcceptingRef.isRequired,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * When set to true the Modal waits until a nested Transition is completed before closing.\n * @default false\n */\n closeAfterTransition: PropTypes.bool,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The components used for each slot inside.\n *\n * This prop is an alias for the `slots` prop.\n * It's recommended to use the `slots` prop instead.\n *\n * @default {}\n */\n components: PropTypes.shape({\n Backdrop: PropTypes.elementType,\n Root: PropTypes.elementType\n }),\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n *\n * This prop is an alias for the `slotProps` prop.\n * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.\n *\n * @default {}\n */\n componentsProps: PropTypes.shape({\n backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n }),\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n /**\n * If `true`, the modal will not automatically shift focus to itself when it opens, and\n * replace it to the last focused element when it closes.\n * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableAutoFocus: PropTypes.bool,\n /**\n * If `true`, the modal will not prevent focus from leaving the modal while open.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableEnforceFocus: PropTypes.bool,\n /**\n * If `true`, hitting escape will not fire the `onClose` callback.\n * @default false\n */\n disableEscapeKeyDown: PropTypes.bool,\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: PropTypes.bool,\n /**\n * If `true`, the modal will not restore focus to previously focused element once\n * modal is hidden or unmounted.\n * @default false\n */\n disableRestoreFocus: PropTypes.bool,\n /**\n * Disable the scroll lock behavior.\n * @default false\n */\n disableScrollLock: PropTypes.bool,\n /**\n * If `true`, the backdrop is not rendered.\n * @default false\n */\n hideBackdrop: PropTypes.bool,\n /**\n * Always keep the children in the DOM.\n * This prop can be useful in SEO situation or\n * when you want to maximize the responsiveness of the Modal.\n * @default false\n */\n keepMounted: PropTypes.bool,\n /**\n * Callback fired when the backdrop is clicked.\n * @deprecated Use the `onClose` prop with the `reason` argument to handle the `backdropClick` events.\n */\n onBackdropClick: PropTypes.func,\n /**\n * Callback fired when the component requests to be closed.\n * The `reason` parameter can optionally be used to control the response to `onClose`.\n *\n * @param {object} event The event source of the callback.\n * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n */\n onClose: PropTypes.func,\n /**\n * A function called when a transition enters.\n */\n onTransitionEnter: PropTypes.func,\n /**\n * A function called when a transition has exited.\n */\n onTransitionExited: PropTypes.func,\n /**\n * If `true`, the component is shown.\n */\n open: PropTypes.bool.isRequired,\n /**\n * The props used for each slot inside the Modal.\n * @default {}\n */\n slotProps: PropTypes.shape({\n backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n }),\n /**\n * The components used for each slot inside the Modal.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n slots: PropTypes.shape({\n backdrop: PropTypes.elementType,\n root: PropTypes.elementType\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Modal;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function createMixins(breakpoints, mixins) {\n return _extends({\n toolbar: {\n minHeight: 56,\n [breakpoints.up('xs')]: {\n '@media (orientation: landscape)': {\n minHeight: 48\n }\n },\n [breakpoints.up('sm')]: {\n minHeight: 64\n }\n }\n }, mixins);\n}","const common = {\n black: '#000',\n white: '#fff'\n};\nexport default common;","const grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#f5f5f5',\n A200: '#eeeeee',\n A400: '#bdbdbd',\n A700: '#616161'\n};\nexport default grey;","const purple = {\n 50: '#f3e5f5',\n 100: '#e1bee7',\n 200: '#ce93d8',\n 300: '#ba68c8',\n 400: '#ab47bc',\n 500: '#9c27b0',\n 600: '#8e24aa',\n 700: '#7b1fa2',\n 800: '#6a1b9a',\n 900: '#4a148c',\n A100: '#ea80fc',\n A200: '#e040fb',\n A400: '#d500f9',\n A700: '#aa00ff'\n};\nexport default purple;","const red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\nexport default red;","const orange = {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n A100: '#ffd180',\n A200: '#ffab40',\n A400: '#ff9100',\n A700: '#ff6d00'\n};\nexport default orange;","const blue = {\n 50: '#e3f2fd',\n 100: '#bbdefb',\n 200: '#90caf9',\n 300: '#64b5f6',\n 400: '#42a5f5',\n 500: '#2196f3',\n 600: '#1e88e5',\n 700: '#1976d2',\n 800: '#1565c0',\n 900: '#0d47a1',\n A100: '#82b1ff',\n A200: '#448aff',\n A400: '#2979ff',\n A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n 50: '#e1f5fe',\n 100: '#b3e5fc',\n 200: '#81d4fa',\n 300: '#4fc3f7',\n 400: '#29b6f6',\n 500: '#03a9f4',\n 600: '#039be5',\n 700: '#0288d1',\n 800: '#0277bd',\n 900: '#01579b',\n A100: '#80d8ff',\n A200: '#40c4ff',\n A400: '#00b0ff',\n A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n A100: '#b9f6ca',\n A200: '#69f0ae',\n A400: '#00e676',\n A700: '#00c853'\n};\nexport default green;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport { formatMuiErrorMessage as _formatMuiErrorMessage } from \"@mui/utils\";\nconst _excluded = [\"mode\", \"contrastThreshold\", \"tonalOffset\"];\nimport { deepmerge } from '@mui/utils';\nimport { darken, getContrastRatio, lighten } from '@mui/system';\nimport common from '../colors/common';\nimport grey from '../colors/grey';\nimport purple from '../colors/purple';\nimport red from '../colors/red';\nimport orange from '../colors/orange';\nimport blue from '../colors/blue';\nimport lightBlue from '../colors/lightBlue';\nimport green from '../colors/green';\nexport const light = {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: 'rgba(0, 0, 0, 0.87)',\n // Secondary text.\n secondary: 'rgba(0, 0, 0, 0.6)',\n // Disabled text have even lower visual prominence.\n disabled: 'rgba(0, 0, 0, 0.38)'\n },\n // The color used to divide different elements.\n divider: 'rgba(0, 0, 0, 0.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: common.white,\n default: common.white\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: 'rgba(0, 0, 0, 0.54)',\n // The color of an hovered action.\n hover: 'rgba(0, 0, 0, 0.04)',\n hoverOpacity: 0.04,\n // The color of a selected action.\n selected: 'rgba(0, 0, 0, 0.08)',\n selectedOpacity: 0.08,\n // The color of a disabled action.\n disabled: 'rgba(0, 0, 0, 0.26)',\n // The background color of a disabled action.\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(0, 0, 0, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.12\n }\n};\nexport const dark = {\n text: {\n primary: common.white,\n secondary: 'rgba(255, 255, 255, 0.7)',\n disabled: 'rgba(255, 255, 255, 0.5)',\n icon: 'rgba(255, 255, 255, 0.5)'\n },\n divider: 'rgba(255, 255, 255, 0.12)',\n background: {\n paper: '#121212',\n default: '#121212'\n },\n action: {\n active: common.white,\n hover: 'rgba(255, 255, 255, 0.08)',\n hoverOpacity: 0.08,\n selected: 'rgba(255, 255, 255, 0.16)',\n selectedOpacity: 0.16,\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(255, 255, 255, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.24\n }\n};\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = tonalOffset.light || tonalOffset;\n const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = lighten(intent.main, tonalOffsetLight);\n } else if (direction === 'dark') {\n intent.dark = darken(intent.main, tonalOffsetDark);\n }\n }\n}\nfunction getDefaultPrimary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: blue[200],\n light: blue[50],\n dark: blue[400]\n };\n }\n return {\n main: blue[700],\n light: blue[400],\n dark: blue[800]\n };\n}\nfunction getDefaultSecondary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: purple[200],\n light: purple[50],\n dark: purple[400]\n };\n }\n return {\n main: purple[500],\n light: purple[300],\n dark: purple[700]\n };\n}\nfunction getDefaultError(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: red[500],\n light: red[300],\n dark: red[700]\n };\n }\n return {\n main: red[700],\n light: red[400],\n dark: red[800]\n };\n}\nfunction getDefaultInfo(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: lightBlue[400],\n light: lightBlue[300],\n dark: lightBlue[700]\n };\n }\n return {\n main: lightBlue[700],\n light: lightBlue[500],\n dark: lightBlue[900]\n };\n}\nfunction getDefaultSuccess(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: green[400],\n light: green[300],\n dark: green[700]\n };\n }\n return {\n main: green[800],\n light: green[500],\n dark: green[900]\n };\n}\nfunction getDefaultWarning(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: orange[400],\n light: orange[300],\n dark: orange[700]\n };\n }\n return {\n main: '#ed6c02',\n // closest to orange[800] that pass 3:1.\n light: orange[500],\n dark: orange[900]\n };\n}\nexport default function createPalette(palette) {\n const {\n mode = 'light',\n contrastThreshold = 3,\n tonalOffset = 0.2\n } = palette,\n other = _objectWithoutPropertiesLoose(palette, _excluded);\n const primary = palette.primary || getDefaultPrimary(mode);\n const secondary = palette.secondary || getDefaultSecondary(mode);\n const error = palette.error || getDefaultError(mode);\n const info = palette.info || getDefaultInfo(mode);\n const success = palette.success || getDefaultSuccess(mode);\n const warning = palette.warning || getDefaultWarning(mode);\n\n // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n function getContrastText(background) {\n const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n if (process.env.NODE_ENV !== 'production') {\n const contrast = getContrastRatio(background, contrastText);\n if (contrast < 3) {\n console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n }\n }\n return contrastText;\n }\n const augmentColor = ({\n color,\n name,\n mainShade = 500,\n lightShade = 300,\n darkShade = 700\n }) => {\n color = _extends({}, color);\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n if (!color.hasOwnProperty('main')) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\nThe color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatMuiErrorMessage(11, name ? ` (${name})` : '', mainShade));\n }\n if (typeof color.main !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\n\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\n\nDid you intend to use one of the following approaches?\n\nimport { green } from \"@mui/material/colors\";\n\nconst theme1 = createTheme({ palette: {\n primary: green,\n} });\n\nconst theme2 = createTheme({ palette: {\n primary: { main: green[500] },\n} });` : _formatMuiErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n }\n addLightOrDark(color, 'light', lightShade, tonalOffset);\n addLightOrDark(color, 'dark', darkShade, tonalOffset);\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n return color;\n };\n const modes = {\n dark,\n light\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!modes[mode]) {\n console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n }\n }\n const paletteOutput = deepmerge(_extends({\n // A collection of common colors.\n common: _extends({}, common),\n // prevent mutable object.\n // The palette mode, can be light or dark.\n mode,\n // The colors used to represent primary interface elements for a user.\n primary: augmentColor({\n color: primary,\n name: 'primary'\n }),\n // The colors used to represent secondary interface elements for a user.\n secondary: augmentColor({\n color: secondary,\n name: 'secondary',\n mainShade: 'A400',\n lightShade: 'A200',\n darkShade: 'A700'\n }),\n // The colors used to represent interface elements that the user should be made aware of.\n error: augmentColor({\n color: error,\n name: 'error'\n }),\n // The colors used to represent potentially dangerous actions or important messages.\n warning: augmentColor({\n color: warning,\n name: 'warning'\n }),\n // The colors used to present information to the user that is neutral and not necessarily important.\n info: augmentColor({\n color: info,\n name: 'info'\n }),\n // The colors used to indicate the successful completion of an action that user triggered.\n success: augmentColor({\n color: success,\n name: 'success'\n }),\n // The grey colors.\n grey,\n // Used by `getContrastText()` to maximize the contrast between\n // the background and the text.\n contrastThreshold,\n // Takes a background color and returns the text color that maximizes the contrast.\n getContrastText,\n // Generate a rich color object.\n augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset\n }, modes[mode]), other);\n return paletteOutput;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"];\nimport { deepmerge } from '@mui/utils';\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n const _ref = typeof typography === 'function' ? typography(palette) : typography,\n {\n fontFamily = defaultFontFamily,\n // The default font size of the Material Specification.\n fontSize = 14,\n // px\n fontWeightLight = 300,\n fontWeightRegular = 400,\n fontWeightMedium = 500,\n fontWeightBold = 700,\n // Tell MUI what's the font-size on the html element.\n // 16px is the default font-size used by browsers.\n htmlFontSize = 16,\n // Apply the CSS properties to all the variants.\n allVariants,\n pxToRem: pxToRem2\n } = _ref,\n other = _objectWithoutPropertiesLoose(_ref, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof fontSize !== 'number') {\n console.error('MUI: `fontSize` is required to be a number.');\n }\n if (typeof htmlFontSize !== 'number') {\n console.error('MUI: `htmlFontSize` is required to be a number.');\n }\n }\n const coef = fontSize / 14;\n const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => _extends({\n fontFamily,\n fontWeight,\n fontSize: pxToRem(size),\n // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight\n }, fontFamily === defaultFontFamily ? {\n letterSpacing: `${round(letterSpacing / size)}em`\n } : {}, casing, allVariants);\n const variants = {\n h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n inherit: {\n fontFamily: 'inherit',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit'\n }\n };\n return deepmerge(_extends({\n htmlFontSize,\n pxToRem,\n fontFamily,\n fontSize,\n fontWeightLight,\n fontWeightRegular,\n fontWeightMedium,\n fontWeightBold\n }, variants), other, {\n clone: false // No need to clone deep\n });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"duration\", \"easing\", \"delay\"];\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n // This is the most common easing curve.\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n const constant = height / 36;\n\n // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\nexport default function createTransitions(inputTransitions) {\n const mergedEasing = _extends({}, easing, inputTransitions.easing);\n const mergedDuration = _extends({}, duration, inputTransitions.duration);\n const create = (props = ['all'], options = {}) => {\n const {\n duration: durationOption = mergedDuration.standard,\n easing: easingOption = mergedEasing.easeInOut,\n delay = 0\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n const isString = value => typeof value === 'string';\n // IE11 support, replace with Number.isNaN\n // eslint-disable-next-line no-restricted-globals\n const isNumber = value => !isNaN(parseFloat(value));\n if (!isString(props) && !Array.isArray(props)) {\n console.error('MUI: Argument \"props\" must be a string or Array.');\n }\n if (!isNumber(durationOption) && !isString(durationOption)) {\n console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n }\n if (!isString(easingOption)) {\n console.error('MUI: Argument \"easing\" must be a string.');\n }\n if (!isNumber(delay) && !isString(delay)) {\n console.error('MUI: Argument \"delay\" must be a number or a string.');\n }\n if (typeof options !== 'object') {\n console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n }\n if (Object.keys(other).length !== 0) {\n console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n }\n }\n return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n };\n return _extends({\n getAutoHeightDuration,\n create\n }, inputTransitions, {\n easing: mergedEasing,\n duration: mergedDuration\n });\n}","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n mobileStepper: 1000,\n fab: 1050,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\nexport default zIndex;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport { formatMuiErrorMessage as _formatMuiErrorMessage } from \"@mui/utils\";\nconst _excluded = [\"breakpoints\", \"mixins\", \"spacing\", \"palette\", \"transitions\", \"typography\", \"shape\"];\nimport { deepmerge } from '@mui/utils';\nimport { createTheme as systemCreateTheme, unstable_defaultSxConfig as defaultSxConfig, unstable_styleFunctionSx as styleFunctionSx } from '@mui/system';\nimport generateUtilityClass from '../generateUtilityClass';\nimport createMixins from './createMixins';\nimport createPalette from './createPalette';\nimport createTypography from './createTypography';\nimport shadows from './shadows';\nimport createTransitions from './createTransitions';\nimport zIndex from './zIndex';\nfunction createTheme(options = {}, ...args) {\n const {\n mixins: mixinsInput = {},\n palette: paletteInput = {},\n transitions: transitionsInput = {},\n typography: typographyInput = {}\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n if (options.vars) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: \\`vars\\` is a private field used for CSS variables support.\nPlease use another name.` : _formatMuiErrorMessage(18));\n }\n const palette = createPalette(paletteInput);\n const systemTheme = systemCreateTheme(options);\n let muiTheme = deepmerge(systemTheme, {\n mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n palette,\n // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n shadows: shadows.slice(),\n typography: createTypography(palette, typographyInput),\n transitions: createTransitions(transitionsInput),\n zIndex: _extends({}, zIndex)\n });\n muiTheme = deepmerge(muiTheme, other);\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n if (process.env.NODE_ENV !== 'production') {\n // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n const traverse = (node, component) => {\n let key;\n\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (key in node) {\n const child = node[key];\n if (stateClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n if (process.env.NODE_ENV !== 'production') {\n const stateClass = generateUtilityClass('', key);\n console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n root: {\n [`&.${stateClass}`]: child\n }\n }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n }\n // Remove the style to prevent global conflicts.\n node[key] = {};\n }\n }\n };\n Object.keys(muiTheme.components).forEach(component => {\n const styleOverrides = muiTheme.components[component].styleOverrides;\n if (styleOverrides && component.indexOf('Mui') === 0) {\n traverse(styleOverrides, component);\n }\n });\n }\n muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig, other == null ? void 0 : other.unstable_sxConfig);\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nlet warnedOnce = false;\nexport function createMuiTheme(...args) {\n if (process.env.NODE_ENV !== 'production') {\n if (!warnedOnce) {\n warnedOnce = true;\n console.error(['MUI: the createMuiTheme function was renamed to createTheme.', '', \"You should use `import { createTheme } from '@mui/material/styles'`\"].join('\\n'));\n }\n }\n return createTheme(...args);\n}\nexport default createTheme;","'use client';\n\nimport createTheme from './createTheme';\nconst defaultTheme = createTheme();\nexport default defaultTheme;","export default '$$material';","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"variant\"];\nimport { unstable_capitalize as capitalize } from '@mui/utils';\nfunction isEmpty(string) {\n return string.length === 0;\n}\n\n/**\n * Generates string classKey based on the properties provided. It starts with the\n * variant if defined, and then it appends all other properties in alphabetical order.\n * @param {object} props - the properties for which the classKey should be created.\n */\nexport default function propsToClassKey(props) {\n const {\n variant\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n let classKey = variant || '';\n Object.keys(other).sort().forEach(key => {\n if (key === 'color') {\n classKey += isEmpty(classKey) ? props[key] : capitalize(props[key]);\n } else {\n classKey += `${isEmpty(classKey) ? key : capitalize(key)}${capitalize(props[key].toString())}`;\n }\n });\n return classKey;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"name\", \"slot\", \"skipVariantsResolver\", \"skipSx\", \"overridesResolver\"];\n/* eslint-disable no-underscore-dangle */\nimport styledEngineStyled, { internal_processStyles as processStyles } from '@mui/styled-engine';\nimport { getDisplayName, unstable_capitalize as capitalize, isPlainObject, deepmerge } from '@mui/utils';\nimport createTheme from './createTheme';\nimport propsToClassKey from './propsToClassKey';\nimport styleFunctionSx from './styleFunctionSx';\nfunction isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n return typeof tag === 'string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96;\n}\nconst getStyleOverrides = (name, theme) => {\n if (theme.components && theme.components[name] && theme.components[name].styleOverrides) {\n return theme.components[name].styleOverrides;\n }\n return null;\n};\nconst transformVariants = variants => {\n const variantsStyles = {};\n if (variants) {\n variants.forEach(definition => {\n const key = propsToClassKey(definition.props);\n variantsStyles[key] = definition.style;\n });\n }\n return variantsStyles;\n};\nconst getVariantStyles = (name, theme) => {\n let variants = [];\n if (theme && theme.components && theme.components[name] && theme.components[name].variants) {\n variants = theme.components[name].variants;\n }\n return transformVariants(variants);\n};\nconst variantsResolver = (props, styles, variants) => {\n const {\n ownerState = {}\n } = props;\n const variantsStyles = [];\n if (variants) {\n variants.forEach(variant => {\n let isMatch = true;\n Object.keys(variant.props).forEach(key => {\n if (ownerState[key] !== variant.props[key] && props[key] !== variant.props[key]) {\n isMatch = false;\n }\n });\n if (isMatch) {\n variantsStyles.push(styles[propsToClassKey(variant.props)]);\n }\n });\n }\n return variantsStyles;\n};\nconst themeVariantsResolver = (props, styles, theme, name) => {\n var _theme$components;\n const themeVariants = theme == null || (_theme$components = theme.components) == null || (_theme$components = _theme$components[name]) == null ? void 0 : _theme$components.variants;\n return variantsResolver(props, styles, themeVariants);\n};\n\n// Update /system/styled/#api in case if this changes\nexport function shouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport const systemDefaultTheme = createTheme();\nconst lowercaseFirstLetter = string => {\n if (!string) {\n return string;\n }\n return string.charAt(0).toLowerCase() + string.slice(1);\n};\nfunction resolveTheme({\n defaultTheme,\n theme,\n themeId\n}) {\n return isEmpty(theme) ? defaultTheme : theme[themeId] || theme;\n}\nfunction defaultOverridesResolver(slot) {\n if (!slot) {\n return null;\n }\n return (props, styles) => styles[slot];\n}\nconst muiStyledFunctionResolver = ({\n styledArg,\n props,\n defaultTheme,\n themeId\n}) => {\n const resolvedStyles = styledArg(_extends({}, props, {\n theme: resolveTheme(_extends({}, props, {\n defaultTheme,\n themeId\n }))\n }));\n let optionalVariants;\n if (resolvedStyles && resolvedStyles.variants) {\n optionalVariants = resolvedStyles.variants;\n delete resolvedStyles.variants;\n }\n if (optionalVariants) {\n const variantsStyles = variantsResolver(props, transformVariants(optionalVariants), optionalVariants);\n return [resolvedStyles, ...variantsStyles];\n }\n return resolvedStyles;\n};\nexport default function createStyled(input = {}) {\n const {\n themeId,\n defaultTheme = systemDefaultTheme,\n rootShouldForwardProp = shouldForwardProp,\n slotShouldForwardProp = shouldForwardProp\n } = input;\n const systemSx = props => {\n return styleFunctionSx(_extends({}, props, {\n theme: resolveTheme(_extends({}, props, {\n defaultTheme,\n themeId\n }))\n }));\n };\n systemSx.__mui_systemSx = true;\n return (tag, inputOptions = {}) => {\n // Filter out the `sx` style function from the previous styled component to prevent unnecessary styles generated by the composite components.\n processStyles(tag, styles => styles.filter(style => !(style != null && style.__mui_systemSx)));\n const {\n name: componentName,\n slot: componentSlot,\n skipVariantsResolver: inputSkipVariantsResolver,\n skipSx: inputSkipSx,\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot))\n } = inputOptions,\n options = _objectWithoutPropertiesLoose(inputOptions, _excluded);\n\n // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n const skipSx = inputSkipSx || false;\n let label;\n if (process.env.NODE_ENV !== 'production') {\n if (componentName) {\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n }\n }\n let shouldForwardPropOption = shouldForwardProp;\n\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n if (componentSlot === 'Root' || componentSlot === 'root') {\n shouldForwardPropOption = rootShouldForwardProp;\n } else if (componentSlot) {\n // any other slot specified\n shouldForwardPropOption = slotShouldForwardProp;\n } else if (isStringTag(tag)) {\n // for string (html) tag, preserve the behavior in emotion & styled-components.\n shouldForwardPropOption = undefined;\n }\n const defaultStyledResolver = styledEngineStyled(tag, _extends({\n shouldForwardProp: shouldForwardPropOption,\n label\n }, options));\n const muiStyledResolver = (styleArg, ...expressions) => {\n const expressionsWithDefaultTheme = expressions ? expressions.map(stylesArg => {\n // On the server Emotion doesn't use React.forwardRef for creating components, so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n if (typeof stylesArg === 'function' && stylesArg.__emotion_real !== stylesArg) {\n return props => muiStyledFunctionResolver({\n styledArg: stylesArg,\n props,\n defaultTheme,\n themeId\n });\n }\n if (isPlainObject(stylesArg)) {\n let transformedStylesArg = stylesArg;\n let styledArgVariants;\n if (stylesArg && stylesArg.variants) {\n styledArgVariants = stylesArg.variants;\n delete transformedStylesArg.variants;\n transformedStylesArg = props => {\n let result = stylesArg;\n const variantStyles = variantsResolver(props, transformVariants(styledArgVariants), styledArgVariants);\n variantStyles.forEach(variantStyle => {\n result = deepmerge(result, variantStyle);\n });\n return result;\n };\n }\n return transformedStylesArg;\n }\n return stylesArg;\n }) : [];\n let transformedStyleArg = styleArg;\n if (isPlainObject(styleArg)) {\n let styledArgVariants;\n if (styleArg && styleArg.variants) {\n styledArgVariants = styleArg.variants;\n delete transformedStyleArg.variants;\n transformedStyleArg = props => {\n let result = styleArg;\n const variantStyles = variantsResolver(props, transformVariants(styledArgVariants), styledArgVariants);\n variantStyles.forEach(variantStyle => {\n result = deepmerge(result, variantStyle);\n });\n return result;\n };\n }\n } else if (typeof styleArg === 'function' &&\n // On the server Emotion doesn't use React.forwardRef for creating components, so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n styleArg.__emotion_real !== styleArg) {\n // If the type is function, we need to define the default theme.\n transformedStyleArg = props => muiStyledFunctionResolver({\n styledArg: styleArg,\n props,\n defaultTheme,\n themeId\n });\n }\n if (componentName && overridesResolver) {\n expressionsWithDefaultTheme.push(props => {\n const theme = resolveTheme(_extends({}, props, {\n defaultTheme,\n themeId\n }));\n const styleOverrides = getStyleOverrides(componentName, theme);\n if (styleOverrides) {\n const resolvedStyleOverrides = {};\n Object.entries(styleOverrides).forEach(([slotKey, slotStyle]) => {\n resolvedStyleOverrides[slotKey] = typeof slotStyle === 'function' ? slotStyle(_extends({}, props, {\n theme\n })) : slotStyle;\n });\n return overridesResolver(props, resolvedStyleOverrides);\n }\n return null;\n });\n }\n if (componentName && !skipVariantsResolver) {\n expressionsWithDefaultTheme.push(props => {\n const theme = resolveTheme(_extends({}, props, {\n defaultTheme,\n themeId\n }));\n return themeVariantsResolver(props, getVariantStyles(componentName, theme), theme, componentName);\n });\n }\n if (!skipSx) {\n expressionsWithDefaultTheme.push(systemSx);\n }\n const numOfCustomFnsApplied = expressionsWithDefaultTheme.length - expressions.length;\n if (Array.isArray(styleArg) && numOfCustomFnsApplied > 0) {\n const placeholders = new Array(numOfCustomFnsApplied).fill('');\n // If the type is array, than we need to add placeholders in the template for the overrides, variants and the sx styles.\n transformedStyleArg = [...styleArg, ...placeholders];\n transformedStyleArg.raw = [...styleArg.raw, ...placeholders];\n }\n const Component = defaultStyledResolver(transformedStyleArg, ...expressionsWithDefaultTheme);\n if (process.env.NODE_ENV !== 'production') {\n let displayName;\n if (componentName) {\n displayName = `${componentName}${capitalize(componentSlot || '')}`;\n }\n if (displayName === undefined) {\n displayName = `Styled(${getDisplayName(tag)})`;\n }\n Component.displayName = displayName;\n }\n if (tag.muiName) {\n Component.muiName = tag.muiName;\n }\n return Component;\n };\n if (defaultStyledResolver.withConfig) {\n muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n }\n return muiStyledResolver;\n };\n}","'use client';\n\nimport { createStyled, shouldForwardProp } from '@mui/system';\nimport defaultTheme from './defaultTheme';\nimport THEME_ID from './identifier';\nexport const rootShouldForwardProp = prop => shouldForwardProp(prop) && prop !== 'classes';\nexport const slotShouldForwardProp = shouldForwardProp;\nconst styled = createStyled({\n themeId: THEME_ID,\n defaultTheme,\n rootShouldForwardProp\n});\nexport default styled;","'use client';\n\nimport getThemeProps from './getThemeProps';\nimport useTheme from '../useTheme';\nexport default function useThemeProps({\n props,\n name,\n defaultTheme,\n themeId\n}) {\n let theme = useTheme(defaultTheme);\n if (themeId) {\n theme = theme[themeId] || theme;\n }\n const mergedProps = getThemeProps({\n theme,\n name,\n props\n });\n return mergedProps;\n}","import { internal_resolveProps as resolveProps } from '@mui/utils';\nexport default function getThemeProps(params) {\n const {\n theme,\n name,\n props\n } = params;\n if (!theme || !theme.components || !theme.components[name] || !theme.components[name].defaultProps) {\n return props;\n }\n return resolveProps(theme.components[name].defaultProps, props);\n}","'use client';\n\nimport { useThemeProps as systemUseThemeProps } from '@mui/system';\nimport defaultTheme from './defaultTheme';\nimport THEME_ID from './identifier';\nexport default function useThemeProps({\n props,\n name\n}) {\n return systemUseThemeProps({\n props,\n name,\n defaultTheme,\n themeId: THEME_ID\n });\n}","import { unstable_capitalize as capitalize } from '@mui/utils';\nexport default capitalize;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"inheritViewBox\", \"titleAccess\", \"viewBox\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base/composeClasses';\nimport capitalize from '../utils/capitalize';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport { getSvgIconUtilityClass } from './svgIconClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n color,\n fontSize,\n classes\n } = ownerState;\n const slots = {\n root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n };\n return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n name: 'MuiSvgIcon',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n }\n})(({\n theme,\n ownerState\n}) => {\n var _theme$transitions, _theme$transitions$cr, _theme$transitions2, _theme$typography, _theme$typography$pxT, _theme$typography2, _theme$typography2$px, _theme$typography3, _theme$typography3$px, _palette$ownerState$c, _palette, _palette2, _palette3;\n return {\n userSelect: 'none',\n width: '1em',\n height: '1em',\n display: 'inline-block',\n // the will define the property that has `currentColor`\n // e.g. heroicons uses fill=\"none\" and stroke=\"currentColor\"\n fill: ownerState.hasSvgAsChild ? undefined : 'currentColor',\n flexShrink: 0,\n transition: (_theme$transitions = theme.transitions) == null || (_theme$transitions$cr = _theme$transitions.create) == null ? void 0 : _theme$transitions$cr.call(_theme$transitions, 'fill', {\n duration: (_theme$transitions2 = theme.transitions) == null || (_theme$transitions2 = _theme$transitions2.duration) == null ? void 0 : _theme$transitions2.shorter\n }),\n fontSize: {\n inherit: 'inherit',\n small: ((_theme$typography = theme.typography) == null || (_theme$typography$pxT = _theme$typography.pxToRem) == null ? void 0 : _theme$typography$pxT.call(_theme$typography, 20)) || '1.25rem',\n medium: ((_theme$typography2 = theme.typography) == null || (_theme$typography2$px = _theme$typography2.pxToRem) == null ? void 0 : _theme$typography2$px.call(_theme$typography2, 24)) || '1.5rem',\n large: ((_theme$typography3 = theme.typography) == null || (_theme$typography3$px = _theme$typography3.pxToRem) == null ? void 0 : _theme$typography3$px.call(_theme$typography3, 35)) || '2.1875rem'\n }[ownerState.fontSize],\n // TODO v5 deprecate, v6 remove for sx\n color: (_palette$ownerState$c = (_palette = (theme.vars || theme).palette) == null || (_palette = _palette[ownerState.color]) == null ? void 0 : _palette.main) != null ? _palette$ownerState$c : {\n action: (_palette2 = (theme.vars || theme).palette) == null || (_palette2 = _palette2.action) == null ? void 0 : _palette2.active,\n disabled: (_palette3 = (theme.vars || theme).palette) == null || (_palette3 = _palette3.action) == null ? void 0 : _palette3.disabled,\n inherit: undefined\n }[ownerState.color]\n };\n});\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiSvgIcon'\n });\n const {\n children,\n className,\n color = 'inherit',\n component = 'svg',\n fontSize = 'medium',\n htmlColor,\n inheritViewBox = false,\n titleAccess,\n viewBox = '0 0 24 24'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n const ownerState = _extends({}, props, {\n color,\n component,\n fontSize,\n instanceFontSize: inProps.fontSize,\n inheritViewBox,\n viewBox,\n hasSvgAsChild\n });\n const more = {};\n if (!inheritViewBox) {\n more.viewBox = viewBox;\n }\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SvgIconRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n focusable: \"false\",\n color: htmlColor,\n \"aria-hidden\": titleAccess ? undefined : true,\n role: titleAccess ? 'img' : undefined,\n ref: ref\n }, more, other, hasSvgAsChild && children.props, {\n ownerState: ownerState,\n children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n children: titleAccess\n }) : null]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Node passed into the SVG element.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n * @default 'inherit'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n * @default 'medium'\n */\n fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n /**\n * Applies a color attribute to the SVG element.\n */\n htmlColor: PropTypes.string,\n /**\n * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n * prop will be ignored.\n * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n * `component`'s viewBox to the root node.\n * @default false\n */\n inheritViewBox: PropTypes.bool,\n /**\n * The shape-rendering attribute. The behavior of the different options is described on the\n * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).\n * If you are having issues with blurry icons you should investigate this prop.\n */\n shapeRendering: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Provides a human-readable title for the element that contains it.\n * https://www.w3.org/TR/SVG-access/#Equivalent\n */\n titleAccess: PropTypes.string,\n /**\n * Allows you to redefine what the coordinates without units mean inside an SVG element.\n * For example, if the SVG element is 500 (width) by 200 (height),\n * and you pass viewBox=\"0 0 50 20\",\n * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n * to bottom right (50,20) and each unit will be worth 10px.\n * @default '0 0 24 24'\n */\n viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport SvgIcon from '../SvgIcon';\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n function Component(props, ref) {\n return /*#__PURE__*/_jsx(SvgIcon, _extends({\n \"data-testid\": `${displayName}Icon`,\n ref: ref\n }, props, {\n children: path\n }));\n }\n if (process.env.NODE_ENV !== 'production') {\n // Need to set `displayName` on the inner component for React.memo.\n // React prior to 16.14 ignores `displayName` on the wrapper.\n Component.displayName = `${displayName}Icon`;\n }\n Component.muiName = SvgIcon.muiName;\n return /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(Component));\n}","import { unstable_createChainedFunction as createChainedFunction } from '@mui/utils';\nexport default createChainedFunction;","import { unstable_debounce as debounce } from '@mui/utils';\nexport default debounce;","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n let timeout;\n function debounced(...args) {\n const later = () => {\n // @ts-ignore\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n return debounced;\n}","import { unstable_deprecatedPropType as deprecatedPropType } from '@mui/utils';\nexport default deprecatedPropType;","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n return (props, propName, componentName, location, propFullName) => {\n const componentNameSafe = componentName || '<>';\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The ${location} \\`${propFullNameSafe}\\` of ` + `\\`${componentNameSafe}\\` is deprecated. ${reason}`);\n }\n return null;\n };\n}","import { unstable_isMuiElement as isMuiElement } from '@mui/utils';\nexport default isMuiElement;","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n var _muiName, _element$type;\n return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName\n // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n // eslint-disable-next-line no-underscore-dangle\n (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;\n}","import { unstable_ownerDocument as ownerDocument } from '@mui/utils';\nexport default ownerDocument;","import { unstable_ownerWindow as ownerWindow } from '@mui/utils';\nexport default ownerWindow;","import { unstable_requirePropFactory as requirePropFactory } from '@mui/utils';\nexport default requirePropFactory;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function requirePropFactory(componentNameInError, Component) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n\n // eslint-disable-next-line react/forbid-foreign-prop-types\n const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;\n const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n const propFullNameSafe = propFullName || propName;\n const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];\n if (defaultTypeChecker) {\n const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n if (typeCheckerResult) {\n return typeCheckerResult;\n }\n }\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n }\n return null;\n };\n return requireProp;\n}","import { unstable_setRef as setRef } from '@mui/utils';\nexport default setRef;","'use client';\n\nimport { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\nfunction useGlobalId(idOverride) {\n const [defaultId, setDefaultId] = React.useState(idOverride);\n const id = idOverride || defaultId;\n React.useEffect(() => {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(`mui-${globalId}`);\n }\n }, [defaultId]);\n return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId = React['useId'.toString()];\n/**\n *\n * @example
\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride != null ? idOverride : reactId;\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride);\n}","'use client';\n\nimport { unstable_useId as useId } from '@mui/utils';\nexport default useId;","import { unstable_unsupportedProp as unsupportedProp } from '@mui/utils';\nexport default unsupportedProp;","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n }\n return null;\n}","'use client';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/base/ClassNameGenerator';\nexport { default as capitalize } from './capitalize';\nexport { default as createChainedFunction } from './createChainedFunction';\nexport { default as createSvgIcon } from './createSvgIcon';\nexport { default as debounce } from './debounce';\nexport { default as deprecatedPropType } from './deprecatedPropType';\nexport { default as isMuiElement } from './isMuiElement';\nexport { default as ownerDocument } from './ownerDocument';\nexport { default as ownerWindow } from './ownerWindow';\nexport { default as requirePropFactory } from './requirePropFactory';\nexport { default as setRef } from './setRef';\nexport { default as unstable_useEnhancedEffect } from './useEnhancedEffect';\nexport { default as unstable_useId } from './useId';\nexport { default as unsupportedProp } from './unsupportedProp';\nexport { default as useControlled } from './useControlled';\nexport { default as useEventCallback } from './useEventCallback';\nexport { default as useForkRef } from './useForkRef';\nexport { default as useIsFocusVisible } from './useIsFocusVisible';\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_ClassNameGenerator = {\n configure: generator => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', \"You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead\", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\\n'));\n }\n ClassNameGenerator.configure(generator);\n }\n};","'use client';\n\nimport { unstable_useControlled as useControlled } from '@mui/utils';\nexport default useControlled;","'use client';\n\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled({\n controlled,\n default: defaultProp,\n name,\n state = 'value'\n}) {\n // isControlled is ignored in the hook dependency lists as it should never change.\n const {\n current: isControlled\n } = React.useRef(controlled !== undefined);\n const [valueState, setValue] = React.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (process.env.NODE_ENV !== 'production') {\n React.useEffect(() => {\n if (isControlled !== (controlled !== undefined)) {\n console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n }\n }, [state, name, controlled]);\n const {\n current: defaultValue\n } = React.useRef(defaultProp);\n React.useEffect(() => {\n if (!isControlled && defaultValue !== defaultProp) {\n console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n }\n }, [JSON.stringify(defaultProp)]);\n }\n const setValueIfUncontrolled = React.useCallback(newValue => {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport { unstable_useEventCallback as useEventCallback } from '@mui/utils';\nexport default useEventCallback;","'use client';\n\nimport { unstable_useForkRef as useForkRef } from '@mui/utils';\nexport default useForkRef;","'use client';\n\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\nimport * as React from 'react';\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nlet hadFocusVisibleRecentlyTimeout;\nconst inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n};\n\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n const {\n type,\n tagName\n } = node;\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n return true;\n }\n if (tagName === 'TEXTAREA' && !node.readOnly) {\n return true;\n }\n if (node.isContentEditable) {\n return true;\n }\n return false;\n}\n\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n hadKeyboardEvent = true;\n}\n\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n if (this.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\nfunction prepare(doc) {\n doc.addEventListener('keydown', handleKeyDown, true);\n doc.addEventListener('mousedown', handlePointerDown, true);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('touchstart', handlePointerDown, true);\n doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\nexport function teardown(doc) {\n doc.removeEventListener('keydown', handleKeyDown, true);\n doc.removeEventListener('mousedown', handlePointerDown, true);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('touchstart', handlePointerDown, true);\n doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n const {\n target\n } = event;\n try {\n return target.matches(':focus-visible');\n } catch (error) {\n // Browsers not implementing :focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n }\n\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nexport default function useIsFocusVisible() {\n const ref = React.useCallback(node => {\n if (node != null) {\n prepare(node.ownerDocument);\n }\n }, []);\n const isFocusVisibleRef = React.useRef(false);\n\n /**\n * Should be called if a blur event is fired\n */\n function handleBlurVisible() {\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef.current) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(() => {\n hadFocusVisibleRecently = false;\n }, 100);\n isFocusVisibleRef.current = false;\n return true;\n }\n return false;\n }\n\n /**\n * Should be called if a blur event is fired\n */\n function handleFocusVisible(event) {\n if (isFocusVisible(event)) {\n isFocusVisibleRef.current = true;\n return true;\n }\n return false;\n }\n return {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref\n };\n}","'use client';\n\nimport { unstable_useIsFocusVisible as useIsFocusVisible } from '@mui/utils';\nexport default useIsFocusVisible;","/**\n * @mui/styled-engine v5.14.12\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const internal_processStyles = (tag, processor) => {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n};\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from './StyledEngineProvider';\nexport { default as GlobalStyles } from './GlobalStyles';","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport PropTypes from 'prop-types';\nimport { deepmerge } from '@mui/utils';\nimport merge from './merge';\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n};\n\nconst defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: key => `@media (min-width:${values[key]}px)`\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc, item, index) => {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n if (typeof propValue === 'object') {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc, breakpoint) => {\n // key is breakpoint\n if (Object.keys(themeBreakpoints.values || values).indexOf(breakpoint) !== -1) {\n const mediaKey = themeBreakpoints.up(breakpoint);\n acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n } else {\n const cssKey = breakpoint;\n acc[cssKey] = propValue[cssKey];\n }\n return acc;\n }, {});\n }\n const output = styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction) {\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction = props => {\n const theme = props.theme || {};\n const base = styleFunction(props);\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n const extended = themeBreakpoints.keys.reduce((acc, key) => {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction(_extends({\n theme\n }, props[key]));\n }\n return acc;\n }, null);\n return merge(base, extended);\n };\n newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? _extends({}, styleFunction.propTypes, {\n xs: PropTypes.object,\n sm: PropTypes.object,\n md: PropTypes.object,\n lg: PropTypes.object,\n xl: PropTypes.object\n }) : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n var _breakpointsInput$key;\n const breakpointsInOrder = (_breakpointsInput$key = breakpointsInput.keys) == null ? void 0 : _breakpointsInput$key.reduce((acc, key) => {\n const breakpointStyleKey = breakpointsInput.up(key);\n acc[breakpointStyleKey] = {};\n return acc;\n }, {});\n return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n return breakpointKeys.reduce((acc, key) => {\n const breakpointOutput = acc[key];\n const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n if (isBreakpointUnused) {\n delete acc[key];\n }\n return acc;\n }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n // fixed value\n if (typeof breakpointValues !== 'object') {\n return {};\n }\n const base = {};\n const breakpointsKeys = Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < breakpointValues.length) {\n base[breakpoint] = true;\n }\n });\n } else {\n breakpointsKeys.forEach(breakpoint => {\n if (breakpointValues[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues({\n values: breakpointValues,\n breakpoints: themeBreakpoints,\n base: customBase\n}) {\n const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return breakpointValues;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(breakpointValues)) {\n acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n previous = i;\n } else if (typeof breakpointValues === 'object') {\n acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n previous = breakpoint;\n } else {\n acc[breakpoint] = breakpointValues;\n }\n return acc;\n }, {});\n}\nexport default breakpoints;","import { formatMuiErrorMessage as _formatMuiErrorMessage } from \"@mui/utils\";\n/* eslint-disable @typescript-eslint/naming-convention */\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(value, min = 0, max = 1) {\n if (process.env.NODE_ENV !== 'production') {\n if (value < min || value > max) {\n console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n }\n }\n return Math.min(Math.max(min, value), max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n color = color.slice(1);\n const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n let colors = color.match(re);\n if (colors && colors[0].length === 1) {\n colors = colors.map(n => n + n);\n }\n return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n const marker = color.indexOf('(');\n const type = color.substring(0, marker);\n if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\nThe following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` : _formatMuiErrorMessage(9, color));\n }\n let values = color.substring(marker + 1, color.length - 1);\n let colorSpace;\n if (type === 'color') {\n values = values.split(' ');\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === '/') {\n values[3] = values[3].slice(1);\n }\n if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\nThe following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.` : _formatMuiErrorMessage(10, colorSpace));\n }\n } else {\n values = values.split(',');\n }\n values = values.map(value => parseFloat(value));\n return {\n type,\n values,\n colorSpace\n };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n const decomposedColor = decomposeColor(color);\n return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n try {\n return colorChannel(color);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n const {\n type,\n colorSpace\n } = color;\n let {\n values\n } = color;\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n } else if (type.indexOf('hsl') !== -1) {\n values[1] = `${values[1]}%`;\n values[2] = `${values[2]}%`;\n }\n if (type.indexOf('color') !== -1) {\n values = `${colorSpace} ${values.join(' ')}`;\n } else {\n values = `${values.join(', ')}`;\n }\n return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n // Idempotent\n if (color.indexOf('#') === 0) {\n return color;\n }\n const {\n values\n } = decomposeColor(color);\n return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n color = decomposeColor(color);\n const {\n values\n } = color;\n const h = values[0];\n const s = values[1] / 100;\n const l = values[2] / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n let type = 'rgb';\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n return recomposeColor({\n type,\n values: rgb\n });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n color = decomposeColor(color);\n let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(val => {\n if (color.type !== 'color') {\n val /= 255; // normalized\n }\n\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n });\n\n // Truncate at 3 digits\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n color = decomposeColor(color);\n value = clamp(value);\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n if (color.type === 'color') {\n color.values[3] = `/${value}`;\n } else {\n color.values[3] = value;\n }\n return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n try {\n return alpha(color, value);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n try {\n return darken(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n } else if (color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (1 - color.values[i]) * coefficient;\n }\n }\n return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n try {\n return lighten(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n try {\n return private_safeEmphasize(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"values\", \"unit\", \"step\"];\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return _extends({}, acc, {\n [obj.key]: obj.val\n });\n }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n },\n\n unit = 'px',\n step = 5\n } = breakpoints,\n other = _objectWithoutPropertiesLoose(breakpoints, _excluded);\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n return up(key);\n }\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n return _extends({\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit\n }, other);\n}","const shape = {\n borderRadius: 4\n};\nexport default shape;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"breakpoints\", \"palette\", \"spacing\", \"shape\"];\nimport { deepmerge } from '@mui/utils';\nimport createBreakpoints from './createBreakpoints';\nimport shape from './shape';\nimport createSpacing from './createSpacing';\nimport styleFunctionSx from '../styleFunctionSx/styleFunctionSx';\nimport defaultSxConfig from '../styleFunctionSx/defaultSxConfig';\nfunction createTheme(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput = {},\n palette: paletteInput = {},\n spacing: spacingInput,\n shape: shapeInput = {}\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n const breakpoints = createBreakpoints(breakpointsInput);\n const spacing = createSpacing(spacingInput);\n let muiTheme = deepmerge({\n breakpoints,\n direction: 'ltr',\n components: {},\n // Inject component definitions.\n palette: _extends({\n mode: 'light'\n }, paletteInput),\n spacing,\n shape: _extends({}, shape, shapeInput)\n }, other);\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig, other == null ? void 0 : other.unstable_sxConfig);\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nexport default createTheme;","import { createUnarySpacing } from '../spacing';\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n/* tslint:disable:unified-signatures */\n/* tslint:enable:unified-signatures */\n\nexport default function createSpacing(spacingInput = 8) {\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n }\n\n // Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n // Smaller components, such as icons, can align to a 4dp grid.\n // https://m2.material.io/design/layout/understanding-layout.html\n const transform = createUnarySpacing({\n spacing: spacingInput\n });\n const spacing = (...argsInput) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!(argsInput.length <= 4)) {\n console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n }\n }\n const args = argsInput.length === 0 ? [1] : argsInput;\n return args.map(argument => {\n const output = transform(argument);\n return typeof output === 'number' ? `${output}px` : output;\n }).join(' ');\n };\n spacing.mui = true;\n return spacing;\n}","import { deepmerge } from '@mui/utils';\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n return deepmerge(acc, item, {\n clone: false // No need to clone deep, it's way faster.\n });\n}\n\nexport default merge;","import responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nimport { getPath } from './style';\nimport merge from './merge';\nimport memoize from './memoize';\nconst properties = {\n m: 'margin',\n p: 'padding'\n};\nconst directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nconst aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n const [a, b] = prop.split('');\n const property = properties[a];\n const direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n var _getPath;\n const themeSpacing = (_getPath = getPath(theme, themeKey, false)) != null ? _getPath : defaultValue;\n if (typeof themeSpacing === 'number') {\n return abs => {\n if (typeof abs === 'string') {\n return abs;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (typeof abs !== 'number') {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${abs}.`);\n }\n }\n return themeSpacing * abs;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return abs => {\n if (typeof abs === 'string') {\n return abs;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!Number.isInteger(abs)) {\n console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n } else if (abs > themeSpacing.length - 1) {\n console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n }\n }\n return themeSpacing[abs];\n };\n }\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n const abs = Math.abs(propValue);\n const transformed = transformer(abs);\n if (propValue >= 0) {\n return transformed;\n }\n if (typeof transformed === 'number') {\n return -transformed;\n }\n return `-${transformed}`;\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n return propValue => cssProperties.reduce((acc, cssProperty) => {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (keys.indexOf(prop) === -1) {\n return null;\n }\n const cssProperties = getCssProperties(prop);\n const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n const propValue = props[prop];\n return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n const transformer = createUnarySpacing(props.theme);\n return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","export default function memoize(fn) {\n const cache = {};\n return arg => {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n return cache[arg];\n };\n}","import { unstable_capitalize as capitalize } from '@mui/utils';\nimport responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nexport function getPath(obj, path, checkVars = true) {\n if (!path || typeof path !== 'string') {\n return null;\n }\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars) {\n const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n if (val != null) {\n return val;\n }\n }\n return path.split('.').reduce((acc, item) => {\n if (acc && acc[item] != null) {\n return acc[item];\n }\n return null;\n }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n let value;\n if (typeof themeMapping === 'function') {\n value = themeMapping(propValueFinal);\n } else if (Array.isArray(themeMapping)) {\n value = themeMapping[propValueFinal] || userValue;\n } else {\n value = getPath(themeMapping, propValueFinal) || userValue;\n }\n if (transform) {\n value = transform(value, userValue, themeMapping);\n }\n return value;\n}\nfunction style(options) {\n const {\n prop,\n cssProperty = options.prop,\n themeKey,\n transform\n } = options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n if (props[prop] == null) {\n return null;\n }\n const propValue = props[prop];\n const theme = props.theme;\n const themeMapping = getPath(theme, themeKey) || {};\n const styleFromPropValue = propValueFinal => {\n let value = getStyleValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, propValue, styleFromPropValue);\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n [prop]: responsivePropType\n } : {};\n fn.filterProps = [prop];\n return fn;\n}\nexport default style;","import merge from './merge';\nfunction compose(...styles) {\n const handlers = styles.reduce((acc, style) => {\n style.filterProps.forEach(prop => {\n acc[prop] = style;\n });\n return acc;\n }, {});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n return Object.keys(props).reduce((acc, prop) => {\n if (handlers[prop]) {\n return merge(acc, handlers[prop](props));\n }\n return acc;\n }, {});\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n return fn;\n}\nexport default compose;","import responsivePropType from './responsivePropType';\nimport style from './style';\nimport compose from './compose';\nimport { createUnaryUnit, getValue } from './spacing';\nimport { handleBreakpoints } from './breakpoints';\nexport function borderTransform(value) {\n if (typeof value !== 'number') {\n return value;\n }\n return `${value}px solid`;\n}\nexport const border = style({\n prop: 'border',\n themeKey: 'borders',\n transform: borderTransform\n});\nexport const borderTop = style({\n prop: 'borderTop',\n themeKey: 'borders',\n transform: borderTransform\n});\nexport const borderRight = style({\n prop: 'borderRight',\n themeKey: 'borders',\n transform: borderTransform\n});\nexport const borderBottom = style({\n prop: 'borderBottom',\n themeKey: 'borders',\n transform: borderTransform\n});\nexport const borderLeft = style({\n prop: 'borderLeft',\n themeKey: 'borders',\n transform: borderTransform\n});\nexport const borderColor = style({\n prop: 'borderColor',\n themeKey: 'palette'\n});\nexport const borderTopColor = style({\n prop: 'borderTopColor',\n themeKey: 'palette'\n});\nexport const borderRightColor = style({\n prop: 'borderRightColor',\n themeKey: 'palette'\n});\nexport const borderBottomColor = style({\n prop: 'borderBottomColor',\n themeKey: 'palette'\n});\nexport const borderLeftColor = style({\n prop: 'borderLeftColor',\n themeKey: 'palette'\n});\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n if (props.borderRadius !== undefined && props.borderRadius !== null) {\n const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n const styleFromPropValue = propValue => ({\n borderRadius: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n }\n return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius);\nexport default borders;","import style from './style';\nimport compose from './compose';\nimport { createUnaryUnit, getValue } from './spacing';\nimport { handleBreakpoints } from './breakpoints';\nimport responsivePropType from './responsivePropType';\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n if (props.gap !== undefined && props.gap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n const styleFromPropValue = propValue => ({\n gap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.gap, styleFromPropValue);\n }\n return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n if (props.columnGap !== undefined && props.columnGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n const styleFromPropValue = propValue => ({\n columnGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n }\n return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n if (props.rowGap !== undefined && props.rowGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n const styleFromPropValue = propValue => ({\n rowGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n }\n return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n prop: 'gridColumn'\n});\nexport const gridRow = style({\n prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from './style';\nimport compose from './compose';\nexport function paletteTransform(value, userValue) {\n if (userValue === 'grey') {\n return userValue;\n }\n return value;\n}\nexport const color = style({\n prop: 'color',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const bgcolor = style({\n prop: 'bgcolor',\n cssProperty: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const backgroundColor = style({\n prop: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from './style';\nimport compose from './compose';\nimport { handleBreakpoints, values as breakpointsValues } from './breakpoints';\nexport function sizingTransform(value) {\n return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n prop: 'width',\n transform: sizingTransform\n});\nexport const maxWidth = props => {\n if (props.maxWidth !== undefined && props.maxWidth !== null) {\n const styleFromPropValue = propValue => {\n var _props$theme, _props$theme2;\n const breakpoint = ((_props$theme = props.theme) == null || (_props$theme = _props$theme.breakpoints) == null || (_props$theme = _props$theme.values) == null ? void 0 : _props$theme[propValue]) || breakpointsValues[propValue];\n if (!breakpoint) {\n return {\n maxWidth: sizingTransform(propValue)\n };\n }\n if (((_props$theme2 = props.theme) == null || (_props$theme2 = _props$theme2.breakpoints) == null ? void 0 : _props$theme2.unit) !== 'px') {\n return {\n maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n };\n }\n return {\n maxWidth: breakpoint\n };\n };\n return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n }\n return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n prop: 'minWidth',\n transform: sizingTransform\n});\nexport const height = style({\n prop: 'height',\n transform: sizingTransform\n});\nexport const maxHeight = style({\n prop: 'maxHeight',\n transform: sizingTransform\n});\nexport const minHeight = style({\n prop: 'minHeight',\n transform: sizingTransform\n});\nexport const sizeWidth = style({\n prop: 'size',\n cssProperty: 'width',\n transform: sizingTransform\n});\nexport const sizeHeight = style({\n prop: 'size',\n cssProperty: 'height',\n transform: sizingTransform\n});\nexport const boxSizing = style({\n prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from '../spacing';\nimport { borderRadius, borderTransform } from '../borders';\nimport { gap, rowGap, columnGap } from '../cssGrid';\nimport { paletteTransform } from '../palette';\nimport { maxWidth, sizingTransform } from '../sizing';\nconst defaultSxConfig = {\n // borders\n border: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderTop: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderRight: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderBottom: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderLeft: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderColor: {\n themeKey: 'palette'\n },\n borderTopColor: {\n themeKey: 'palette'\n },\n borderRightColor: {\n themeKey: 'palette'\n },\n borderBottomColor: {\n themeKey: 'palette'\n },\n borderLeftColor: {\n themeKey: 'palette'\n },\n borderRadius: {\n themeKey: 'shape.borderRadius',\n style: borderRadius\n },\n // palette\n color: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n bgcolor: {\n themeKey: 'palette',\n cssProperty: 'backgroundColor',\n transform: paletteTransform\n },\n backgroundColor: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n // spacing\n p: {\n style: padding\n },\n pt: {\n style: padding\n },\n pr: {\n style: padding\n },\n pb: {\n style: padding\n },\n pl: {\n style: padding\n },\n px: {\n style: padding\n },\n py: {\n style: padding\n },\n padding: {\n style: padding\n },\n paddingTop: {\n style: padding\n },\n paddingRight: {\n style: padding\n },\n paddingBottom: {\n style: padding\n },\n paddingLeft: {\n style: padding\n },\n paddingX: {\n style: padding\n },\n paddingY: {\n style: padding\n },\n paddingInline: {\n style: padding\n },\n paddingInlineStart: {\n style: padding\n },\n paddingInlineEnd: {\n style: padding\n },\n paddingBlock: {\n style: padding\n },\n paddingBlockStart: {\n style: padding\n },\n paddingBlockEnd: {\n style: padding\n },\n m: {\n style: margin\n },\n mt: {\n style: margin\n },\n mr: {\n style: margin\n },\n mb: {\n style: margin\n },\n ml: {\n style: margin\n },\n mx: {\n style: margin\n },\n my: {\n style: margin\n },\n margin: {\n style: margin\n },\n marginTop: {\n style: margin\n },\n marginRight: {\n style: margin\n },\n marginBottom: {\n style: margin\n },\n marginLeft: {\n style: margin\n },\n marginX: {\n style: margin\n },\n marginY: {\n style: margin\n },\n marginInline: {\n style: margin\n },\n marginInlineStart: {\n style: margin\n },\n marginInlineEnd: {\n style: margin\n },\n marginBlock: {\n style: margin\n },\n marginBlockStart: {\n style: margin\n },\n marginBlockEnd: {\n style: margin\n },\n // display\n displayPrint: {\n cssProperty: false,\n transform: value => ({\n '@media print': {\n display: value\n }\n })\n },\n display: {},\n overflow: {},\n textOverflow: {},\n visibility: {},\n whiteSpace: {},\n // flexbox\n flexBasis: {},\n flexDirection: {},\n flexWrap: {},\n justifyContent: {},\n alignItems: {},\n alignContent: {},\n order: {},\n flex: {},\n flexGrow: {},\n flexShrink: {},\n alignSelf: {},\n justifyItems: {},\n justifySelf: {},\n // grid\n gap: {\n style: gap\n },\n rowGap: {\n style: rowGap\n },\n columnGap: {\n style: columnGap\n },\n gridColumn: {},\n gridRow: {},\n gridAutoFlow: {},\n gridAutoColumns: {},\n gridAutoRows: {},\n gridTemplateColumns: {},\n gridTemplateRows: {},\n gridTemplateAreas: {},\n gridArea: {},\n // positions\n position: {},\n zIndex: {\n themeKey: 'zIndex'\n },\n top: {},\n right: {},\n bottom: {},\n left: {},\n // shadows\n boxShadow: {\n themeKey: 'shadows'\n },\n // sizing\n width: {\n transform: sizingTransform\n },\n maxWidth: {\n style: maxWidth\n },\n minWidth: {\n transform: sizingTransform\n },\n height: {\n transform: sizingTransform\n },\n maxHeight: {\n transform: sizingTransform\n },\n minHeight: {\n transform: sizingTransform\n },\n boxSizing: {},\n // typography\n fontFamily: {\n themeKey: 'typography'\n },\n fontSize: {\n themeKey: 'typography'\n },\n fontStyle: {\n themeKey: 'typography'\n },\n fontWeight: {\n themeKey: 'typography'\n },\n letterSpacing: {},\n textTransform: {},\n lineHeight: {},\n textAlign: {},\n typography: {\n cssProperty: false,\n themeKey: 'typography'\n }\n};\nexport default defaultSxConfig;","import { unstable_capitalize as capitalize } from '@mui/utils';\nimport merge from '../merge';\nimport { getPath, getStyleValue as getValue } from '../style';\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from '../breakpoints';\nimport defaultSxConfig from './defaultSxConfig';\nfunction objectsHaveSameKeys(...objects) {\n const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n const union = new Set(allKeys);\n return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n function getThemeValue(prop, val, theme, config) {\n const props = {\n [prop]: val,\n theme\n };\n const options = config[prop];\n if (!options) {\n return {\n [prop]: val\n };\n }\n const {\n cssProperty = prop,\n themeKey,\n transform,\n style\n } = options;\n if (val == null) {\n return null;\n }\n\n // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n if (themeKey === 'typography' && val === 'inherit') {\n return {\n [prop]: val\n };\n }\n const themeMapping = getPath(theme, themeKey) || {};\n if (style) {\n return style(props);\n }\n const styleFromPropValue = propValueFinal => {\n let value = getValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, val, styleFromPropValue);\n }\n function styleFunctionSx(props) {\n var _theme$unstable_sxCon;\n const {\n sx,\n theme = {}\n } = props || {};\n if (!sx) {\n return null; // Emotion & styled-components will neglect null\n }\n\n const config = (_theme$unstable_sxCon = theme.unstable_sxConfig) != null ? _theme$unstable_sxCon : defaultSxConfig;\n\n /*\n * Receive `sxInput` as object or callback\n * and then recursively check keys & values to create media query object styles.\n * (the result will be used in `styled`)\n */\n function traverse(sxInput) {\n let sxObject = sxInput;\n if (typeof sxInput === 'function') {\n sxObject = sxInput(theme);\n } else if (typeof sxInput !== 'object') {\n // value\n return sxInput;\n }\n if (!sxObject) {\n return null;\n }\n const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n const breakpointsKeys = Object.keys(emptyBreakpoints);\n let css = emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey => {\n const value = callIfFn(sxObject[styleKey], theme);\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n if (config[styleKey]) {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n } else {\n const breakpointsValues = handleBreakpoints({\n theme\n }, value, x => ({\n [styleKey]: x\n }));\n if (objectsHaveSameKeys(breakpointsValues, value)) {\n css[styleKey] = styleFunctionSx({\n sx: value,\n theme\n });\n } else {\n css = merge(css, breakpointsValues);\n }\n }\n } else {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n }\n }\n });\n return removeUnusedBreakpoints(breakpointsKeys, css);\n }\n return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n }\n return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from '@mui/styled-engine';\nfunction isObjectEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n const contextTheme = React.useContext(ThemeContext);\n return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nexport default useTheme;","'use client';\n\nimport createTheme from './createTheme';\nimport useThemeWithoutDefault from './useThemeWithoutDefault';\nexport const systemDefaultTheme = createTheme();\nfunction useTheme(defaultTheme = systemDefaultTheme) {\n return useThemeWithoutDefault(defaultTheme);\n}\nexport default useTheme;","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n let generate = defaultGenerator;\n return {\n configure(generator) {\n generate = generator;\n },\n generate(componentName) {\n return generate(componentName);\n },\n reset() {\n generate = defaultGenerator;\n }\n };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","import _formatMuiErrorMessage from \"../formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n if (typeof string !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: \\`capitalize(string)\\` expects a string argument.` : _formatMuiErrorMessage(7));\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}","export default function composeClasses(slots, getUtilityClass, classes = undefined) {\n const output = {};\n Object.keys(slots).forEach(\n // `Object.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n slot => {\n output[slot] = slots[slot].reduce((acc, key) => {\n if (key) {\n const utilityClass = getUtilityClass(key);\n if (utilityClass !== '') {\n acc.push(utilityClass);\n }\n if (classes && classes[key]) {\n acc.push(classes[key]);\n }\n }\n return acc;\n }, []).join(' ');\n });\n return output;\n}","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n return funcs.reduce((acc, func) => {\n if (func == null) {\n return acc;\n }\n return function chainedFunction(...args) {\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, () => {});\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport function isPlainObject(item) {\n return item !== null && typeof item === 'object' && item.constructor === Object;\n}\nfunction deepClone(source) {\n if (!isPlainObject(source)) {\n return source;\n }\n const output = {};\n Object.keys(source).forEach(key => {\n output[key] = deepClone(source[key]);\n });\n return output;\n}\nexport default function deepmerge(target, source, options = {\n clone: true\n}) {\n const output = options.clone ? _extends({}, target) : target;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n // Avoid prototype pollution\n if (key === '__proto__') {\n return;\n }\n if (isPlainObject(source[key]) && key in target && isPlainObject(target[key])) {\n // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n output[key] = deepmerge(target[key], source[key], options);\n } else if (options.clone) {\n output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}","/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@mui/utils/macros/MuiError.macro` instead.\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code) {\n // Apply babel-plugin-transform-template-literals in loose mode\n // loose mode is safe iff we're concatenating primitives\n // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n /* eslint-disable prefer-template */\n let url = 'https://mui.com/production-error/?code=' + code;\n for (let i = 1; i < arguments.length; i += 1) {\n // rest params over-transpile for this case\n // eslint-disable-next-line prefer-rest-params\n url += '&args[]=' + encodeURIComponent(arguments[i]);\n }\n return 'Minified MUI error #' + code + '; visit ' + url + ' for the full message.';\n /* eslint-enable prefer-template */\n}","import ClassNameGenerator from '../ClassNameGenerator';\n\n// If GlobalStateSlot is changed, GLOBAL_STATE_CLASSES in\n// \\packages\\api-docs-builder\\utils\\parseSlotsAndClasses.ts must be updated accordingly.\nconst globalStateClassesMapping = {\n active: 'active',\n checked: 'checked',\n completed: 'completed',\n disabled: 'disabled',\n error: 'error',\n expanded: 'expanded',\n focused: 'focused',\n focusVisible: 'focusVisible',\n open: 'open',\n readOnly: 'readOnly',\n required: 'required',\n selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n const globalStateClass = globalStateClassesMapping[slot];\n return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}","import generateUtilityClass from '../generateUtilityClass';\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","export default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ownerDocument from '../ownerDocument';\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param {object} defaultProps\n * @param {object} props\n * @returns {object} resolved props\n */\nexport default function resolveProps(defaultProps, props) {\n const output = _extends({}, props);\n Object.keys(defaultProps).forEach(propName => {\n if (propName.toString().match(/^(components|slots)$/)) {\n output[propName] = _extends({}, defaultProps[propName], output[propName]);\n } else if (propName.toString().match(/^(componentsProps|slotProps)$/)) {\n const defaultSlotProps = defaultProps[propName] || {};\n const slotProps = props[propName];\n output[propName] = {};\n if (!slotProps || !Object.keys(slotProps)) {\n // Reduce the iteration if the slot props is empty\n output[propName] = defaultSlotProps;\n } else if (!defaultSlotProps || !Object.keys(defaultSlotProps)) {\n // Reduce the iteration if the default slot props is empty\n output[propName] = slotProps;\n } else {\n output[propName] = _extends({}, slotProps);\n Object.keys(defaultSlotProps).forEach(slotPropName => {\n output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName]);\n });\n }\n } else if (output[propName] === undefined) {\n output[propName] = defaultProps[propName];\n }\n });\n return output;\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect';\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useCallback((...args) =>\n // @ts-expect-error hide `this`\n // tslint:disable-next-line:ban-comma-operator\n (0, ref.current)(...args), []);\n}\nexport default useEventCallback;","'use client';\n\nimport * as React from 'react';\nimport setRef from '../setRef';\nexport default function useForkRef(...refs) {\n /**\n * This will create a new function if the refs passed to this hook change and are all defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior.\n */\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return instance => {\n refs.forEach(ref => {\n setRef(ref, instance);\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useState, useCallback } from 'react';\n\nvar _excluded = [\"defaultInputValue\", \"defaultMenuIsOpen\", \"defaultValue\", \"inputValue\", \"menuIsOpen\", \"onChange\", \"onInputChange\", \"onMenuClose\", \"onMenuOpen\", \"value\"];\nfunction useStateManager(_ref) {\n var _ref$defaultInputValu = _ref.defaultInputValue,\n defaultInputValue = _ref$defaultInputValu === void 0 ? '' : _ref$defaultInputValu,\n _ref$defaultMenuIsOpe = _ref.defaultMenuIsOpen,\n defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe,\n _ref$defaultValue = _ref.defaultValue,\n defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue,\n propsInputValue = _ref.inputValue,\n propsMenuIsOpen = _ref.menuIsOpen,\n propsOnChange = _ref.onChange,\n propsOnInputChange = _ref.onInputChange,\n propsOnMenuClose = _ref.onMenuClose,\n propsOnMenuOpen = _ref.onMenuOpen,\n propsValue = _ref.value,\n restSelectProps = _objectWithoutProperties(_ref, _excluded);\n var _useState = useState(propsInputValue !== undefined ? propsInputValue : defaultInputValue),\n _useState2 = _slicedToArray(_useState, 2),\n stateInputValue = _useState2[0],\n setStateInputValue = _useState2[1];\n var _useState3 = useState(propsMenuIsOpen !== undefined ? propsMenuIsOpen : defaultMenuIsOpen),\n _useState4 = _slicedToArray(_useState3, 2),\n stateMenuIsOpen = _useState4[0],\n setStateMenuIsOpen = _useState4[1];\n var _useState5 = useState(propsValue !== undefined ? propsValue : defaultValue),\n _useState6 = _slicedToArray(_useState5, 2),\n stateValue = _useState6[0],\n setStateValue = _useState6[1];\n var onChange = useCallback(function (value, actionMeta) {\n if (typeof propsOnChange === 'function') {\n propsOnChange(value, actionMeta);\n }\n setStateValue(value);\n }, [propsOnChange]);\n var onInputChange = useCallback(function (value, actionMeta) {\n var newValue;\n if (typeof propsOnInputChange === 'function') {\n newValue = propsOnInputChange(value, actionMeta);\n }\n setStateInputValue(newValue !== undefined ? newValue : value);\n }, [propsOnInputChange]);\n var onMenuOpen = useCallback(function () {\n if (typeof propsOnMenuOpen === 'function') {\n propsOnMenuOpen();\n }\n setStateMenuIsOpen(true);\n }, [propsOnMenuOpen]);\n var onMenuClose = useCallback(function () {\n if (typeof propsOnMenuClose === 'function') {\n propsOnMenuClose();\n }\n setStateMenuIsOpen(false);\n }, [propsOnMenuClose]);\n var inputValue = propsInputValue !== undefined ? propsInputValue : stateInputValue;\n var menuIsOpen = propsMenuIsOpen !== undefined ? propsMenuIsOpen : stateMenuIsOpen;\n var value = propsValue !== undefined ? propsValue : stateValue;\n return _objectSpread(_objectSpread({}, restSelectProps), {}, {\n inputValue: inputValue,\n menuIsOpen: menuIsOpen,\n onChange: onChange,\n onInputChange: onInputChange,\n onMenuClose: onMenuClose,\n onMenuOpen: onMenuOpen,\n value: value\n });\n}\n\nexport { useStateManager as u };\n","const sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","function getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null ? void 0 : (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n // Browsers without `ShadowRoot` support.\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n const webkit = isWebKit();\n const css = getComputedStyle(element);\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = getParentNode(currentNode);\n }\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isWebKit };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentIFrame = win.frameElement;\n while (currentIFrame && offsetParent && offsetWin !== win) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentIFrame = getWindow(currentIFrame).frameElement;\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n if (offsetParent === documentElement) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n ...clippingAncestor,\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n return getCssDimensions(element);\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const window = getWindow(element);\n if (!isHTMLElement(element)) {\n return window;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n return offsetParent || getContainingBlock(element) || window;\n}\n\nconst getElementRects = async function (_ref) {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n return {\n reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n floating: {\n x: 0,\n y: 0,\n ...(await getDimensionsFn(floating))\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n clearTimeout(timeoutId);\n io && io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const {\n left,\n top,\n width,\n height\n } = element.getBoundingClientRect();\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 100);\n } else {\n refresh(false, ratio);\n }\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle