construct-hub 0.2.1 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/.jsii +2 -2
  2. package/lib/backend/transliterator/transliterator.bundle/Dockerfile +7 -3
  3. package/lib/backend/transliterator/transliterator.bundle/index.js +495 -238
  4. package/lib/construct-hub.js +1 -1
  5. package/lib/package-sources/code-artifact.js +1 -1
  6. package/lib/package-sources/npmjs.js +1 -1
  7. package/lib/spdx-license.js +1 -1
  8. package/package.json +9 -9
  9. package/website/asset-manifest.json +38 -34
  10. package/website/assets/aws-cdk.png +0 -0
  11. package/website/assets/kubernetes.png +0 -0
  12. package/website/assets/terraform.png +0 -0
  13. package/website/index.html +1 -1
  14. package/website/service-worker.js +1 -1
  15. package/website/service-worker.js.map +1 -1
  16. package/website/static/js/{0.ff9d42f8.chunk.js → 0.074504b3.chunk.js} +2 -2
  17. package/website/static/js/{0.ff9d42f8.chunk.js.map → 0.074504b3.chunk.js.map} +1 -1
  18. package/website/static/js/1.272635ed.chunk.js +2 -0
  19. package/website/static/js/{1.bd0a2241.chunk.js.map → 1.272635ed.chunk.js.map} +1 -1
  20. package/website/static/js/10.d664efc4.chunk.js +2 -0
  21. package/website/static/js/10.d664efc4.chunk.js.map +1 -0
  22. package/website/static/js/11.6f7f0c4b.chunk.js +2 -0
  23. package/website/static/js/{10.32615aa0.chunk.js.map → 11.6f7f0c4b.chunk.js.map} +1 -1
  24. package/website/static/js/12.c21a676e.chunk.js +2 -0
  25. package/website/static/js/12.c21a676e.chunk.js.map +1 -0
  26. package/website/static/js/{11.051d89fc.chunk.js → 13.8635b63a.chunk.js} +2 -2
  27. package/website/static/js/{11.051d89fc.chunk.js.map → 13.8635b63a.chunk.js.map} +1 -1
  28. package/website/static/js/{12.e96b82dd.chunk.js → 14.86414212.chunk.js} +3 -3
  29. package/website/static/js/{12.e96b82dd.chunk.js.LICENSE.txt → 14.86414212.chunk.js.LICENSE.txt} +0 -0
  30. package/website/static/js/{12.e96b82dd.chunk.js.map → 14.86414212.chunk.js.map} +1 -1
  31. package/website/static/js/{13.fb054c47.chunk.js → 15.78ca2283.chunk.js} +2 -2
  32. package/website/static/js/{13.fb054c47.chunk.js.map → 15.78ca2283.chunk.js.map} +1 -1
  33. package/website/static/js/4.53a8d553.chunk.js +3 -0
  34. package/website/static/js/{4.7cd92fab.chunk.js.LICENSE.txt → 4.53a8d553.chunk.js.LICENSE.txt} +0 -0
  35. package/website/static/js/4.53a8d553.chunk.js.map +1 -0
  36. package/website/static/js/5.5d827820.chunk.js +3 -0
  37. package/website/static/js/{5.0da0a8ef.chunk.js.LICENSE.txt → 5.5d827820.chunk.js.LICENSE.txt} +0 -0
  38. package/website/static/js/{5.0da0a8ef.chunk.js.map → 5.5d827820.chunk.js.map} +1 -1
  39. package/website/static/js/6.f37a117e.chunk.js +2 -0
  40. package/website/static/js/{6.c0e3f99c.chunk.js.map → 6.f37a117e.chunk.js.map} +1 -1
  41. package/website/static/js/{7.11632168.chunk.js → 7.a4739ebc.chunk.js} +2 -2
  42. package/website/static/js/{7.11632168.chunk.js.map → 7.a4739ebc.chunk.js.map} +1 -1
  43. package/website/static/js/{8.8af79a83.chunk.js → 8.b0c4d0d8.chunk.js} +2 -2
  44. package/website/static/js/{8.8af79a83.chunk.js.map → 8.b0c4d0d8.chunk.js.map} +1 -1
  45. package/website/static/js/9.dcbf33c2.chunk.js +2 -0
  46. package/website/static/js/9.dcbf33c2.chunk.js.map +1 -0
  47. package/website/static/js/main.e289a3fc.chunk.js +2 -0
  48. package/website/static/js/main.e289a3fc.chunk.js.map +1 -0
  49. package/website/static/js/runtime-main.fa5c7ad1.js +2 -0
  50. package/website/static/js/runtime-main.fa5c7ad1.js.map +1 -0
  51. package/website/static/js/1.bd0a2241.chunk.js +0 -2
  52. package/website/static/js/10.32615aa0.chunk.js +0 -2
  53. package/website/static/js/4.7cd92fab.chunk.js +0 -3
  54. package/website/static/js/4.7cd92fab.chunk.js.map +0 -1
  55. package/website/static/js/5.0da0a8ef.chunk.js +0 -3
  56. package/website/static/js/6.c0e3f99c.chunk.js +0 -2
  57. package/website/static/js/9.2b21526e.chunk.js +0 -2
  58. package/website/static/js/9.2b21526e.chunk.js.map +0 -1
  59. package/website/static/js/main.f1390607.chunk.js +0 -2
  60. package/website/static/js/main.f1390607.chunk.js.map +0 -1
  61. package/website/static/js/runtime-main.2f83ac68.js +0 -2
  62. package/website/static/js/runtime-main.2f83ac68.js.map +0 -1
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[6],{228:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(0),c=n(239),r={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},o=n(109),i=n(1),s=function(e){var t=e.children,n=e.meta,s=e.pageName,l=Object(o.b)(r[s]);Object(a.useEffect)((function(){l()}),[l]);var u=n.suffix,d=void 0===u||u,b=n.title,j=n.description,h=d?"".concat(b," - Construct Hub"):b;return Object(i.jsxs)(i.Fragment,{children:[Object(i.jsxs)(c.a,{children:[!1,Object(i.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(i.jsx)("meta",{charSet:"utf-8"}),Object(i.jsx)("title",{children:h}),Object(i.jsx)("meta",{content:h,property:"og:title"}),Object(i.jsx)("meta",{content:h,name:"twitter:title"}),Object(i.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(i.jsx)("meta",{content:j,name:"description"}),Object(i.jsx)("meta",{content:j,property:"og:description"}),Object(i.jsx)("meta",{content:j,name:"twitter:description"})]}),t]})}},251:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(6),c=n(22),r=n(21),o=n(184),i=n(337),s=n(1),l=["sources"],u=Object(r.a)((function(e,t){var n=e.sources,r=Object(c.a)(e,l);return Object(s.jsxs)(o.a,{as:"picture",children:[null===n||void 0===n?void 0:n.map((function(e,t){return Object(s.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(s.jsx)(i.a,Object(a.a)({ref:t},r))]})}));u.displayName="Picture"},252:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(215),c=n(54),r=n(1),o=function(e){var t=e.children,n=e.language;return c.e.has(n)?Object(r.jsx)(r.Fragment,{children:t}):Object(r.jsx)(a.a,{hasArrow:!0,label:"Documentation support for ".concat(c.b[n]," is coming soon!"),placement:"top-start",children:Object(r.jsx)("span",{children:t})})}},253:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(6),c=n(22),r=n(568),o=n(108),i=n(80),s=n(1),l=["children","language","value","label","zIndex"],u=function(e){var t=e.children,n=e.language,u=e.value,d=e.label,b=void 0===d?u:d,j=e.zIndex,h=Object(c.a)(e,l);return Object(s.jsx)(i.a,{"aria-label":"Tag: ".concat(b),to:Object(o.c)({query:"".concat(u),language:n}),zIndex:j,children:Object(s.jsx)(r.a,Object(a.a)(Object(a.a)({_hover:{textDecoration:"underline"}},h),{},{children:Object(s.jsx)(r.b,{children:t})}))})}},254:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(6),c=n(22),r=n(21),o=n(184),i=n(582),s=n(1),l=["date","format"],u=Object(r.a)((function(e,t){var n=e.date,r=e.format,u=Object(c.a)(e,l);return Object(s.jsx)(o.a,Object(a.a)(Object(a.a)({as:"time",dateTime:n.toISOString(),ref:t},u),{},{children:Object(i.a)(n,r)}))}));u.displayName="Time"},286:function(e,t,n){"use strict";n.r(t),n.d(t,"NotFound",(function(){return d})),n.d(t,"default",(function(){return d}));var a=n(209),c=n(199),r=n(145),o=n(29),i=n(228),s=n(251),l=n(1),u={optimal:[{media:"(max-width:1024px)",srcSet:"/assets/404-hive@50.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.png"}],fallback:"/assets/404-hive@50.png"},d=function(){return Object(l.jsx)(i.a,{meta:{title:"Not Found",description:"Oops! The page you were looking for does not exist"},pageName:"notFound",children:Object(l.jsxs)(a.a,{h:"100%",position:"relative",w:"100%",children:[Object(l.jsx)(s.a,{alt:"",inset:0,position:"absolute",sources:u.optimal,src:u.fallback,zIndex:"hide"}),Object(l.jsxs)(c.a,{align:"center",direction:"column",justify:"center",children:[Object(l.jsx)(s.a,{alt:"404 Image",sources:[{srcSet:"/assets/robot.webp"}],src:"/assets/robot.png"}),Object(l.jsx)(r.a,{as:o.b,colorScheme:"blue",to:"/",children:"Take Me Home"})]})]})})}},288:function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return T}));var a,c=n(4),r=n(184),o=n(348),i=n.n(o),s=n(444),l=n.n(s),u=n(477),d=n.n(u),b=n(565),j=n(524),h=n.n(j),f=n(563),O=n(567),p=n(336),m=n(559),x=n(560),g=n(561),v=n(562),y=n(1),w={a:v.a,blockquote:v.b,caption:g.b,code:f.a,em:v.c,h1:O.a,h2:O.a,h3:O.a,h4:O.a,h5:O.a,h6:O.a,hr:p.a,img:m.a,li:x.a,ol:x.b,p:v.d,pre:v.e,sup:v.f,table:g.a,tbody:g.c,td:g.d,tfoot:g.e,th:g.f,thead:g.g,tr:g.h,ul:x.c},k=n(327);k.attributes.span=(null!==(a=k.attributes.span)&&void 0!==a?a:[]).concat(["dataHeadingTitle","dataHeadingId"]);var S=[[l.a],[d.a,k]],C=[h.a,b.a],L=/^(?:(?:git@)?github\.com:|(?:https?:\/\/)github\.com\/)([^/]+)\/([^/]+)(?:\.git)?$/,T=function(t){var n=t.children,a=function(e){var t=e.type,n=e.url;if("git"===t){var a=L.exec(n);if(null!=a){var r=Object(c.a)(a,3);return{owner:r[1],repo:r[2]}}}}(t.repository),o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"HEAD";return null==a?i.a.uriTransformer:function(n){var r=i.a.uriTransformer(n),o=Object(c.a)(r,1)[0];if("#"===o||"/"===o)return r;if(r.includes("://"))return r;var s=a.owner,l=a.repo.replace(/\.git$/,"");return"https://".concat(e,"/").concat(s,"/").concat(l,"/").concat(t,"/").concat(r)}};return e.byteLength(n)>1048576&&(n=[n=n.substring(0,n.lastIndexOf("# API Reference")),"# API Reference","The API Reference for this package could not be rendered.","If this issue persists, please let us know by creating an [issue](https://github.com/cdklabs/construct-hub-webapp/issues/new)"].join("\n")),Object(y.jsx)(r.a,{px:8,sx:{"& > *":{mb:8},"& > p":{lineHeight:"taller"}},children:Object(y.jsx)(i.a,{components:w,rehypePlugins:S,remarkPlugins:C,transformImageUri:o("raw.githubusercontent.com"),transformLinkUri:o("github.com","blob/HEAD"),children:n})})}}).call(this,n(344).Buffer)},336:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(6),c=n(201),r=n(1),o=function(e){return Object(r.jsx)(c.a,Object(a.a)({my:10},e))}},559:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(6),c=n(337),r=n(1),o=function(e){return Object(r.jsx)(c.a,Object(a.a)({display:"inline-block"},e))}},560:function(e,t,n){"use strict";n.d(t,"c",(function(){return r})),n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return i}));var a=n(207),c=n(1),r=function(e){var t=e.children;return Object(c.jsx)(a.c,{children:t})},o=function(e){var t=e.children;return Object(c.jsx)(a.b,{children:t})},i=function(e){var t=e.children;return Object(c.jsx)(a.a,{lineHeight:"tall",mb:2,sx:{"em:first-of-type":{mr:2,fontStyle:"italic",fontSize:"small"},"&::marker":{color:"blue.500"},code:{fontSize:"small"}},children:t})}},561:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(184),c=n(238);n.d(t,"e",(function(){return c.e})),n.d(t,"c",(function(){return c.c})),n.d(t,"d",(function(){return c.d})),n.d(t,"g",(function(){return c.g})),n.d(t,"h",(function(){return c.h})),n.d(t,"f",(function(){return c.f})),n.d(t,"b",(function(){return c.b}));var r=n(1),o=function(e){var t=e.children;return Object(r.jsx)(a.a,{maxW:"100%",overflowX:"auto",children:Object(r.jsx)(c.a,{variant:"striped",children:t})})}},562:function(e,t,n){"use strict";n.d(t,"a",(function(){return b})),n.d(t,"b",(function(){return j})),n.d(t,"c",(function(){return h})),n.d(t,"d",(function(){return f})),n.d(t,"e",(function(){return O})),n.d(t,"f",(function(){return p}));var a=n(4),c=n(6),r=n(22),o=n(194),i=n(184),s=n(189),l=n(55),u=n(1),d=["children","href"],b=function(e){var t=e.children,n=e.href,a=Object(r.a)(e,d),i=o.a;try{if(n&&n.startsWith("http"))if(new URL(n).hostname!==window.location.hostname){i=function(e){return Object(u.jsx)(l.a,Object(c.a)({},e))}}}catch(s){i=o.a}return Object(u.jsx)(i,Object(c.a)(Object(c.a)({color:"blue.500",href:n,sx:{"> img + svg":{display:"none"}}},a),{},{children:t}))},j=function(e){var t=e.children;return Object(u.jsx)(i.a,{as:"blockquote",bg:"gray.100",borderLeft:"5px solid",borderLeftColor:"gray.200",borderRadius:"md",p:2,wordBreak:"break-word",children:t})},h=function(e){var t=e.children;return Object(u.jsx)(i.a,{as:"em",color:"blue.500",fontStyle:"normal",fontWeight:"semibold",children:t})},f=function(e){var t=e.children;return Object(u.jsx)(s.a,{children:t})},O=function(e){var t=e.children;return Object(u.jsx)(i.a,{as:"pre",children:t})},p=function(e){var t=e.children,n=void 0,c="";if(Array.isArray(t)){var r=Object(a.a)(t,1)[0];"string"===typeof r&&(c=r)}return"Required"===c?n="orange.500":"Optional"===c&&(n="green.500"),Object(u.jsx)(i.a,{as:"sup",color:n,ml:2,top:-1,children:t})}},563:function(e,t,n){"use strict";n.d(t,"a",(function(){return y}));var a=n(575),c=n(0),r=n(6),o=n(184),i=n(566),s=n(556),l=n(199),u=n(22),d=n(573),b=n(574),j=n(21),h=n(571),f=n(197),O=n(1),p=["value"],m=Object(j.a)((function(e,t){var n=e.value,a=Object(u.a)(e,p),c=Object(h.a)(n),o=c.hasCopied,i=c.onCopy;return Object(O.jsx)(f.a,Object(r.a)({"aria-label":"Copy Button",h:6,icon:o?Object(O.jsx)(d.a,{color:"green.300"}):Object(O.jsx)(b.a,{}),minW:"auto",onClick:i,ref:t,variant:"ghost",w:6},a))}));m.displayName="CopyButton";var x=function(e){var t=e.code,n=e.tokens,a=e.getLineProps,c=e.getTokenProps;return Object(O.jsxs)(O.Fragment,{children:[Object(O.jsx)(l.a,{align:"center",bg:"rgba(0, 124, 253, 0.15)",justify:"flex-end",px:2,py:1,children:Object(O.jsx)(m,{_hover:{bg:"gray.300"},color:"gray.500",value:t})}),Object(O.jsx)(o.a,{maxW:"100%",overflowX:"auto",p:2,children:Object(O.jsx)(o.a,{w:"max-content",children:n.map((function(e,t){return Object(O.jsx)("div",Object(r.a)(Object(r.a)({},a({line:e,key:t})),{},{children:e.map((function(e,t){return Object(O.jsx)("span",Object(r.a)({},c({token:e,key:t})),t)}))}),t)}))})})]})},g=function(e){var t=e.code,n=e.tokens,a=e.getLineProps,c=e.getTokenProps;return Object(O.jsxs)(l.a,{align:"center",justify:"space-between",p:2,children:[n.map((function(e,t){return Object(O.jsx)("div",Object(r.a)(Object(r.a)({},a({line:e,key:t})),{},{children:e.map((function(e,t){return Object(O.jsx)("span",Object(r.a)({},c({token:e,key:t})),t)}))}),t)})),Object(O.jsx)(o.a,{children:Object(O.jsx)(m,{color:"blue.500",colorScheme:"blue",ml:4,value:t})})]})},v=function(e){var t=e.code,n=e.language;return Object(O.jsx)(i.a,Object(r.a)(Object(r.a)({},i.b),{},{code:t,language:n,theme:s.a,children:function(e){return Object(O.jsx)(o.a,{as:"pre",border:"base",borderRadius:"md",boxShadow:"base",className:e.className,maxW:"100%",overflow:"hidden",style:e.style,w:"min-content",children:e.tokens.length>1?Object(O.jsx)(x,Object(r.a)(Object(r.a)({},e),{},{code:t})):Object(O.jsx)(g,Object(r.a)(Object(r.a)({},e),{},{code:t}))})}}))},y=function(e){var t=e.inline,n=e.children,r=e.language,o=void 0===r?"typescript":r;if(t)return Object(O.jsx)(a.a,{bg:"gray.100",border:"1px solid",borderColor:"gray.100",borderRadius:"md",color:"blue.500",px:2,py:0,children:n});var i=c.Children.toArray(n).reduce((function(e,t){return"string"===typeof t?"".concat(e).concat(t):e}),"").trim();return Object(O.jsx)(v,{code:i,language:o})}},567:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(205),c=n(0),r=n(557),o=n.n(r),i=n(80),s=n(336),l=n(1),u=function(e){var t,n,r=e.level,u=e.children,d=["2xl","xl","lg","md","sm","xs"][r-1],b=[10,10,10,8,8,8][r-1],j="h".concat(r),h=(new DOMParser).parseFromString(o.a.renderToStaticMarkup(u),"text/html").querySelector("span[data-heading-title][data-heading-id]"),f=null!==(t=null===h||void 0===h?void 0:h.dataset.headingTitle)&&void 0!==t?t:c.Children.toArray(u).reduce((function(e,t){return"string"===typeof t?"".concat(e).concat(t):e}),"").trim(),O=null!==(n=null===h||void 0===h?void 0:h.dataset.headingId)&&void 0!==n?n:f.toLowerCase().replace(/[^a-zA-Z0-9 ]/g,"").replace(/ /g,"-"),p=r<4;return Object(l.jsxs)(l.Fragment,{children:[Object(l.jsx)(a.a,{as:j,color:"blue.800",level:r,mb:p?0:r,mt:b,size:d,children:Object(l.jsx)(i.a,{"data-heading-id":O,"data-heading-level":r,"data-heading-title":f,id:O,replace:!0,sx:{"> code":{color:"blue.800",fontSize:"inherit"}},to:"#".concat(O),children:u})}),p&&Object(l.jsx)(s.a,{mb:b,mt:0,sx:{"& + hr":{display:"none"}}})]})}},581:function(e,t,n){"use strict";n.r(t),n.d(t,"Packages",(function(){return et})),n.d(t,"default",(function(){return et}));var a=n(18),c=n(286),r=n(4),o=n(221),i=n(184),s=n(0),l=n(32),u=n.n(l),d=n(49),b=n(13),j=function(e,t){return t?"".concat(t,"/").concat(e):e},h=function(e,t,n){var a="".concat(b.a.PACKAGES_PREFIX,"/"),c=j(e,n),r="/v".concat(t);return"".concat(a).concat(c).concat(r)},f=function(e){var t=e;return(t.startsWith("~")||t.startsWith("^"))&&(t=t.substring(1)),t},O=function(){var e=Object(d.a)(u.a.mark((function e(t,n,a){var c,r;return u.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c="".concat(h(t,n,a)).concat(b.a.ASSEMBLY_SUFFIX),e.next=3,fetch(c);case 3:if((r=e.sent).ok){e.next=6;break}throw new Error("Failed fetching assembly for ".concat(c,": ").concat(r.statusText));case 6:return e.abrupt("return",r.json());case 7:case"end":return e.stop()}}),e)})));return function(t,n,a){return e.apply(this,arguments)}}(),p=function(){var e=Object(d.a)(u.a.mark((function e(t,n,a,c,r){var o,i,s,l,d;return u.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o="/docs-".concat(r?"".concat(r,"-"):"").concat(a,".md"),i="".concat(h(t,n,c)).concat(o),e.next=4,fetch(i);case 4:if((s=e.sent).ok){e.next=7;break}throw new Error("Failed fetching documentation for ".concat(i,": ").concat(s.statusText));case 7:if(l="text/markdown",(d=s.headers.get("Content-Type"))&&d.includes(l)){e.next=11;break}throw new Error("Invalid content type: ".concat(d,". Expected ").concat(l,'"'));case 11:return e.abrupt("return",s.text());case 12:case"end":return e.stop()}}),e)})));return function(t,n,a,c,r){return e.apply(this,arguments)}}(),m=function(){var e=Object(d.a)(u.a.mark((function e(t,n,a){var c,r,o;return u.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(c=n).startsWith("^")&&(c=c.substring(1,c.length)),r="".concat(h(t,n,a)).concat(b.a.METADATA_SUFFIX),e.next=5,fetch(r);case 5:if((o=e.sent).ok){e.next=8;break}throw new Error("Failed fetching metadata for ".concat(r,": ").concat(o.statusText));case 8:return e.abrupt("return",o.json());case 9:case"end":return e.stop()}}),e)})));return function(t,n,a){return e.apply(this,arguments)}}(),x=n(228),g=n(54),v=n(130),y=n(111),w=n(113),k=n(84),S=n(209),C=n(191),L=n(199),T=n(141),I=n(201),R=n(112),F=n(17),A=n(197),P=n(252),E=n(1),z=function(e){var t=e.targetLanguages,n=e.selectedLanguage,a=e.setSelectedLanguage;return Object(E.jsx)(o.a,{align:"center","data-testid":"language-bar",direction:"row",spacing:2,children:Object(F.a)(t).sort((function(e,t){return g.a.indexOf(e)-g.a.indexOf(t)})).map((function(e){var t=!g.e.has(e),c=e===n,r=g.c[e].icon;return Object(E.jsx)(P.a,{language:e,children:Object(E.jsx)(A.a,{"aria-label":"Select ".concat(e," icon"),border:c?"1px solid":"none",borderColor:"blue.500",borderRadius:"lg",boxShadow:"base",colorScheme:"blue",cursor:t?"not-allowed":"pointer","data-testid":"language-".concat(e),disabled:t,icon:Object(E.jsx)(r,{"aria-label":"".concat(e,"-icon"),borderRadius:"sm",height:[4,5,6],width:[4,5,6]}),onClick:function(){c||a(e)},p:1,variant:"outline",w:"max-content"})},e)}))})},M=new Set(g.a),N=function(e){var t,n=e.assembly,a=Object(y.a)({updateSaved:!0,updateUrl:!0}),c=Object(r.a)(a,2),o=c[0],i=c[1],s=[].concat(Object(F.a)(Object.keys(null!==(t=null===n||void 0===n?void 0:n.targets)&&void 0!==t?t:{})),[g.d.TypeScript]);return Object(E.jsx)(z,{selectedLanguage:s.includes(o)?o:s[0],setSelectedLanguage:i,targetLanguages:s.filter((function(e){return M.has(e)}))})},W=n(194),B=n(570),H=n(204),U=n(212),D=n(145),q=n(80),G=function(e){var t=e.dependencies,n=Object.entries(t);return n.length?Object(E.jsxs)(U.a,{children:[Object(E.jsx)(U.b,{as:D.a,color:"blue.500",leftIcon:Object(E.jsx)(B.a,{}),rightIcon:Object(E.jsx)(H.a,{h:6,w:6}),size:"md",variant:"outline",children:"Dependencies"}),Object(E.jsx)(U.f,{children:n.map((function(e){var t=Object(r.a)(e,2),n=t[0],a=t[1];return Object(E.jsx)(U.e,{p:0,children:Object(E.jsx)(q.a,{h:"100%",p:2,to:"/packages/".concat(n,"/v/").concat(f(a)),w:"100%",children:"".concat(n," - ").concat(a)})},"".concat(n,"/").concat(a))}))})]}):null},_=n(207),X=n(189),V=n(55),J=n(6),Y=n(22),$=n(21),K="https://opensource.org/licenses",Q={"Apache-2.0":"".concat(K,"/apache2.0.php"),"BSD-2-Clause":"".concat(K,"/bsd-license.php"),MIT:"".concat(K,"/mit-license.php")},Z=["license"],ee=Object($.a)((function(e,t){var n=e.license,a=Object(Y.a)(e,Z),c=Q[n];return Object(E.jsx)(V.a,Object(J.a)(Object(J.a)({href:c,ref:t},a),{},{children:n}))}));ee.displayName="LicenseLink";var te=n(254),ne=n(108),ae=function(e){var t=e.assembly,n=e.linksConfig,a=e.metadata,c=Object(s.useMemo)((function(){var e;if(!a)return[];var c=a.date,r=a.links,o=null===t||void 0===t?void 0:t.author.name,s=null===t||void 0===t?void 0:t.author.url,l=null===t||void 0===t?void 0:t.repository,u=null===t||void 0===t?void 0:t.license,d=null!==(e=null===r||void 0===r?void 0:r.npm)&&void 0!==e?e:"https://www.npmjs.com/package/".concat(null===t||void 0===t?void 0:t.name,"/v/").concat(null===t||void 0===t?void 0:t.version),b=[];if(c){var j=Object(E.jsx)(te.a,{date:new Date(c),fontWeight:"bold",format:"MMMM dd, yyyy"});b.push(Object(E.jsxs)(E.Fragment,{children:["Published: ",j]}))}if(o){var h=s?Object(E.jsx)(V.a,{href:s,children:o}):Object(E.jsx)(i.a,{as:"strong",fontWeight:"bold",children:o});b.push(Object(E.jsxs)(E.Fragment,{children:["Author: ",h]}))}if((null===n||void 0===n?void 0:n.length)&&n.forEach((function(e){var t,n=e.name,c=e.value,r=e.displayText,o=(null!==(t=null===a||void 0===a?void 0:a.packageLinks)&&void 0!==t?t:{})[c];if(o){var i=Object(E.jsx)(V.a,{href:o,children:null!==r&&void 0!==r?r:o});b.push(Object(E.jsxs)(E.Fragment,{children:[n,": ",i]}))}})),l){var f=Object(ne.b)(l.url);if(f){var O=Object(E.jsx)(V.a,{href:f.url,children:f.hostname});b.push(Object(E.jsxs)(E.Fragment,{children:["Repository: ",O]}))}}if(u&&u in Q){var p=Object(E.jsx)(ee,{license:u});b.push(Object(E.jsxs)(E.Fragment,{children:["License: ",p]}))}if(d){var m=Object(E.jsx)(V.a,{href:d,children:new URL(d).hostname});b.push(Object(E.jsxs)(E.Fragment,{children:["Registry: ",m]}))}return b.slice(0,5).map((function(e,t){return Object(E.jsx)(_.a,{listStyleType:"none",my:1,children:Object(E.jsx)(X.a,{color:"gray.600",children:e})},"detail-".concat(t))}))}),[a,t,n]);return Object(E.jsx)(_.c,{ml:0,children:c})},ce=function(e){var t=e.assembly,n=e.linksConfig,a=e.metadata;return Object(E.jsxs)(L.a,{direction:"column",textAlign:{base:"center",md:"initial"},children:[Object(E.jsx)(W.a,{color:"blue.500",fontSize:"sm",href:"mailto:abuse@amazonaws.com?subject=".concat(encodeURIComponent("ConstructHub - Report of abusive package: ".concat(null===t||void 0===t?void 0:t.name))),m:2,textAlign:{base:"center",md:"right"},children:"Report this Package"}),Object(E.jsx)(ae,{assembly:t,linksConfig:n,metadata:a}),(null===t||void 0===t?void 0:t.dependencies)&&Object(E.jsx)(i.a,{mt:4,children:Object(E.jsx)(G,{dependencies:t.dependencies})})]})},re=n(205),oe=n(253),ie=function(e){var t=e.description,n=e.tags,a=e.title,c=e.version,i=Object(y.a)(),s=Object(r.a)(i,1)[0];return Object(E.jsxs)(L.a,{direction:"column",maxWidth:"100%",overflowX:"hidden",p:2,textAlign:{base:"center",md:"initial"},children:[Object(E.jsxs)(o.a,{align:"center",direction:{base:"column",md:"row"},justify:{base:"center",md:"start"},mb:4,spacing:4,children:[Object(E.jsx)(re.a,{wordBreak:"break-word",children:a}),Object(E.jsx)(X.a,{color:"blue.500",fontSize:"md",children:c})]}),Object(E.jsx)(X.a,{wordBreak:"break-word",children:t}),!!n.length&&Object(E.jsxs)(L.a,{direction:"row",justify:{base:"center",md:"initial"},mt:3,children:[a.startsWith("@aws-cdk/")?Object(E.jsx)(oe.a,{label:"official",language:s,mr:2,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null,n.filter(Boolean).slice(0,3).map((function(e){return Object(E.jsx)(oe.a,{language:s,mr:2,value:e,children:e},e)}))]})]})},se=n(573),le=n(574),ue=n(198),de=n(571),be=n(192),je=n(134),he=n(572),fe=n(583),Oe=n(575),pe=n(57),me={borderRadius:"md",color:"white",variant:"link"},xe={h:4,w:4},ge=Object(pe.a)("code-popover",["close","content","code","copy","header","trigger"]),ve=function(e){var t=e.code,n=e.header,a=e.trigger,c=Object(de.a)(t),o=c.hasCopied,i=c.onCopy,l=Object(be.a)(),u=Object(s.useRef)(null),d=Object(je.b)("breakpoints","md"),b=Object(he.a)("(min-width: ".concat(d,")")),j=Object(r.a)(b,1)[0];return Object(E.jsxs)(fe.a,Object(J.a)(Object(J.a)({initialFocusRef:u,isLazy:!0,placement:j?"bottom-end":"bottom"},l),{},{children:[Object(E.jsx)(fe.e,{children:a}),Object(E.jsxs)(fe.c,{bg:"blue.500","data-testid":ge.content,children:[Object(E.jsxs)(fe.d,{align:"center",as:L.a,color:"white","data-testid":ge.header,justify:"space-between",pr:0,children:[Object(E.jsx)(X.a,{children:n}),Object(E.jsxs)(L.a,{align:"center",children:[Object(E.jsx)(A.a,Object(J.a)({"aria-label":"copy-text-icon","data-testid":ge.copy,icon:o?Object(E.jsx)(se.a,Object(J.a)(Object(J.a)({},xe),{},{color:"green.200"})):Object(E.jsx)(le.a,Object(J.a)({},xe)),onClick:i,ref:u},me)),Object(E.jsx)(A.a,Object(J.a)({"aria-label":"close-icon","data-testid":ge.close,icon:Object(E.jsx)(ue.a,{h:3,w:3}),onClick:l.onClose},me))]})]}),Object(E.jsx)(fe.b,{as:Oe.a,bg:"gray.100",borderTopLeftRadius:"0",borderTopRightRadius:"0",color:"gray.800","data-testid":ge.code,overflow:"auto",variant:"code-block",children:t})]})]}))},ye=Object($.a)((function(e,t){return Object(E.jsx)(D.a,Object(J.a)(Object(J.a)({color:"white",colorScheme:"blue","data-testid":ge.trigger,ref:t,rightIcon:Object(E.jsx)(H.a,{h:5,w:5})},e),{},{children:e.children}))}));ye.displayName="CodePopoverTrigger";var we=function(e){var t=e.assembly,n=Object(y.a)(),a=Object(r.a)(n,1)[0],c=g.b[a],o=function(e){var t=e.language,n=e.assembly,a=n.version;if(t===g.d.TypeScript){var c=n.name;return"npm install ".concat(c,"@").concat(a)}if(t===g.d.Python){var r,o,i=null===(r=n.targets)||void 0===r||null===(o=r.python)||void 0===o?void 0:o.distName;if(!i)return;return"pip install ".concat(i,"==").concat(a)}}({language:a,assembly:t}),i=!o,s=i?"Unsupported":"Install",l=Object(E.jsx)(ye,{disabled:i,children:s});return Object(E.jsx)(ve,{code:null!==o&&void 0!==o?o:"",header:c,trigger:l})},ke=function(e){var t,n,a=e.assembly,c=e.config,r=e.metadata,i=e.version;return!(a.loading||r.loading)&&a.data&&r.data?Object(E.jsxs)(L.a,{as:R.a,direction:"column",children:[Object(E.jsxs)(T.a,{gap:4,overflow:"hidden",templateColumns:{base:"1fr",md:"3fr auto 2fr"},templateRows:"auto",children:[Object(E.jsx)(ie,{description:a.data.description,tags:null!==(t=a.data.keywords)&&void 0!==t?t:[],title:a.data.name,version:i}),Object(E.jsx)(I.a,{display:{base:"none",md:"initial"},orientation:"vertical"}),Object(E.jsx)(I.a,{display:{base:"initial",md:"none"},orientation:"horizontal"}),c.loading?Object(E.jsx)(S.a,{minH:"200px",children:Object(E.jsx)(C.a,{size:"xl"})}):Object(E.jsx)(ce,{assembly:a.data,linksConfig:null===(n=c.data)||void 0===n?void 0:n.packageLinks,metadata:r.data})]}),Object(E.jsxs)(o.a,{align:"center",direction:{base:"column",md:"row"},justify:{base:"center",md:"space-between"},px:2,py:4,spacing:4,children:[Object(E.jsx)(N,{assembly:a.data}),Object(E.jsx)(we,{assembly:a.data})]})]}):Object(E.jsx)(S.a,{minH:"200px",children:Object(E.jsx)(C.a,{size:"xl"})})},Se=n(288),Ce=n(569),Le={color:"gray.900",h:4,w:4},Te=function e(t){var n,c=t.children,r=t.display,o=t.url,l=t.onOpen,u=Object(a.h)(),d=u.pathname,b=u.hash,j=o.startsWith("#"),h=j?b===o:d===o,f=Object(be.a)({onOpen:l,defaultIsOpen:!0}),O=(null!==(n=null===c||void 0===c?void 0:c.length)&&void 0!==n?n:0)>0,p=f.isOpen&&O,m=j?W.a:q.a,x=Object(s.useMemo)((function(){return null===c||void 0===c?void 0:c.map((function(t,n){return Object(s.createElement)(e,Object(J.a)(Object(J.a)({},t),{},{key:n,onOpen:f.onOpen}))}))}),[c,f.onOpen]);return Object(E.jsxs)(L.a,{direction:"column",children:[Object(E.jsxs)(L.a,{align:"center",color:h?"blue.500":"gray.800",children:[O&&Object(E.jsx)(A.a,{"aria-label":"expand-toggle",borderRadius:"md",h:4,icon:f.isOpen?Object(E.jsx)(H.a,Object(J.a)({},Le)):Object(E.jsx)(Ce.a,Object(J.a)({},Le)),ml:-1,onClick:f.onToggle,size:"xs",variant:"link",w:4}),Object(E.jsx)(m,{_hover:{bg:"rgba(0, 124, 253, 0.05)"},href:o,overflow:"hidden",pl:O?1:2,py:1.5,textOverflow:"ellipsis",title:r,to:o,w:"100%",whiteSpace:"nowrap",children:r})]}),Object(E.jsx)(i.a,{_before:{bg:"gray.100",bottom:0,content:'""',left:0,position:"absolute",top:0,w:"1px"},display:p?"initial":"none",ml:2,pl:2,position:"relative",children:x})]})},Ie=function(e){var t=e.items;return Object(E.jsx)(L.a,{direction:"column",maxWidth:"100%",children:t.map((function(e,t){return Object(s.createElement)(Te,Object(J.a)(Object(J.a)({},e),{},{key:t,onOpen:void 0}))}))})},Re=n(578),Fe=n(44),Ae=n(133),Pe=n(208),Ee=n(576),ze=n(577),Me=n(216),Ne=n(85),We=n(132),Be=Object($.a)((function(e,t){var n=e.value,a=e.onChange,c=e.onSubmit,o=Object(s.useState)(n),i=Object(r.a)(o,2),l=i[0],u=i[1];return Object(We.a)(l,{onChange:a}),Object(E.jsx)(Ne.a,{"data-testid":"choose-submodule-search-form",onSubmit:c,children:Object(E.jsxs)(Ee.a,{children:[Object(E.jsx)(ze.a,{children:Object(E.jsx)(Pe.a,{color:"gray.400"})}),Object(E.jsx)(Me.a,{"data-testid":"choose-submodule-search-input",onChange:function(e){return u(e.target.value)},placeholder:"Search",ref:t,value:l,variant:"filled"})]})})}));Be.displayName="SearchInput";var He=function(e){var t=e.inputValue,n=e.isOpen,c=e.onClose,r=e.onInputChange,o=e.submodules,l=Object(s.useRef)(null),u=Object(a.g)().push,d=Object(s.useCallback)((function(e){c(),u(e)}),[c,u]),b=Object(s.useCallback)((function(e){if(e.preventDefault(),o.length){var t=o[0].to;d(t)}}),[d,o]);return Object(E.jsx)(Fe.a,{initialFocusRef:l,isOpen:n,onClose:c,children:Object(E.jsx)(Fe.h,{children:Object(E.jsxs)(Fe.d,{mx:4,children:[Object(E.jsx)(Fe.c,{"data-testid":"choose-submodule-modal-close"}),Object(E.jsx)(Fe.g,{"data-testid":"choose-submodule-modal-header",fontSize:"lg",fontWeight:"bold",children:"Choose a submodule"}),Object(E.jsxs)(Fe.b,{"data-testid":"choose-submodule-modal-body",p:0,children:[Object(E.jsx)(i.a,{pb:4,px:4,children:Object(E.jsx)(Be,{onChange:r,onSubmit:b,ref:l,value:t})}),Object(E.jsx)(I.a,{}),Object(E.jsx)(_.c,{"data-testid":"choose-submodule-modal-results",m:0,maxH:"50vh",overflow:"hidden auto",p:0,role:"listbox",tabIndex:-1,children:o.map((function(e){var t=e.name,n=e.to;return Object(E.jsx)(Ae.a,{"data-testid":"choose-submodule-result",name:t,onClick:function(){return d(n)}},t)}))})]})]})})})},Ue=function(e){var t,n=e.assembly,c=Object(a.h)().pathname,i=Object(a.g)().push,l=Object(w.a)(),u=Object.keys(null!==(t=null===n||void 0===n?void 0:n.submodules)&&void 0!==t?t:{}),d=Object(be.a)(),j=d.isOpen,h=d.onOpen,f=d.onClose,O=l.get(b.b.SUBMODULE),p=O?"Submodule: ".concat(O):"Choose Submodule",m=Object(s.useState)(""),x=Object(r.a)(m,2),g=x[0],v=x[1],y=Object(s.useCallback)((function(e){var t=new URLSearchParams(l.toString());return t.set("submodule",e),"".concat(c,"?").concat(t)}),[c,l]),k=Object(s.useMemo)((function(){var e=u;return g&&(e=e.filter((function(e){return e.toLowerCase().includes(g.toLowerCase())}))),e.map((function(e){var t=e.split(".")[1];return{name:t,to:y(t)}}))}),[u,g,y]);return 0===u.length?null:Object(E.jsxs)(o.a,{spacing:4,w:"100%",children:[O&&Object(E.jsxs)(E.Fragment,{children:[Object(E.jsx)(D.a,{borderRadius:"none","data-testid":"choose-submodule-go-back",leftIcon:Object(E.jsx)(Re.a,{"aria-label":"Back to construct root"}),onClick:function(){var e=l.get(b.b.LANGUAGE);i("".concat(c).concat(e?"?".concat(b.b.LANGUAGE,"=").concat(e):""))},title:"Back to construct root",variant:"link",children:null===n||void 0===n?void 0:n.name}),Object(E.jsx)(I.a,{})]}),Object(E.jsx)(D.a,{borderRadius:"none",color:"blue.500","data-testid":"choose-submodule-search-trigger",flexGrow:1,onClick:h,rightIcon:Object(E.jsx)(H.a,{}),title:"Choose Submodule",variant:"link",children:p}),Object(E.jsx)(He,{inputValue:g,isOpen:j,onClose:f,onInputChange:v,submodules:k})]})},De=function e(t,n){if(!(n instanceof HTMLElement))return t;var a=n.dataset,c=a.headingId,r=a.headingLevel,o=void 0===r?"100":r,i=n.innerText,s=parseInt(o);if(s>3||!i||!c)return t;var l=t[t.length-1];return null==l||l.level>=s?[].concat(Object(F.a)(t),[{display:i,url:"#".concat(c),level:s,children:[]}]):(l.children=e(l.children,n),t)},qe="72px",Ge=function(e){var t,n=e.markdown,c=e.assembly,o=Object(s.useState)([]),l=Object(r.a)(o,2),u=l[0],d=l[1];Object(s.useEffect)((function(){var e=Object(F.a)(document.querySelectorAll("[data-heading-id][data-heading-title][data-heading-level]")).reduce(De,[]);d(e)}),[n]);var b=Object(a.h)().hash;Object(s.useEffect)((function(){if(b){var e=document.querySelector("".concat(b));null===e||void 0===e||e.scrollIntoView(!0)}}),[n]);var j=Object(s.useMemo)((function(){return Object(E.jsx)(Se.a,{repository:c.repository,children:n})}),[c.repository,n]);return Object(E.jsxs)(T.a,{bg:"white",columnGap:4,h:"100%",templateColumns:{base:"1fr",md:"1fr 3fr"},width:"100%",children:[Object(E.jsxs)(L.a,{alignSelf:"stretch",borderRight:"1px solid",borderRightColor:"blue.50",direction:"column",display:{base:"none",md:"flex"},maxHeight:"calc(100vh - ".concat(qe,")"),overflow:"hidden auto",position:"sticky",px:4,top:qe,children:[Object.keys(null!==(t=null===c||void 0===c?void 0:c.submodules)&&void 0!==t?t:{}).length>0&&Object(E.jsx)(L.a,{borderBottom:"1px solid",borderColor:"blue.50",justify:"center",py:4,children:Object(E.jsx)(Ue,{assembly:c})}),Object(E.jsx)(i.a,{overflowY:"auto",py:4,children:Object(E.jsx)(Ie,{items:u})})]}),Object(E.jsx)(i.a,{h:"max-content",maxWidth:"100%",overflow:"hidden",py:4,sx:{a:{scrollMarginTop:qe}},children:j})]})},_e=function(e){var t=e.language,n=Object(E.jsx)(V.a,{href:"https://github.com/cdklabs/construct-hub-webapp/issues/new",children:"issue"});return Object(E.jsxs)(X.a,{align:"center",fontSize:"xl",fontStyle:"oblique",px:4,wordBreak:"break-word",children:["Documentation in ",t," is still not ready for this package. Come back soon. If this issue persists, please let us know by creating an"," ",n,"."]})},Xe=function(e){var t=e.language,n=g.b[t];return Object(E.jsxs)(X.a,{align:"center",fontSize:"xl",fontStyle:"oblique",px:4,wordBreak:"break-word",children:["This package does not currently support ",n,". Select one of the supported languages above, or ask the author to add support for"," ",n," in a future release."]})},Ve=function(){var e,t,n,l,u,d=Object(a.i)(),j=d.name,h=d.scope,f=d.version,S=Object(k.a)(p),C=Object(r.a)(S,2),L=C[0],T=C[1],I=Object(k.a)(O),R=Object(r.a)(I,2),F=R[0],A=R[1],P=Object(k.a)(m),z=Object(r.a)(P,2),M=z[0],N=z[1],W=Object(v.b)(),B=Object(w.a)(),H=Object(y.a)(),U=Object(r.a)(H,1)[0],D=null!==(e=B.get(b.b.SUBMODULE))&&void 0!==e?e:"",q="".concat(h?"".concat(h,"/").concat(j):j," ").concat(f),G=null!==(t=null===A||void 0===A||null===(n=A.data)||void 0===n?void 0:n.description)&&void 0!==t?t:"";if(Object(s.useEffect)((function(){M(j,f,h),F(j,f,h)}),[j,F,M,h,f]),Object(s.useEffect)((function(){L(j,f,U,h,D)}),[j,h,f,U,D,L]),A.error)return Object(E.jsx)(c.NotFound,{});var _=T.error||A.error,X=!T.loading&&!A.loading&&T.data&&A.data,V=U===g.d.TypeScript||A.loading||A.error||null!=(null===(l=A.data)||void 0===l||null===(u=l.targets)||void 0===u?void 0:u[U.toString()]);return Object(E.jsx)(x.a,{meta:{title:q,description:G},pageName:"packageProfile",children:Object(E.jsxs)(o.a,{maxW:"100vw",pt:4,spacing:4,children:[Object(E.jsx)(i.a,{px:4,children:Object(E.jsx)(ke,{assembly:A,config:W,metadata:N,version:f})}),V?_?Object(E.jsx)(_e,{language:U}):X&&Object(E.jsx)(Ge,{assembly:A.data,markdown:T.data}):Object(E.jsx)(Xe,{language:U})]})})},Je=n(83),Ye=function(e){return f(e).split(".")[0]},$e=function(e,t,n){var a=j(t,n),c=function(e,t){var n=e.packages.filter((function(e){return e.name===t}));if(0===n.length)throw new Error("Package ".concat(t," does not exist in catalog"));return n.length>1?n.sort((function(e,t){var n=Ye(e.version);return Ye(t.version).localeCompare(n)}))[0]:n[0]}(e,a).version,r="/v/".concat(c);return"".concat("/packages/").concat(a).concat(r)},Ke=function(){var e=Object(a.i)(),t=e.name,n=e.scope,c=Object(Je.b)();return c.loading||!c.data?Object(E.jsx)(S.a,{minH:"200px",children:Object(E.jsx)(C.a,{size:"xl"})}):Object(E.jsx)(a.a,{to:$e(c.data,t,n)})},Qe="[^@\\/]+",Ze="@[^\\/]+",et=function(){var e=Object(a.j)().path;return Object(E.jsxs)(a.d,{children:[Object(E.jsx)(a.b,{exact:!0,path:"".concat(e,"/:scope(").concat(Ze,")?/:name(").concat(Qe,")"),children:Object(E.jsx)(Ke,{})}),Object(E.jsx)(a.b,{path:"".concat(e,"/:scope(").concat(Ze,")?/:name(").concat(Qe,")/v/:version"),children:Object(E.jsx)(Ve,{})}),Object(E.jsx)(a.b,{path:"*",children:Object(E.jsx)(c.NotFound,{})})]})}}}]);
2
- //# sourceMappingURL=6.c0e3f99c.chunk.js.map
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[9],{228:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(0),r=n(239),c={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(109),o=n(1),s=function(e){var t=e.children,n=e.meta,s=e.pageName,l=Object(i.b)(c[s]);Object(a.useEffect)((function(){l()}),[l]);var u=n.suffix,d=void 0===u||u,b=n.title,m=n.description,f=d?"".concat(b," - Construct Hub"):b;return Object(o.jsxs)(o.Fragment,{children:[Object(o.jsxs)(r.a,{children:[!1,Object(o.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(o.jsx)("meta",{charSet:"utf-8"}),Object(o.jsx)("title",{children:f}),Object(o.jsx)("meta",{content:f,property:"og:title"}),Object(o.jsx)("meta",{content:f,name:"twitter:title"}),Object(o.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(o.jsx)("meta",{content:m,name:"description"}),Object(o.jsx)("meta",{content:m,property:"og:description"}),Object(o.jsx)("meta",{content:m,name:"twitter:description"})]}),t]})}},251:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(6),r=n(22),c=n(21),i=n(184),o=n(337),s=n(1),l=["sources"],u=Object(c.a)((function(e,t){var n=e.sources,c=Object(r.a)(e,l);return Object(s.jsxs)(i.a,{as:"picture",children:[null===n||void 0===n?void 0:n.map((function(e,t){return Object(s.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(s.jsx)(o.a,Object(a.a)({ref:t},c))]})}));u.displayName="Picture"},286:function(e,t,n){"use strict";n.r(t),n.d(t,"NotFound",(function(){return d})),n.d(t,"default",(function(){return d}));var a=n(209),r=n(199),c=n(145),i=n(29),o=n(228),s=n(251),l=n(1),u={optimal:[{media:"(max-width:1024px)",srcSet:"/assets/404-hive@50.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.png"}],fallback:"/assets/404-hive@50.png"},d=function(){return Object(l.jsx)(o.a,{meta:{title:"Not Found",description:"Oops! The page you were looking for does not exist"},pageName:"notFound",children:Object(l.jsxs)(a.a,{h:"100%",position:"relative",w:"100%",children:[Object(l.jsx)(s.a,{alt:"",inset:0,position:"absolute",sources:u.optimal,src:u.fallback,zIndex:"hide"}),Object(l.jsxs)(r.a,{align:"center",direction:"column",justify:"center",children:[Object(l.jsx)(s.a,{alt:"404 Image",sources:[{srcSet:"/assets/robot.webp"}],src:"/assets/robot.png"}),Object(l.jsx)(c.a,{as:i.b,colorScheme:"blue",to:"/",children:"Take Me Home"})]})]})})}},337:function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var a=n(21),r=n(25),c=n(27),i=n(8),o=n(0),s=n(4),l=n(138);function u(){return u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},u.apply(this,arguments)}function d(e,t){if(null==e)return{};var n,a,r={},c=Object.keys(e);for(a=0;a<c.length;a++)n=c[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}var b=o.forwardRef((function(e,t){var n=e.htmlWidth,a=e.htmlHeight,r=e.alt,c=d(e,["htmlWidth","htmlHeight","alt"]);return o.createElement("img",u({width:n,height:a,ref:t,alt:r},c))})),m=Object(a.a)((function(e,t){var n=e.fallbackSrc,a=e.fallback,i=e.src,m=e.align,f=e.fit,j=e.loading,p=e.ignoreFallback,g=e.crossOrigin,h=d(e,["fallbackSrc","fallback","src","align","fit","loading","ignoreFallback","crossOrigin"]),O=null!=j||p,v=function(e){var t=e.src,n=e.srcSet,a=e.onLoad,r=e.onError,c=e.crossOrigin,i=e.sizes,u=e.ignoreFallback,d=Object(o.useState)("pending"),b=Object(s.a)(d,2),m=b[0],f=b[1];Object(o.useEffect)((function(){f(t?"loading":"pending")}),[t]);var j=Object(o.useRef)(),p=Object(o.useCallback)((function(){if(t){g();var e=new Image;e.src=t,c&&(e.crossOrigin=c),n&&(e.srcset=n),i&&(e.sizes=i),e.onload=function(e){g(),f("loaded"),null==a||a(e)},e.onerror=function(e){g(),f("failed"),null==r||r(e)},j.current=e}}),[t,c,n,i,a,r]),g=function(){j.current&&(j.current.onload=null,j.current.onerror=null,j.current=null)};return Object(l.a)((function(){if(!u)return"loading"===m&&p(),function(){g()}}),[m,p,u]),u?"loaded":m}(u({},e,{ignoreFallback:O})),x=u({ref:t,objectFit:f,objectPosition:m},O?h:Object(c.g)(h,["onError","onLoad"]));return"loaded"!==v?a||o.createElement(r.a.img,u({as:b,className:"chakra-image__placeholder",src:n},x)):o.createElement(r.a.img,u({as:b,src:i,crossOrigin:g,loading:j,className:"chakra-image"},x))}));i.a&&(m.displayName="Image")}}]);
2
- //# sourceMappingURL=9.2b21526e.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","views/NotFound/NotFound.tsx","../../../src/image.tsx","../../../src/use-image.ts"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","Picture","forwardRef","ref","sources","props","as","map","source","idx","media","srcSet","displayName","bgSources","optimal","fallback","NotFound","h","position","w","alt","inset","src","zIndex","align","direction","justify","Link","colorScheme","to","NativeImage","width","height","Image","crossOrigin","shouldIgnore","loading","status","ignoreFallback","useState","setStatus","imageRef","useRef","load","useCallback","flush","img","onLoad","error","onError","sizes","useSafeLayoutEffect","useImage","shared","objectFit","objectPosition","rest","omit","className","fallbackSrc"],"mappings":"0LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,qICvCMe,EAAUC,aACrB,WAAwBC,GAAxB,IAAGC,EAAH,EAAGA,QAAYC,EAAf,wBACE,eAAC,IAAD,CAAKC,GAAG,UAAR,iBACGF,QADH,IACGA,OADH,EACGA,EAASG,KAAI,SAACC,EAAQC,GAAT,OACZ,wBAAkBC,MAAOF,EAAOE,MAAOC,OAAQH,EAAOG,QAAzCF,MAEf,cAAC,IAAD,aAAON,IAAKA,GAASE,UAK3BJ,EAAQW,YAAc,W,yLChBhBC,EAAY,CAChBC,QAAS,CACP,CAAEJ,MAAO,qBAAsBC,OAAQ,4BACvC,CAAED,MAAO,qBAAsBC,OAAQ,6BACvC,CAAED,MAAO,qBAAsBC,OAAQ,6BAEzCI,SAAU,2BAGCC,EAA8B,WACzC,OACE,cAAC/B,EAAA,EAAD,CACEE,KAAM,CACJM,MAAO,YACPC,YAAa,sDAEfN,SAAS,WALX,SAOE,eAAC,IAAD,CAAQ6B,EAAE,OAAOC,SAAS,WAAWC,EAAE,OAAvC,UACE,cAAClB,EAAA,EAAD,CACEmB,IAAI,GACJC,MAAO,EACPH,SAAS,WACTd,QAASS,EAAUC,QACnBQ,IAAKT,EAAUE,SACfQ,OAAO,SAET,eAAC,IAAD,CAAMC,MAAM,SAASC,UAAU,SAASC,QAAQ,SAAhD,UACE,cAACzB,EAAA,EAAD,CACEmB,IAAI,YACJhB,QAAS,CAAC,CAAEO,OAAQ,uBACpBW,IAAI,sBAEN,cAAC,IAAD,CAAQhB,GAAIqB,IAAMC,YAAY,OAAOC,GAAG,IAAxC,oC,mdCfV,IAAMC,EAAc,cAClB,cACE,IAAM,EAAN,EAAM,YAAN,EAAM,WAAyBV,EAA/B,EAA+BA,IAA/B,wCACA,OACE,yBACEW,MADF,EAEEC,OAFF,EAGE7B,IAHF,EAIEiB,IAAKA,GALT,OAyDSa,EAAQ/B,aAA8B,cACjD,IAAM,EAAN,EAAM,cAAN,EAAM,WAAN,EAAM,MAAN,EAAM,QAAN,EAAM,MAAN,EAAM,UAAN,EAAM,eAQJgC,EARF,EAQEA,YARF,+FAgBMC,EAAeC,SAArB,EAEMC,EC1CD,SAAkBhC,GACvB,IAAM,EAAN,EAAM,MAAN,EAAM,SAAN,EAAM,SAAN,EAAM,UAAN,EAAM,cAAN,EAAM,MAOJiC,EAPF,EAOEA,eAGF,EAA4BC,mBAA5B,8BAAM,EAAN,KAAM,EAAN,KAEAhD,qBAAU,WACRiD,EAAUlB,EAAM,UAAhBkB,aACC,CAFHjD,IAIA,IAAMkD,EAAWC,mBAEXC,EAAOC,uBAAY,WACvB,MAEAC,IAEA,IAAMC,EAAM,IAAZ,MAEAA,QAEA,IACEA,iBAGF,IACEA,YAGF,IACEA,WAGFA,SAActE,YACZqE,IACAL,YACAO,eAEFD,UAAeE,YACbH,IACAL,YACAS,eAGFR,eACC,CAACnB,EAAKY,EAAavB,EAAQuC,EAAOH,EAjCrC,IAmCMF,EAAQ,WACRJ,EAAJ,UACEA,sBACAA,uBACAA,iBAuBJ,OAnBAU,aAAoB,WAKlB,MAKA,MAHA,YAAId,GACFM,IAEK,WACLE,OAED,CAACR,EAAQM,EAbZQ,IAmBOb,EAAiB,SAAxB,EDvCec,CAAS,EAAD,MAErBd,eAAgBH,KAGZkB,EAAS,EAAH,CACVlD,MACAmD,UAFU,EAGVC,eAAgB/B,GACZW,EAAeqB,EAAOC,YAAKD,EAAM,CAAC,UAJxC,YAOA,iBAAInB,EAKF,GAGE,gBAAC,IAAD,OACE/B,GADF,EAEEoD,UAFF,4BAGEpC,IAAKqC,GAJT,IAWA,gBAAC,IAAD,OACErD,GADF,EAEEgB,IAFF,EAGEY,YAHF,EAIEE,QAJF,EAKEsB,UAAU,gBANd,OAsBE,EAAJ,IACEzB","file":"static/js/9.2b21526e.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, HTMLChakraProps, forwardRef, Image } from \"@chakra-ui/react\";\n\nexport interface PictureProps extends HTMLChakraProps<\"img\"> {\n alt: string;\n src: string;\n sources?: {\n media?: string;\n srcSet: string;\n }[];\n}\n\nexport const Picture = forwardRef<PictureProps, \"img\">(\n ({ sources, ...props }, ref) => (\n <Box as=\"picture\">\n {sources?.map((source, idx) => (\n <source key={idx} media={source.media} srcSet={source.srcSet} />\n ))}\n <Image ref={ref} {...props} />\n </Box>\n )\n);\n\nPicture.displayName = \"Picture\";\n","import { Button, Center, Flex } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Page } from \"../../components/Page\";\nimport { Picture } from \"../../components/Picture\";\n\nconst bgSources = {\n optimal: [\n { media: \"(max-width:1024px)\", srcSet: \"/assets/404-hive@50.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/404-hive@100.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/404-hive@100.png\" },\n ],\n fallback: \"/assets/404-hive@50.png\",\n};\n\nexport const NotFound: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Not Found\",\n description: \"Oops! The page you were looking for does not exist\",\n }}\n pageName=\"notFound\"\n >\n <Center h=\"100%\" position=\"relative\" w=\"100%\">\n <Picture\n alt=\"\"\n inset={0}\n position=\"absolute\"\n sources={bgSources.optimal}\n src={bgSources.fallback}\n zIndex=\"hide\"\n />\n <Flex align=\"center\" direction=\"column\" justify=\"center\">\n <Picture\n alt=\"404 Image\"\n sources={[{ srcSet: \"/assets/robot.webp\" }]}\n src=\"/assets/robot.png\"\n />\n <Button as={Link} colorScheme=\"blue\" to=\"/\">\n Take Me Home\n </Button>\n </Flex>\n </Center>\n </Page>\n );\n};\n","import {\n chakra,\n PropsOf,\n SystemProps,\n forwardRef,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { omit, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\nimport { useImage, UseImageProps } from \"./use-image\"\n\ninterface NativeImageOptions {\n /**\n * The native HTML `width` attribute to the passed to the `img`\n */\n htmlWidth?: string | number\n /**\n * The native HTML `height` attribute to the passed to the `img`\n */\n htmlHeight?: string | number\n}\n\ninterface NativeImageProps extends PropsOf<\"img\">, NativeImageOptions {}\n\nconst NativeImage = React.forwardRef(\n (props: NativeImageProps, ref: React.Ref<any>) => {\n const { htmlWidth, htmlHeight, alt, ...rest } = props\n return (\n <img\n width={htmlWidth}\n height={htmlHeight}\n ref={ref}\n alt={alt}\n {...rest}\n />\n )\n },\n)\n\ninterface ImageOptions extends NativeImageOptions {\n /**\n * Fallback image `src` to show if image is loading or image fails.\n *\n * Note 🚨: We recommend you use a local image\n */\n fallbackSrc?: string\n /**\n * Fallback element to show if image is loading or image fails.\n * @type React.ReactElement\n */\n fallback?: React.ReactElement\n /**\n * Defines loading strategy\n */\n loading?: \"eager\" | \"lazy\"\n /**\n * How the image to fit within its bounds.\n * It maps to css `object-fit` property.\n * @type SystemProps[\"objectFit\"]\n */\n fit?: SystemProps[\"objectFit\"]\n /**\n * How to align the image within its bounds.\n * It maps to css `object-position` property.\n * @type SystemProps[\"objectPosition\"]\n */\n align?: SystemProps[\"objectPosition\"]\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n}\n\nexport interface ImageProps\n extends UseImageProps,\n Omit<HTMLChakraProps<\"img\">, keyof UseImageProps>,\n ImageOptions {}\n\n/**\n * React component that renders an image with support\n * for fallbacks\n *\n * @see Docs https://chakra-ui.com/image\n */\nexport const Image = forwardRef<ImageProps, \"img\">((props, ref) => {\n const {\n fallbackSrc,\n fallback,\n src,\n align,\n fit,\n loading,\n ignoreFallback,\n crossOrigin,\n ...rest\n } = props\n\n /**\n * Defer to native `img` tag if `loading` prop is passed\n * @see https://github.com/chakra-ui/chakra-ui/issues/1027\n */\n const shouldIgnore = loading != null || ignoreFallback\n\n const status = useImage({\n ...props,\n ignoreFallback: shouldIgnore,\n })\n\n const shared = {\n ref,\n objectFit: fit,\n objectPosition: align,\n ...(shouldIgnore ? rest : omit(rest, [\"onError\", \"onLoad\"])),\n }\n\n if (status !== \"loaded\") {\n /**\n * If user passed a custom fallback component,\n * let's render it here.\n */\n if (fallback) return fallback\n\n return (\n <chakra.img\n as={NativeImage}\n className=\"chakra-image__placeholder\"\n src={fallbackSrc}\n {...shared}\n />\n )\n }\n\n return (\n <chakra.img\n as={NativeImage}\n src={src}\n crossOrigin={crossOrigin}\n loading={loading}\n className=\"chakra-image\"\n {...shared}\n />\n )\n})\n\nexport interface ImgProps extends HTMLChakraProps<\"img\">, NativeImageOptions {}\n\n/**\n * Fallback component for most SSR users who want to use the native `img` with\n * support for chakra props\n */\nexport const Img = forwardRef<ImgProps, \"img\">((props, ref) => (\n <chakra.img ref={ref} as={NativeImage} className=\"chakra-image\" {...props} />\n))\n\nif (__DEV__) {\n Image.displayName = \"Image\"\n}\n","import { useSafeLayoutEffect } from \"@chakra-ui/hooks\"\nimport {\n ImgHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\"\n\nexport interface UseImageProps {\n /**\n * The image `src` attribute\n */\n src?: string\n /**\n * The image `srcset` attribute\n */\n srcSet?: string\n /**\n * The image `sizes` attribute\n */\n sizes?: string\n /**\n * A callback for when the image `src` has been loaded\n */\n onLoad?(event: React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * A callback for when there was an error loading the image `src`\n */\n onError?(error: string | React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n /**\n * The key used to set the crossOrigin on the HTMLImageElement into which the image will be loaded.\n * This tells the browser to request cross-origin access when trying to download the image data.\n */\n crossOrigin?: ImgHTMLAttributes<any>[\"crossOrigin\"]\n}\n\ntype Status = \"loading\" | \"failed\" | \"pending\" | \"loaded\"\n\ntype ImageEvent = React.SyntheticEvent<HTMLImageElement, Event>\n\n/**\n * React hook that loads an image in the browser,\n * and let's us know the `status` so we can show image\n * fallback if it is still `pending`\n *\n * @returns the status of the image loading progress\n *\n * @example\n *\n * ```jsx\n * function App(){\n * const status = useImage({ src: \"image.png\" })\n * return status === \"loaded\" ? <img src=\"image.png\" /> : <Placeholder />\n * }\n * ```\n */\nexport function useImage(props: UseImageProps) {\n const {\n src,\n srcSet,\n onLoad,\n onError,\n crossOrigin,\n sizes,\n ignoreFallback,\n } = props\n\n const [status, setStatus] = useState<Status>(\"pending\")\n\n useEffect(() => {\n setStatus(src ? \"loading\" : \"pending\")\n }, [src])\n\n const imageRef = useRef<HTMLImageElement | null>()\n\n const load = useCallback(() => {\n if (!src) return\n\n flush()\n\n const img = new Image()\n\n img.src = src\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin\n }\n\n if (srcSet) {\n img.srcset = srcSet\n }\n\n if (sizes) {\n img.sizes = sizes\n }\n\n img.onload = (event) => {\n flush()\n setStatus(\"loaded\")\n onLoad?.((event as unknown) as ImageEvent)\n }\n img.onerror = (error) => {\n flush()\n setStatus(\"failed\")\n onError?.(error as any)\n }\n\n imageRef.current = img\n }, [src, crossOrigin, srcSet, sizes, onLoad, onError])\n\n const flush = () => {\n if (imageRef.current) {\n imageRef.current.onload = null\n imageRef.current.onerror = null\n imageRef.current = null\n }\n }\n\n useSafeLayoutEffect(() => {\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's bail out.\n */\n if (ignoreFallback) return undefined\n\n if (status === \"loading\") {\n load()\n }\n return () => {\n flush()\n }\n }, [status, load, ignoreFallback])\n\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's just return 'loaded'\n */\n return ignoreFallback ? \"loaded\" : status\n}\n\nexport type UseImageReturn = ReturnType<typeof useImage>\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[2],{108:function(e,t,n){"use strict";n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return l})),n.d(t,"a",(function(){return u}));var r=n(5),c=n(4),a=n(13),i=new RegExp(/git@github\.com:([a-zA-Z-]+)+\/?([a-zA-Z-]+)*(\.git)?/),o=function(e){try{var t=e,n=e.match(i);if(n){var r=Object(c.a)(n,3),a=r[1],o=r[2];t="https://github.com/".concat(a,"/").concat(o)}return{hostname:new URL(t).hostname,url:t}}catch(s){return}},s=function(e,t){var n=e;if(t){var r=function(e,t){var n=new URLSearchParams(t);return Object.entries(e).filter((function(e){return null!=Object(c.a)(e,2)[1]})).forEach((function(e){var t=Object(c.a)(e,2),r=t[0],a=t[1];n.set(r,"".concat(a))})),n.toString()}(t);r&&(n+="?".concat(r))}return n},l=function(e){var t,n=e.query,c=e.offset,i=e.language;return s(a.c.SEARCH,(t={},Object(r.a)(t,a.b.SEARCH_QUERY,n),Object(r.a)(t,a.b.LANGUAGE,i),Object(r.a)(t,a.b.OFFSET,null!==c&&void 0!==c?c:0),t))},u=function(e){var t,n=e.name,c=e.version,i=e.language,o=e.submodule;return s("".concat(a.c.PACKAGES,"/").concat(n,"/v/").concat(c),(t={},Object(r.a)(t,a.b.SUBMODULE,o),Object(r.a)(t,a.b.LANGUAGE,i),t))}},109:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return l}));var r=n(0),c=n(18),a=n(1),i=Object(r.createContext)({trackPageView:function(){}}),o=function(e){var t=e.children,n=Object(c.h)().pathname,o=Object(r.useRef)(null),s=Object(r.useCallback)((function(e){var t,r,c;o.current!==n&&(null===(t=window)||void 0===t||null===(r=t.AWSMA)||void 0===r||null===(c=r.ready)||void 0===c||c.call(r,(function(){document.dispatchEvent(new CustomEvent(window.AWSMA.TRIGGER_EVENT,{detail:e})),o.current=n})))}),[n]);return Object(a.jsx)(i.Provider,{value:{trackPageView:s},children:t})},s=n(6),l=function(e){var t=Object(r.useContext)(i).trackPageView,n=Object(c.h)().pathname,a=Object(r.useMemo)((function(){return{page:Object(s.a)({pageURL:window.location.href.replace("://localhost:3000","://constructs.local.dev")},e.page),event:{type:"pageview",name:e.event.name,description:e.event.description}}}),[n,e]);return Object(r.useCallback)((function(){return t(a)}),[t,a])}},111:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(4),c=n(0),a=n(18),i=n(54),o=n(13),s=n(113),l=i.d.TypeScript,u="preferred-language",b=function(e){return null!=e&&i.e.has(e)},d=function(e){if(b(e))return e;try{var t,n=null!==(t=localStorage.getItem(u))&&void 0!==t?t:"";if(b(n))return n}catch(r){}return l},j=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.updateUrl,n=e.updateSaved,i=Object(a.h)(),l=i.pathname,j=i.hash,f=Object(a.g)(),h=f.replace,O=Object(s.a)(),p=O.get(o.b.LANGUAGE),g=Object(c.useState)((function(){return d(p)})),m=Object(r.a)(g,2),x=m[0],v=m[1];Object(c.useEffect)((function(){b(p)&&p!==x&&v(p)}),[p]),Object(c.useEffect)((function(){p!==x&&t&&(O.set(o.b.LANGUAGE,x),h({pathname:l,hash:j,search:O.toString()}))}),[x,t]);var y=Object(c.useCallback)((function(e){if(v(e),n)try{localStorage.setItem(u,e)}catch(t){}}),[n]);return Object(c.useMemo)((function(){return[x,y]}),[x,y])}},112:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(6),c=n(21),a=n(184),i=n(1),o=Object(c.a)((function(e,t){return Object(i.jsx)(a.a,Object(r.a)({bg:"white",border:"base",borderRadius:"card",boxShadow:"base",p:2,ref:t},e))}));o.displayName="Card"},113:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0),c=n(18),a=function(){var e=Object(c.h)().search;return Object(r.useMemo)((function(){return new URLSearchParams(e)}),[e])}},116:function(e,t,n){"use strict";n.d(t,"a",(function(){return y})),n.d(t,"b",(function(){return x}));var r=n(6),c=n(22),a=n(141),i=n(85),o=n(4),s=n(21),l=n(216),u=n(145),b=n(54),d=n(204),j=n(212),f=n(189),h=n(1),O=n(57),p=Object(O.a)("catalogSearch",["form","input","languageDropdown","languageDropdownMenu","languageDropdownValue","languageItem","submit"]),g=Object.fromEntries(Object.entries(b.b).filter((function(e){var t=Object(o.a)(e,1)[0];return b.e.has(t)}))),m=function(e){var t=e.placeholder,n=e.items,r=e.onSelect,c=e.selected,a=e.testIds,i=c?n[c]:t,s=Object.entries(n);return Object(h.jsxs)(j.a,{strategy:"fixed",children:[Object(h.jsx)(j.b,{as:u.a,bg:"white",borderColor:"blue.100",boxShadow:"base","data-testid":a.trigger,rightIcon:Object(h.jsx)(d.a,{color:"blue.500"}),variant:"outline",children:Object(h.jsx)(f.a,{"data-testid":a.value,children:i})}),Object(h.jsxs)(j.f,{"data-testid":a.menu,children:[Object(h.jsx)(j.e,{"data-testid":a.item,onClick:function(){return r(null)},children:"Any"}),s.map((function(e){var t=Object(o.a)(e,2),n=t[0],c=t[1];return Object(h.jsx)(j.e,{"data-testid":a.item,onClick:function(){return r(n)},children:c},n)}))]})]})},x=Object(s.a)((function(e,t){var n=e.query,r=e.onQueryChange,c=e.language,a=e.onLanguageChange;return Object(h.jsxs)(h.Fragment,{children:[Object(h.jsx)(l.a,{bg:"white",borderColor:"blue.100",boxShadow:"base","data-testid":p.input,name:"query",onChange:r,placeholder:"Search Constructs...",ref:t,value:n}),Object(h.jsx)(m,{items:g,onSelect:a,placeholder:"Language...",selected:c,testIds:{item:p.languageItem,menu:p.languageDropdownMenu,trigger:p.languageDropdown,value:p.languageDropdownValue}}),Object(h.jsx)(u.a,{boxShadow:"base",colorScheme:"blue","data-testid":p.submit,type:"submit",children:"Search"})]})})),v=["onSubmit"],y=function(e){var t=e.onSubmit,n=Object(c.a)(e,v);return Object(h.jsx)(i.a,{"data-testid":p.form,onSubmit:t,children:Object(h.jsx)(a.a,{autoRows:"1fr",gap:4,templateColumns:{sm:"1fr",md:"3fr 1fr 1fr"},width:"full",children:Object(h.jsx)(x,Object(r.a)({},n))})})}},117:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(17),c=n(0),a=n(54),i=n(83),o=function(e){var t=e.limit,n=e.offset,o=void 0===n?0:n,s=e.query,l=void 0===s?"":s,u=e.language,b=void 0===u?null:u,d=Object(i.b)(),j=d.data,f=d.loading,h=d.error,O=Object(c.useMemo)((function(){if(f||h||!(null===j||void 0===j?void 0:j.packages))return[];var e=j.packages.filter((function(e){if(b&&b!==a.d.TypeScript&&!Object.keys(e.languages).includes(b))return!1;if(l.length){var t=JSON.stringify(e).toLowerCase(),n=l.toLowerCase();if(!t.includes(n))return!1}return!0}));return Object(r.a)(e).sort((function(e,t){var n=new Date(e.metadata.date),r=new Date(t.metadata.date);return n===r?0:n<r?1:-1}))}),[null===j||void 0===j?void 0:j.packages,h,b,f,l]),p=O?Math.floor(O.length/t):0,g=Object(c.useMemo)((function(){var e=(o>p?p:o)*t,n=e+t;return O.slice(e,n)}),[t,o,p,O]);return Object(c.useMemo)((function(){return{loading:f,results:O,error:h,displayable:g,pageLimit:p}}),[g,h,f,p,O])}},118:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(4),c=n(0),a=n(18),i=n(108),o=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=Object(c.useState)(null!==(e=n.defaultQuery)&&void 0!==e?e:""),s=Object(r.a)(o,2),l=s[0],u=s[1],b=Object(c.useState)(null!==(t=n.defaultLanguage)&&void 0!==t?t:null),d=Object(r.a)(b,2),j=d[0],f=d[1],h=Object(a.g)(),O=h.push,p=function(e){e.preventDefault(),u(e.target.value)},g=Object(c.useCallback)((function(){O(Object(i.c)({language:j,query:l}))}),[j,O,l]),m=Object(c.useCallback)((function(e){null===e||void 0===e||e.preventDefault(),g()}),[g]);return Object(c.useMemo)((function(){return{language:j,onLanguageChange:f,onQueryChange:p,onSearch:g,onSubmit:m,query:l,setLanguage:f,setQuery:u}}),[j,g,m,l])}},13:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return c})),n.d(t,"c",(function(){return a}));var r={PACKAGES_PREFIX:"/data",CATALOG_SUFFIX:"/catalog.json",ASSEMBLY_SUFFIX:"/assembly.json",METADATA_SUFFIX:"/metadata.json",CONFIG:"/config.json"},c={LANGUAGE:"lang",OFFSET:"offset",SEARCH_QUERY:"q",SUBMODULE:"submodule"},a={FAQ:"/faq",HOME:"/",PACKAGES:"/packages",SEARCH:"/search",SITE_TERMS:"/terms"}},130:function(e,t,n){"use strict";n.d(t,"a",(function(){return h})),n.d(t,"b",(function(){return f}));var r=n(4),c=n(0),a=n(32),i=n.n(a),o=n(49),s=n(13),l={},u=function(){var e=Object(o.a)(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(s.a.CONFIG);case 2:if((t=e.sent).ok){e.next=6;break}return console.log("Failed to fetch application config, using default values"),e.abrupt("return",l);case 6:return e.abrupt("return",t.json().catch((function(e){return console.error(e),console.log("Invalid config response, using default values"),l})));case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),b=n(84),d=n(1),j=Object(c.createContext)({loading:!1,data:void 0,error:void 0}),f=function(){return Object(c.useContext)(j)},h=function(e){var t=e.children,n=Object(b.a)(u),a=Object(r.a)(n,2),i=a[0],o=a[1];return Object(c.useEffect)((function(){i()}),[i]),Object(d.jsx)(j.Provider,{value:o,children:t})}},132:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(4),c=n(0),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Object(c.useState)(e),a=Object(r.a)(n,2),i=a[0],o=a[1],s=t.delay,l=void 0===s?250:s,u=t.onChange;return Object(c.useEffect)((function(){var t=setTimeout((function(){o(e),null===u||void 0===u||u(e)}),l);return function(){clearTimeout(t)}}),[e,l,u]),i}},133:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var r=n(6),c=n(22),a=n(21),i=n(207),o=n(1),s=["name","onClick"],l=Object(a.a)((function(e,t){var n=e.name,a=e.onClick,l=Object(c.a)(e,s);return Object(o.jsx)(i.a,Object(r.a)(Object(r.a)({alignItems:"center",display:"flex",fontSize:"lg",h:12,lineHeight:"base",listStyleType:"none",onClick:a,onKeyDown:function(e){"Enter"===e.key&&a()},px:4,ref:t,role:"option",sx:{":hover, :focus":{bg:"gray.100"}},tabIndex:0},l),{},{children:n}))}));l.displayName="SearchItem"},158:function(e,t,n){},165:function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"initialize",(function(){return G})),n.d(r,"access",(function(){return L})),n.d(r,"checkForCookieConsent",(function(){return W})),n.d(r,"customizeCookies",(function(){return D})),n.d(r,"getConsentCookie",(function(){return N})),n.d(r,"hasConsent",(function(){return U}));var c,a,i=n(0),o=n.n(i),s=n(77),l=n.n(s),u=n(29),b=(n(158),n(141)),d=n(18),j=n(196),f=n(198),h=n(192),O=n(184),p=n(195),g=n(189),m=n(197),x=n(112),v=n(55),y=n(1),S="showing-dev-preview-banner",w=function(){var e,t=Object(h.a)({defaultIsOpen:JSON.parse(null!==(e=window.sessionStorage.getItem(S))&&void 0!==e?e:"true"),onClose:function(){return window.sessionStorage.setItem(S,"false")}}),n=t.isOpen,r=t.onClose;return Object(y.jsx)(O.a,{h:"max-content",children:Object(y.jsx)(p.a,{in:n,children:Object(y.jsxs)(x.a,{"aria-label":"Preview Banner",bg:"blue.500",border:"none",boxShadow:"none",color:"white",mt:4,mx:4,p:4,position:"relative",role:"alertdialog",children:[Object(y.jsx)(j.a,{h:5,left:4,position:"absolute",top:4,w:5}),Object(y.jsxs)(g.a,{fontSize:"md",mx:8,textAlign:"center",children:["This application is in Dev Preview. Some features may change. If you find any issues, please report them"," ",Object(y.jsx)(v.a,{color:"inherit",hasWarning:!1,href:"https://github.com/cdklabs/construct-hub-webapp/issues",textDecoration:"underline",children:"here"})]}),Object(y.jsx)(m.a,{"aria-label":"Dismiss banner",colorScheme:"white",icon:Object(y.jsx)(f.a,{}),onClick:r,position:"absolute",right:4,size:"xs",top:3,variant:"ghost"})]})})})},C=n(4),k=n(199),E=n(200),A=n(201),I=n(145),T=n(22),M=n(32),z=n.n(M),F=n(49),P=function(){new URLSearchParams(window.location.search).get("sb")},G=function(){var e=Object(F.a)(z.a.mark((function e(){return z.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e,t){window.addEventListener("load",Object(F.a)(z.a.mark((function r(){var a,i,o;return z.a.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,a={domain:window.location.hostname,language:navigator.language,__storeWriter:P()},r.next=4,n.e(12).then(n.t.bind(null,579,7));case 4:i=r.sent,o=i.AWSCShortbread,c=o(a),e(),r.next=13;break;case 10:r.prev=10,r.t0=r.catch(0),t(r.t0);case 13:case"end":return r.stop()}}),r,null,[[0,10]])}))))})));case 1:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),R=function(e){return function(){var t;if(!c)throw new Error("shortbread has not been initialized");return(t=c)[e].apply(t,arguments)}},L=R("access"),W=R("checkForCookieConsent"),D=R("customizeCookies"),N=R("getConsentCookie"),U=R("hasConsent"),H=G,_=Object(T.a)(r,["initialize"]),B=Object(i.createContext)({}),V=function(e){var t=e.children,n=Object(i.useState)(!1),r=Object(C.a)(n,2),c=r[0],a=r[1];return Object(i.useEffect)((function(){var e=!1;return H().then((function(){e||(_.checkForCookieConsent(),a(!0))})).catch((function(t){console.error(t),e||a(!1)})),function(){e=!0,a(!1)}}),[]),Object(y.jsx)(B.Provider,{value:c?_:{},children:t})},q=n(80),J=n(13),K={SERVICE_TERMS:{display:"AWS Service Terms",url:"https://aws.amazon.com/service-terms/",testId:"service-terms"},PRIVACY:{display:"Privacy",url:"https://aws.amazon.com/privacy/",testId:"privacy"},SITE_TERMS:{display:"Site Terms",url:J.c.SITE_TERMS,testId:"site-terms",isExternal:!1},LEGAL:{display:"Legal",url:"https://aws.amazon.com/legal/",testId:"legal"}},Q=n(17),X=n(57),Y=Object(X.a)("footer",["container","links","disclaimer","manageCookies"].concat(Object(Q.a)(Object.values(K).map((function(e){return e.testId}))))),Z=function(){var e=Object(i.useContext)(B).customizeCookies;return Object(y.jsxs)(k.a,{align:"center",as:"footer",bg:"blue.800",color:"white","data-testid":Y.container,direction:"column",justify:"center",py:4,children:[Object(y.jsx)(E.a,{columnGap:6,columns:[1,2,4],"data-testid":Y.links,children:Object.entries(K).map((function(e,t){var n=Object(C.a)(e,2),r=n[0],c=n[1],a=c.display,i=c.isExternal,o=void 0===i||i,s=c.testId,l=c.url;return Object(y.jsxs)(k.a,{align:"center",direction:{base:"column",md:"row"},children:[Object(y.jsx)(O.a,{display:{base:"none",md:0!==t?"initial":"none"},h:5,children:Object(y.jsx)(A.a,{borderColor:"white",mr:6,orientation:"vertical"})}),o?Object(y.jsx)(v.a,{color:"currentcolor","data-testid":Y[s],hasWarning:!1,href:l,lineHeight:10,mx:"auto",children:a}):Object(y.jsx)(q.a,{color:"currentcolor","data-testid":Y[s],lineHeight:10,mx:"auto",to:l,children:a}),Object(y.jsx)(O.a,{display:{base:"none",sm:t<2?"initial":"none",md:"none"},w:"100%",children:Object(y.jsx)(A.a,{borderColor:"white"})})]},r)}))}),Object(y.jsx)(g.a,{"data-testid":Y.disclaimer,fontSize:"xs",mt:4,children:"2021 Amazon Web Services, Inc. All rights reserved."}),Object(y.jsx)(I.a,{color:"white","data-testid":Y.manageCookies,fontSize:"xs",fontWeight:"normal",mt:4,onClick:e,variant:"link",children:"Manage Cookies"})]})},$=n(6),ee=[{display:"FAQ",isNavLink:!0,url:"/faq"},{display:"Construct Hub on GitHub",url:"https://github.com/cdklabs/construct-hub"},{display:"Issues on GitHub",url:"https://github.com/cdklabs/construct-hub/issues"}],te=[{display:"AWS CDK",links:[{display:"Home",url:"https://aws.amazon.com/cdk/"},{display:"Getting Started",url:"https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html"},{display:"Workshop",url:"https://cdkworkshop.com/"},{display:"Best Practices",url:"https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk"}]},{display:"CDK for Terraform",links:[{display:"Getting Started",url:"https://learn.hashicorp.com/tutorials/terraform/cdktf"},{display:"Tutorials",url:"https://learn.hashicorp.com/collections/terraform/cdktf"}]},{display:"CDK for Kubernetes",links:[{display:"Home",url:"https://cdk8s.io"},{display:"Getting Started",url:"https://cdk8s.io/docs/latest/getting-started"},{display:"Documentation",url:"https://cdk8s.io/docs/latest"},{display:"API Reference",url:"https://cdk8s.io/docs/latest/reference/index.html"}]},{display:"Community",links:[{display:"Slack",url:"https://join.slack.com/t/cdk-dev/shared_invite/zt-mso6p56d-qJp7SOTBvMaQuDrx7R2wHg"},{display:"Community Hub",url:"https://cdk.dev"}]}],ne=n(212),re=["children"],ce=function(e){var t=e.children,n=Object(T.a)(e,re);return Object(y.jsx)(ne.a,Object($.a)(Object($.a)({colorScheme:"blue.800",strategy:"fixed"},n),{},{children:t}))},ae=n(21),ie=["items"],oe=function(e){var t=e.display,n=e.isNavLink,r=e.url;return n?Object(y.jsx)(q.a,{color:"blue.500",to:r,children:t}):Object(y.jsx)(v.a,{alignItems:"center",display:"flex",hasWarning:!1,href:r,justifyContent:"space-between",w:"100%",children:t})},se=Object(ae.a)((function(e,t){var n=e.items,r=Object(T.a)(e,ie);return Object(y.jsx)(ne.f,Object($.a)(Object($.a)({},r),{},{ref:t,children:n.map((function(e,t){return"links"in e?Object(y.jsxs)(i.Fragment,{children:[Object(y.jsx)(ne.d,{align:"left",title:e.display,children:e.links.map((function(e,t){return Object(y.jsx)(ne.e,{children:Object(y.jsx)(oe,Object($.a)({},e))},"".concat(e.display,"-").concat(t))}))}),t!==n.length-1&&Object(y.jsx)(ne.c,{})]},"".concat(e.display,"-").concat(t)):Object(y.jsx)(ne.e,{children:Object(y.jsx)(oe,Object($.a)({},e))},"".concat(e.display,"-").concat(t))}))}))})),le=n(204),ue=["children"],be=Object(ae.a)((function(e,t){var n=e.children,r=Object(T.a)(e,ue);return Object(y.jsx)(ne.b,Object($.a)(Object($.a)({as:I.a,color:"blue.800",fontWeight:"500",ref:t,rightIcon:Object(y.jsx)(le.a,{h:6,w:6}),size:"md",variant:"link"},r),{},{children:n}))})),de=Object(X.a)("header",["container","title","gettingStartedTrigger","gettingStartedMenu","resourcesTrigger","resourcesMenu","navOpen","navClose","searchButton","searchIcon","mobileNav"]),je=function(){return Object(y.jsxs)(ce,{children:[Object(y.jsx)(be,{"data-testid":de.gettingStartedTrigger,children:"Getting Started"}),Object(y.jsx)(se,{"data-testid":de.gettingStartedMenu,items:ee})]})},fe=n(206),he=n(219),Oe=n(220),pe=n(44),ge=n(221),me=function(){return Object(y.jsxs)(ce,{children:[Object(y.jsx)(be,{"data-testid":de.resourcesTrigger,children:"Resources"}),Object(y.jsx)(se,{"data-testid":de.resourcesMenu,items:te})]})},xe=n(205),ve=function(){return Object(y.jsx)(xe.a,{as:"h1",color:"blue.800","data-testid":de.title,size:"lg",children:Object(y.jsxs)(u.b,{to:"/",children:[Object(y.jsx)(O.a,{as:"span",color:"blue.500",children:"Construct"})," ","Hub"]})})},ye=function(e){var t=e.isOpen,n=e.onClose;return Object(y.jsx)(he.a,{children:Object(y.jsxs)(Oe.a,{isOpen:t,onClose:n,placement:"left",size:"xs",children:[Object(y.jsx)(pe.h,{}),Object(y.jsxs)(Oe.b,{"data-testid":de.mobileNav,children:[Object(y.jsx)(pe.c,{}),Object(y.jsx)(pe.g,{display:"flex",justifyContent:"center",children:Object(y.jsx)(ve,{})}),Object(y.jsx)(pe.b,{children:Object(y.jsxs)(ge.a,{align:"start",justify:"start",spacing:4,children:[Object(y.jsx)(je,{}),Object(y.jsx)(me,{})]})})]})]})})},Se=function(){var e=Object(h.a)();return Object(y.jsxs)(y.Fragment,{children:[Object(y.jsx)(m.a,{"aria-label":"Navigation Menu",borderRadius:"md","data-testid":de.navOpen,display:{md:"none"},icon:Object(y.jsx)(fe.a,{}),onClick:e.onOpen,variant:"ghost"}),Object(y.jsx)(ye,Object($.a)({},e))]})},we=n(208),Ce=n(207),ke=n(117),Ee=n(118),Ae=n(132),Ie=n(111),Te=n(116),Me=n(85),ze=n(133),Fe=Object(X.a)("searchModal",["container"]),Pe=["onSubmit"],Ge=function(e){var t=e.isOpen,n=e.onClose,r=Object(d.g)().push,c=Object(Ie.a)(),a=Object(C.a)(c,1)[0],o=Object(Ee.a)(),s=o.onSubmit,l=Object(T.a)(o,Pe),u=Object(Ae.a)({query:l.query,language:l.language}),b=u.query,j=u.language,f=Object(ke.a)({limit:5,offset:0,query:b,language:j}).displayable,h=(b||j)&&f.length>0,O=Object(i.useRef)(null);return Object(y.jsx)(he.a,{children:Object(y.jsx)(pe.a,{initialFocusRef:O,isOpen:t,onClose:n,children:Object(y.jsx)(pe.h,{children:Object(y.jsxs)(pe.d,{"data-testid":Fe.container,children:[Object(y.jsx)(pe.c,{}),Object(y.jsx)(pe.g,{children:"Search modules or providers"}),Object(y.jsxs)(pe.b,{children:[Object(y.jsx)(Me.a,{onSubmit:function(e){n(),s(e)},pb:4,children:Object(y.jsx)(ge.a,{spacing:4,children:Object(y.jsx)(Te.b,Object($.a)({ref:O},l))})}),h&&Object(y.jsxs)(y.Fragment,{children:[Object(y.jsx)(A.a,{}),Object(y.jsx)(xe.a,{fontSize:"md",my:4,textAlign:"center",children:"Suggestions"}),Object(y.jsx)(Ce.c,{children:f.map((function(e){return Object(y.jsx)(ze.a,{name:e.name,onClick:function(){return t="".concat(J.c.PACKAGES,"/").concat(e.name,"/v/").concat(e.version,"?").concat(J.b.LANGUAGE,"=").concat(null!==j&&void 0!==j?j:a),n(),void r(t);var t}},e.name)}))})]})]})]})})})})},Re=function(){var e=Object(h.a)(),t=Object(d.h)().pathname;return[J.c.HOME,J.c.SEARCH].some((function(e){return e===t}))?null:Object(y.jsxs)(y.Fragment,{children:[Object(y.jsx)(I.a,{align:"center",color:"gray.600",colorScheme:"gray","data-testid":de.searchButton,display:{base:"none",md:"flex"},fontWeight:"medium",justifyContent:"space-between",m:"0 auto",maxW:"500px",onClick:e.onOpen,rightIcon:Object(y.jsx)(we.a,{color:"gray.600",ml:4}),variant:"outline",w:"100%",children:"Search Constructs..."}),Object(y.jsx)(m.a,{"aria-label":"Search Icon",borderRadius:"md","data-testid":de.searchIcon,display:{base:"initial",md:"none"},icon:Object(y.jsx)(we.a,{color:"gray.600"}),onClick:e.onOpen,variant:"ghost"}),Object(y.jsx)(Ge,Object($.a)({},e))]})},Le=function(e){return Object(y.jsx)(b.b,Object($.a)({align:"center",justify:"center",rowStart:1},e))},We=function(){return Object(y.jsxs)(b.a,{alignItems:"center",as:"header",bg:"white",boxShadow:"base","data-testid":de.container,gap:4,gridTemplateColumns:{base:"1fr 3fr 1fr",md:"minmax(200px, 2fr) minmax(200px, 3fr) 2fr"},gridTemplateRows:"1fr",maxW:"100vw",position:"sticky",px:4,py:4,top:0,w:"100%",zIndex:"sticky",children:[Object(y.jsx)(Le,{colStart:{base:2,md:1},justifySelf:{base:"center",md:"start"},children:Object(y.jsx)(ve,{})}),Object(y.jsx)(Le,{colStart:{base:3,md:2},justifySelf:{base:"end",md:"stretch"},children:Object(y.jsx)(Re,{})}),Object(y.jsxs)(Le,{colStart:{base:1,md:3},justifySelf:{base:"start",md:"end"},children:[Object(y.jsxs)(b.a,{display:{base:"none",md:"grid"},gap:4,gridTemplateColumns:"1fr 1fr",gridTemplateRows:"1fr",placeItems:"center",w:"100%",children:[Object(y.jsx)(O.a,{children:Object(y.jsx)(je,{})}),Object(y.jsx)(O.a,{children:Object(y.jsx)(me,{})})]}),Object(y.jsx)(Se,{})]})]})},De=n(209),Ne=n(191),Ue=function(){return Object(y.jsx)(De.a,{children:Object(y.jsx)(Ne.a,{size:"xl"})})},He=["component"],_e=function(e){var t=e.component,n=Object(T.a)(e,He);return Object(y.jsx)(d.b,Object($.a)(Object($.a)({},n),{},{children:Object(y.jsx)(i.Suspense,{fallback:Object(y.jsx)(Ue,{}),children:Object(y.jsx)(t,{})})}))},Be=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(10)]).then(n.bind(null,585))})),Ve=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(7)]).then(n.bind(null,586))})),qe=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(9)]).then(n.bind(null,286))})),Je=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(4),n.e(6)]).then(n.bind(null,581))})),Ke=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(8)]).then(n.bind(null,584))})),Qe=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(11)]).then(n.bind(null,587))})),Xe=function(){return Object(y.jsxs)(b.a,{as:"main",bg:"bgPrimary",gridTemplateColumns:"1fr",gridTemplateRows:"auto auto 1fr auto",h:"100%",inset:0,maxW:"100vw",overflow:"hidden auto",position:"fixed",children:[Object(y.jsx)(We,{}),Object(y.jsx)(w,{}),Object(y.jsxs)(d.d,{children:[Object(y.jsx)(_e,{component:Be,exact:!0,path:J.c.FAQ}),Object(y.jsx)(_e,{component:Ve,exact:!0,path:J.c.HOME}),Object(y.jsx)(_e,{component:Qe,exact:!0,path:J.c.SITE_TERMS}),Object(y.jsx)(_e,{component:Je,path:J.c.PACKAGES}),Object(y.jsx)(_e,{component:Ke,exact:!0,path:J.c.SEARCH}),Object(y.jsx)(_e,{component:qe,path:"*"})]}),Object(y.jsx)(Z,{})]})},Ye=n(109),Ze=n(83),$e=n(130),et=n(98),tt=n(214),nt=n(210),rt=n(94),ct=rt.theme.components.Code,at=Object($.a)(Object($.a)({},ct),{},{variants:Object($.a)(Object($.a)({},ct.variants),{},{"code-block":Object($.a)(Object($.a)({},ct.variants.subtle),{},{display:"block",whiteSpace:"pre"})})}),it=function(e,t){return function(n){var r="function"===typeof e?e(n):e;return Object($.a)(Object($.a)({},r),{},{container:Object($.a)(Object($.a)({},r.container),t)})}},ot=rt.theme.components.Tag,st=Object($.a)(Object($.a)({},ot),{},{baseStyle:{container:{fontWeight:"normal"}},variants:Object($.a)(Object($.a)({},ot.variants),{},{subtle:it(ot.variants.subtle,{background:"#F2F2F2",color:"blue.800"}),official:it(ot.variants.subtle,{background:"rgba(33, 150, 83, 0.1)",color:"#219653"})})}),lt=Object($.a)(Object($.a)({},rt.theme.components),{},{Code:at,Divider:{defaultProps:{borderColor:"rgba(0, 124, 253, 0.15)"}},Tag:st}),ut={borders:{base:"1px solid rgba(0, 124, 253, 0.15)"},colors:Object($.a)(Object($.a)({},rt.theme.colors),{},{blue:{50:"#dcf3ff",100:"#aed9ff",200:"#7dbeff",300:"#4aa4ff",400:"#1a8aff",500:"#0070e6",600:"#0057b4",700:"#003e82",800:"#002551",900:"#000d21"},bgPrimary:"#F8F8F8"}),radii:{card:"0.75rem"},sizes:{container:{"2xl":"1920px"}},shadows:{base:"0px 4px 15px rgba(40, 132, 178, 0.15)"}},bt=Object(nt.a)(Object($.a)(Object($.a)({},ut),{},{components:lt})),dt=function(e){var t=e.children;return Object(y.jsx)(tt.a,{resetCSS:!0,theme:bt,children:t})},jt=Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)),ft=function(e,t){navigator.serviceWorker.register(e).then((function(e){e.onupdatefound=function(){var n=e.installing;null!=n&&(n.onstatechange=function(){"installed"===n.state&&(navigator.serviceWorker.controller?(console.log("New content is available and will be used when all tabs for this page are closed. See https://cra.link/PWA."),t&&t.onUpdate&&t.onUpdate(e)):(console.log("Content is cached for offline use."),t&&t.onSuccess&&t.onSuccess(e)))})}})).catch((function(e){console.error("Error during service worker registration:",e)}))};l.a.render(Object(y.jsx)(o.a.StrictMode,{children:Object(y.jsx)($e.a,{children:Object(y.jsx)(V,{children:Object(y.jsx)(u.a,{children:Object(y.jsx)(Ye.a,{children:Object(y.jsx)(dt,{children:Object(y.jsx)(et.a,{children:Object(y.jsx)(Ze.a,{children:Object(y.jsx)(Xe,{})})})})})})})})}),document.getElementById("root")),a&&a instanceof Function&&n.e(13).then(n.bind(null,580)).then((function(e){var t=e.getCLS,n=e.getFID,r=e.getFCP,c=e.getLCP,i=e.getTTFB;t(a),n(a),r(a),c(a),i(a)}),(function(){})),function(e){if("serviceWorker"in navigator){if(new URL("",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",(function(){var t="".concat("","/service-worker.js");jt?(!function(e,t){fetch(e,{headers:{"Service-Worker":"script"}}).then((function(n){var r=n.headers.get("content-type");404===n.status||null!=r&&-1===r.indexOf("javascript")?navigator.serviceWorker.ready.then((function(e){e.unregister().then((function(){window.location.reload()}))})):ft(e,t)})).catch((function(){console.log("No internet connection found. App is running in offline mode.")}))}(t,e),navigator.serviceWorker.ready.then((function(){console.log("This web app is being served cache-first by a service worker. To learn more, visit https://cra.link/PWA")}))):ft(t,e)}))}}()},54:function(e,t,n){"use strict";n.d(t,"d",(function(){return a})),n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return b})),n.d(t,"e",(function(){return d})),n.d(t,"c",(function(){return j}));var r,c,a,i=n(5),o=n(6),s=n(99),l=n(1);!function(e){e.DotNet="dotnet",e.TypeScript="typescript",e.Python="python",e.Go="golang",e.Java="java"}(a||(a={}));var u=[a.TypeScript,a.Python,a.Java,a.Go,a.DotNet],b=(r={},Object(i.a)(r,a.TypeScript,"TypeScript"),Object(i.a)(r,a.Python,"Python"),Object(i.a)(r,a.Java,"Java"),Object(i.a)(r,a.Go,"Go"),Object(i.a)(r,a.DotNet,".NET"),r),d=new Set([a.Python,a.TypeScript]),j=(c={},Object(i.a)(c,a.TypeScript,{name:b.typescript,icon:function(e){return Object(l.jsxs)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 256 256",children:[Object(l.jsx)("path",{d:"M0 128v128h256V0H0z",fill:"#007ACC"}),Object(l.jsx)("path",{d:"M56.611 128.85l-.081 10.483h33.32v94.68h23.57v-94.68h33.32v-10.28c0-5.69-.122-10.444-.284-10.566-.122-.162-20.399-.244-44.983-.203l-44.739.122-.122 10.443zM206.567 118.108c6.501 1.626 11.459 4.51 16.01 9.224 2.357 2.52 5.851 7.112 6.136 8.209.08.325-11.053 7.802-17.798 11.987-.244.163-1.22-.894-2.317-2.52-3.291-4.794-6.745-6.867-12.028-7.232-7.76-.529-12.759 3.535-12.718 10.32 0 1.992.284 3.17 1.097 4.796 1.707 3.535 4.876 5.648 14.832 9.955 18.326 7.884 26.168 13.085 31.045 20.48 5.445 8.25 6.664 21.415 2.966 31.208-4.063 10.646-14.14 17.88-28.323 20.277-4.388.772-14.79.65-19.504-.203-10.28-1.829-20.033-6.908-26.047-13.572-2.357-2.601-6.949-9.387-6.664-9.875.122-.162 1.178-.812 2.356-1.503 1.138-.65 5.446-3.13 9.509-5.486l7.355-4.267 1.544 2.276c2.154 3.291 6.867 7.802 9.712 9.305 8.167 4.308 19.383 3.698 24.909-1.26 2.357-2.153 3.332-4.388 3.332-7.68 0-2.966-.366-4.266-1.91-6.5-1.99-2.845-6.054-5.243-17.595-10.24-13.206-5.69-18.895-9.225-24.096-14.833-3.007-3.25-5.852-8.452-7.03-12.8-.975-3.616-1.22-12.678-.447-16.335 2.723-12.76 12.353-21.658 26.25-24.3 4.51-.853 14.994-.528 19.424.57z",fill:"#FFF"})]}))}}),Object(i.a)(c,a.Python,{name:b.python,icon:function(e){return Object(l.jsxs)(s.a,Object(o.a)(Object(o.a)({},e),{},{version:"1.0",viewBox:"0 0 110.421 109.846",children:[Object(l.jsxs)("defs",{children:[Object(l.jsxs)("linearGradient",{id:"a",children:[Object(l.jsx)("stop",{offset:"0",stopColor:"#ffe052"}),Object(l.jsx)("stop",{offset:"1",stopColor:"#ffc331"})]}),Object(l.jsx)("linearGradient",{gradientUnits:"userSpaceOnUse",id:"d",x1:"89.137",x2:"147.777",xlinkHref:"#a",y1:"111.921",y2:"168.101"}),Object(l.jsxs)("linearGradient",{id:"b",children:[Object(l.jsx)("stop",{offset:"0",stopColor:"#387eb8"}),Object(l.jsx)("stop",{offset:"1",stopColor:"#366994"})]}),Object(l.jsx)("linearGradient",{gradientUnits:"userSpaceOnUse",id:"c",x1:"55.549",x2:"110.149",xlinkHref:"#b",y1:"77.07",y2:"131.853"})]}),Object(l.jsxs)("g",{color:"#000",children:[Object(l.jsx)("path",{d:"M99.75 67.469c-28.032 0-26.281 12.156-26.281 12.156l.031 12.594h26.75V96H62.875s-17.938-2.034-17.938 26.25 15.657 27.281 15.657 27.281h9.343v-13.125s-.503-15.656 15.407-15.656h26.531s14.906.241 14.906-14.406V82.125s2.263-14.656-27.031-14.656zM85 75.938a4.808 4.808 0 014.813 4.812A4.808 4.808 0 0185 85.563a4.808 4.808 0 01-4.813-4.813A4.808 4.808 0 0185 75.937z",fill:"url(#c)",overflow:"visible",style:{marker:"none"},transform:"translate(-44.938 -67.469)"}),Object(l.jsx)("path",{d:"M100.546 177.315c28.032 0 26.281-12.156 26.281-12.156l-.03-12.594h-26.75v-3.781h37.374s17.938 2.034 17.938-26.25c0-28.285-15.657-27.282-15.657-27.282h-9.343v13.125s.503 15.657-15.407 15.657h-26.53s-14.907-.241-14.907 14.406v24.219s-2.263 14.656 27.031 14.656zm14.75-8.469a4.808 4.808 0 01-4.812-4.812 4.808 4.808 0 014.812-4.813 4.808 4.808 0 014.813 4.813 4.808 4.808 0 01-4.813 4.812z",fill:"url(#d)",overflow:"visible",style:{marker:"none"},transform:"translate(-44.938 -67.469)"})]})]}))}}),Object(i.a)(c,a.Java,{name:b.java,icon:function(e){return Object(l.jsxs)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 256 346",children:[Object(l.jsx)("path",{d:"M82.554 267.473s-13.198 7.675 9.393 10.272c27.369 3.122 41.356 2.675 71.517-3.034 0 0 7.93 4.972 19.003 9.279-67.611 28.977-153.019-1.679-99.913-16.517M74.292 229.659s-14.803 10.958 7.805 13.296c29.236 3.016 52.324 3.263 92.276-4.43 0 0 5.526 5.602 14.215 8.666-81.747 23.904-172.798 1.885-114.296-17.532",fill:"#5382A1"}),Object(l.jsx)("path",{d:"M143.942 165.515c16.66 19.18-4.377 36.44-4.377 36.44s42.301-21.837 22.874-49.183c-18.144-25.5-32.059-38.172 43.268-81.858 0 0-118.238 29.53-61.765 94.6",fill:"#E76F00"}),Object(l.jsx)("path",{d:"M233.364 295.442s9.767 8.047-10.757 14.273c-39.026 11.823-162.432 15.393-196.714.471-12.323-5.36 10.787-12.8 18.056-14.362 7.581-1.644 11.914-1.337 11.914-1.337-13.705-9.655-88.583 18.957-38.034 27.15 137.853 22.356 251.292-10.066 215.535-26.195M88.9 190.48s-62.771 14.91-22.228 20.323c17.118 2.292 51.243 1.774 83.03-.89 25.978-2.19 52.063-6.85 52.063-6.85s-9.16 3.923-15.787 8.448c-63.744 16.765-186.886 8.966-151.435-8.183 29.981-14.492 54.358-12.848 54.358-12.848M201.506 253.422c64.8-33.672 34.839-66.03 13.927-61.67-5.126 1.066-7.411 1.99-7.411 1.99s1.903-2.98 5.537-4.27c41.37-14.545 73.187 42.897-13.355 65.647 0 .001 1.003-.895 1.302-1.697",fill:"#5382A1"}),Object(l.jsx)("path",{d:"M162.439.371s35.887 35.9-34.037 91.101c-56.071 44.282-12.786 69.53-.023 98.377-32.73-29.53-56.75-55.526-40.635-79.72C111.395 74.612 176.918 57.393 162.439.37",fill:"#E76F00"}),Object(l.jsx)("path",{d:"M95.268 344.665c62.199 3.982 157.712-2.209 159.974-31.64 0 0-4.348 11.158-51.404 20.018-53.088 9.99-118.564 8.824-157.399 2.421.001 0 7.95 6.58 48.83 9.201",fill:"#5382A1"})]}))}}),Object(i.a)(c,a.Go,{name:b.golang,icon:function(e){return Object(l.jsx)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 512 192",children:Object(l.jsx)("path",{d:"M292.533 13.295l1.124.75c13.212 8.725 22.685 20.691 28.917 35.15 1.496 2.243.499 3.49-2.493 4.237l-5.063 1.296c-11.447 2.949-20.53 5.429-31.827 8.378l-6.443 1.678c-2.32.574-2.96.333-5.428-2.477l-.348-.399c-3.519-3.988-6.155-6.652-10.817-9.03l-.899-.443c-15.705-7.727-30.911-5.484-45.12 3.74-16.952 10.968-25.677 27.172-25.428 47.364.25 19.942 13.96 36.395 33.654 39.137 16.951 2.244 31.16-3.739 42.378-16.452 2.244-2.743 4.238-5.734 6.73-9.224h-48.11c-5.235 0-6.481-3.24-4.736-7.478l.864-2.035c3.204-7.454 8.173-18.168 11.4-24.294l.704-1.319c.862-1.494 2.612-3.513 5.977-3.513h80.224c3.603-11.415 9.449-22.201 17.246-32.407 18.198-23.931 40.135-36.396 69.8-41.63 25.427-4.488 49.359-1.995 71.046 12.713 19.694 13.461 31.909 31.66 35.15 55.59 4.237 33.654-5.485 61.075-28.668 84.508-16.453 16.702-36.645 27.172-59.829 31.908-6.73 1.247-13.461 1.496-19.942 2.244-22.685-.499-43.376-6.98-60.826-21.937-12.273-10.61-20.727-23.648-24.928-38.828a104.937 104.937 0 01-10.47 16.89c-17.949 23.683-41.381 38.39-71.046 42.38-24.43 3.24-47.115-1.497-67.058-16.454-18.447-13.96-28.917-32.407-31.66-55.34-3.24-27.173 4.737-51.603 21.19-73.041 17.7-23.184 41.132-37.891 69.8-43.126 22.999-4.16 45.037-1.595 64.936 11.464zM411.12 49.017l-.798.178c-23.183 5.235-38.14 19.942-43.624 43.375-4.488 19.444 4.985 39.138 22.934 47.115 13.71 5.983 27.421 5.235 40.633-1.496 19.694-10.22 30.413-26.175 31.66-47.613-.25-3.24-.25-5.734-.749-8.227-4.436-24.401-26.664-38.324-50.056-33.332zM116.416 94.564c.997 0 1.496.748 1.496 1.745l-.499 5.983c0 .997-.997 1.745-1.745 1.745l-54.344-.249c-.997 0-1.246-.748-.748-1.496l3.49-6.232c.499-.748 1.496-1.496 2.493-1.496h49.857zM121.9 71.63c.997 0 1.496.748 1.247 1.496l-1.995 5.983c-.249.997-1.246 1.495-2.243 1.495l-117.912.25c-.997 0-1.246-.499-.748-1.247l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247H121.9zm12.963-22.934c.997 0 1.246.748.748 1.496l-4.238 6.481c-.499.748-1.745 1.496-2.493 1.496l-90.24-.25c-.998 0-1.247-.498-.749-1.246l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247h88.995z",fill:"#00ACD7"})}))}}),Object(i.a)(c,a.DotNet,{name:b.dotnet,icon:function(e){return Object(l.jsx)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 32 32",children:Object(l.jsx)("path",{d:"M4.224 10.089v11.667h1.365v-8.438a12.58 12.58 0 00-.068-1.599h.052c.099.255.224.5.37.729l6 9.302h1.672V10.089h-1.359v8.203c-.016.573.016 1.146.083 1.714h-.031a13.986 13.986 0 00-.474-.781L5.995 10.09zm12.417 0v11.667h6.203l.005-1.281h-4.813v-4.047h4.214v-1.229h-4.214v-3.875h4.521V10.09zm7.25 0v1.234h3.354v10.432h1.365V11.323h3.391v-1.234zm-23.021 10a.86.86 0 00-.609.276.91.91 0 00-.26.641.901.901 0 001.542.641c.172-.167.271-.401.271-.641s-.099-.474-.271-.641a.876.876 0 00-.641-.276H.871z",fill:"#626262"})}))}}),c)},55:function(e,t,n){"use strict";n.d(t,"a",(function(){return b}));var r=n(6),c=n(22),a=n(193),i=n(21),o=n(194),s=n(98),l=n(1),u=["children","hasIcon","hasWarning","href","onClick","noFollow"],b=Object(i.a)((function(e,t){var n=e.children,i=e.hasIcon,b=void 0===i||i,d=e.hasWarning,j=void 0===d||d,f=e.href,h=e.onClick,O=e.noFollow,p=Object(c.a)(e,u),g=Object(s.b)(),m="noopener noreferrer";return(j||O)&&(m+=" nofollow"),Object(l.jsxs)(o.a,Object(r.a)(Object(r.a)({color:"blue.500",href:f,isExternal:!0,onClick:j?g({href:f,onClick:h}):h,ref:t,rel:m},p),{},{children:[n," ",b&&Object(l.jsx)(a.a,{mb:1,ml:2})]}))}));b.displayName="ExternalLink"},57:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r=function(e,t){return t.reduce((function(t,n){return t[n]="".concat(e,"-").concat(n),t}),{})}},80:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(6),c=n(194),a=n(29),i=n(1),o=function(e){return Object(i.jsx)(c.a,Object(r.a)({as:a.b},e))}},83:function(e,t,n){"use strict";n.d(t,"b",(function(){return j})),n.d(t,"a",(function(){return f}));var r=n(4),c=n(0),a=n(32),i=n.n(a),o=n(49),s=n(13),l=function(){var e=Object(o.a)(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(s.a.CATALOG_SUFFIX);case 2:if((t=e.sent).ok){e.next=6;break}throw console.error(t.statusText),new Error("Failed fetching packages index: ".concat(t.statusText));case 6:return e.abrupt("return",t.json());case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),u=n(84),b=n(1),d=Object(c.createContext)({loading:!1,data:void 0,error:void 0}),j=function(){return Object(c.useContext)(d)},f=function(e){var t=e.children,n=Object(u.a)(l),a=Object(r.a)(n,2),i=a[0],o=a[1];return Object(c.useEffect)((function(){i()}),[i]),Object(b.jsx)(d.Provider,{value:o,children:t})}},84:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n(32),c=n.n(r),a=n(49),i=n(4),o=n(0),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.initialValue,r=t.onSuccess,s=t.onError,l=Object(o.useState)(!1),u=Object(i.a)(l,2),b=u[0],d=u[1],j=Object(o.useState)(n),f=Object(i.a)(j,2),h=f[0],O=f[1],p=Object(o.useState)(),g=Object(i.a)(p,2),m=g[0],x=g[1],v=Object(o.useRef)(!1);Object(o.useEffect)((function(){return v.current=!0,function(){v.current=!1}}),[]);var y=Object(o.useCallback)(Object(a.a)(c.a.mark((function t(){var a,i=arguments;return c.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(v.current){t.next=2;break}return t.abrupt("return");case 2:return d(!0),x(void 0),t.prev=4,t.next=7,e.apply(void 0,i);case 7:a=t.sent,null===r||void 0===r||r(a),v.current&&(O(a),d(!1)),t.next=17;break;case 12:t.prev=12,t.t0=t.catch(4),console.error(t.t0),null===s||void 0===s||s(t.t0),v.current&&(O(n),x(t.t0),d(!1));case 17:case"end":return t.stop()}}),t,null,[[4,12]])}))),[s,r]);return Object(o.useMemo)((function(){return[y,{data:h,loading:b,error:m}]}),[y,h,b,m])}},85:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(6),c=n(21),a=n(25),i=n(1),o=Object(c.a)((function(e,t){return Object(i.jsx)(a.a.form,Object(r.a)(Object(r.a)({},e),{},{ref:t}))}));o.displayName="Form"},98:function(e,t,n){"use strict";n.d(t,"b",(function(){return g})),n.d(t,"a",(function(){return m}));var r=n(6),c=n(4),a=n(192),i=n(0),o="prefersWarnOnExternalLinkClick",s=n(193),l=n(44),u=n(189),b=n(213),d=n(145),j=n(215),f=n(55),h=n(1),O=function(e){var t=e.href,n=e.isOpen,r=e.onClick,a=e.onClose,O=e.setShouldWarn,p=Object(i.useState)(!0),g=Object(c.a)(p,2),m=g[0],x=g[1];return Object(h.jsx)(l.a,{closeOnOverlayClick:!1,isOpen:n,onClose:a,children:Object(h.jsx)(l.h,{children:Object(h.jsxs)(l.d,{color:"blue.800",children:[Object(h.jsx)(l.g,{children:"Confirm"}),Object(h.jsxs)(l.b,{children:[Object(h.jsx)(u.a,{fontSize:"lg",mb:2,children:"This link is taking you to an external site"}),Object(h.jsx)(u.a,{bg:"gray.100",borderRadius:"sm",color:"blue.500",fontSize:"sm",mb:4,p:1,children:t}),Object(h.jsx)(b.a,{onChange:function(e){var t=!e.target.checked;x(t)},children:"Do not show this warning again."})]}),Object(h.jsxs)(l.f,{children:[Object(h.jsx)(d.a,{onClick:function(){x(!0),a()},variant:"ghost",children:"Cancel"}),Object(h.jsx)(j.a,{hasArrow:!0,label:t,placement:"top",children:Object(h.jsx)(f.a,{hasIcon:!1,hasWarning:!1,href:t,noFollow:!0,onClick:function(e){if(!m){O(m);try{localStorage.setItem(o,JSON.stringify(m))}catch(t){}}null===r||void 0===r||r(e),a()},children:Object(h.jsx)(d.a,{colorScheme:"blue",ml:4,rightIcon:Object(h.jsx)(s.a,{}),tabIndex:0,variant:"ghost",children:"Proceed"})})})]})]})})})},p=Object(i.createContext)((function(e){return e.onClick})),g=function(){return Object(i.useContext)(p)},m=function(e){var t=e.children,n=Object(i.useState)(null),s=Object(c.a)(n,2),l=s[0],u=s[1],b=Object(a.a)({onClose:function(){u(null)}}),d=b.isOpen,j=b.onOpen,f=b.onClose,g=Object(i.useState)((function(){try{var e,t=null!==(e=localStorage.getItem(o))&&void 0!==e?e:"true";return JSON.parse(t)}catch(n){return!0}})),m=Object(c.a)(g,2),x=m[0],v=m[1],y=Object(i.useCallback)((function(e){var t=e.href,n=e.onClick;if(!x)return n;return function(e){u({href:t,onClick:n}),e.preventDefault(),j()}}),[j,x]);return Object(h.jsxs)(p.Provider,{value:y,children:[t,Object(h.jsx)(O,Object(r.a)({isOpen:d,onClose:f,setShouldWarn:v},l))]})}}},[[165,3,5]]]);
2
- //# sourceMappingURL=main.f1390607.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["util/url.ts","contexts/Analytics/Analytics.tsx","contexts/Analytics/usePageView.ts","hooks/useLanguage/useLanguage.ts","components/Card/Card.tsx","hooks/useQueryParams/useQueryParams.ts","components/CatalogSearch/testIds.ts","components/CatalogSearch/CatalogSearchInputs.tsx","components/CatalogSearch/Dropdown.tsx","components/CatalogSearch/CatalogSearch.tsx","hooks/useCatalogResults/useCatalogResults.ts","hooks/useCatalogSearch/useCatalogSearch.ts","constants/url.ts","api/config/index.ts","contexts/Config/Config.tsx","hooks/useDebounce/useDebounce.ts","components/SearchItem/SearchItem.tsx","lib/shortbread/shortbread.ts","reportWebVitals.ts","components/DevPreviewBanner/DevPreviewBanner.tsx","lib/shortbread/getLocalStoreWriter.ts","contexts/Shortbread/Shortbread.tsx","components/Footer/constants.ts","components/Footer/testIds.ts","components/Footer/Footer.tsx","constants/links.ts","components/NavPopover/NavPopover.tsx","components/NavPopover/NavPopoverContent.tsx","components/NavPopover/NavPopoverTrigger.tsx","components/Header/testIds.ts","components/Header/Documentation.tsx","components/Header/Resources.tsx","components/Header/Title.tsx","components/Header/MobileNav.tsx","components/Header/NavButton.tsx","components/SearchModal/testIds.ts","components/SearchModal/SearchModal.tsx","components/Header/SearchButton.tsx","components/Header/Header.tsx","components/PageLoader/PageLoader.tsx","components/LazyRoute/LazyRoute.tsx","App.tsx","theme/components/Code.ts","theme/components/Tag.ts","theme/components/index.ts","theme/components/Divider.ts","theme/foundations/index.ts","theme/foundations/borders.ts","theme/foundations/colors.ts","theme/foundations/radius.ts","theme/foundations/sizes.ts","theme/foundations/shadows.ts","theme/index.ts","contexts/Theme.tsx","register-service-worker.ts","index.tsx","constants/languages.ts","icons/TSIcon.tsx","icons/PythonIcon.tsx","icons/JavaIcon.tsx","icons/GoIcon.tsx","icons/DotNetIcon.tsx","components/ExternalLink/ExternalLink.tsx","util/createTestIds.ts","components/NavLink/NavLink.tsx","api/package/packages.ts","contexts/Catalog/Catalog.tsx","hooks/useRequest/useRequest.ts","components/Form/Form.tsx","contexts/ExternalLinkWarning/constants.ts","contexts/ExternalLinkWarning/ExternalLinkWarningModal.tsx","contexts/ExternalLinkWarning/ExternalLinkWarning.tsx"],"names":["gitSSHRegex","RegExp","getRepoUrlAndHost","repoUrl","url","sshUrl","match","author","repo","hostname","URL","createURL","base","params","search","searchParams","URLSearchParams","Object","entries","filter","forEach","k","v","set","toString","createURLSearchParams","getSearchPath","query","offset","language","ROUTES","SEARCH","QUERY_PARAMS","SEARCH_QUERY","LANGUAGE","OFFSET","getPackagePath","name","version","submodule","PACKAGES","SUBMODULE","AnalyticsContext","createContext","trackPageView","AnalyticsProvider","children","pathname","useLocation","prevPath","useRef","useCallback","opts","current","window","AWSMA","ready","document","dispatchEvent","CustomEvent","TRIGGER_EVENT","detail","Provider","value","usePageView","useContext","options","useMemo","page","pageURL","location","href","replace","event","type","description","defaultLang","Language","TypeScript","LOCAL_KEY","isValidLang","lang","TEMP_SUPPORTED_LANGUAGES","has","getInitialLang","langFromParams","storedLang","localStorage","getItem","useLanguage","updateUrl","updateSaved","hash","useHistory","useQueryParams","get","useState","setLanguage","useEffect","update","val","setItem","Card","forwardRef","props","ref","bg","border","borderRadius","boxShadow","p","displayName","testIds","createTestIds","languageOptions","fromEntries","LANGUAGE_NAME_MAP","key","LanguageDropdown","placeholder","items","onSelect","selected","text","strategy","as","Button","borderColor","trigger","rightIcon","ChevronDown","color","variant","menu","item","onClick","map","CatalogSearchInputs","onQueryChange","onLanguageChange","input","onChange","languageItem","languageDropdownMenu","languageDropdown","languageDropdownValue","colorScheme","submit","CatalogSearch","onSubmit","Form","form","autoRows","gap","templateColumns","sm","md","width","useCatalogResults","limit","useCatalog","data","loading","error","results","packages","filtered","keys","languages","includes","length","itemStr","JSON","stringify","toLowerCase","queryStr","sort","p1","p2","d1","Date","metadata","date","d2","pageLimit","Math","floor","displayable","startIndex","stopIndex","slice","useCatalogSearch","defaultQuery","setQuery","defaultLanguage","push","e","preventDefault","target","onSearch","API_PATHS","PACKAGES_PREFIX","CATALOG_SUFFIX","ASSEMBLY_SUFFIX","METADATA_SUFFIX","CONFIG","FAQ","HOME","SITE_TERMS","defaultConfig","fetchConfig","a","fetch","response","ok","console","log","json","catch","err","ConfigContext","undefined","useConfig","ConfigProvider","useRequest","requestConfig","configResponse","useDebounce","debouncedValue","setDebouncedValue","delay","handler","setTimeout","clearTimeout","SearchItem","alignItems","display","fontSize","h","lineHeight","listStyleType","onKeyDown","px","role","sx","tabIndex","instance","onPerfEntry","STORAGE_KEY","DevPreviewBanner","useDisclosure","defaultIsOpen","parse","sessionStorage","onClose","isOpen","in","mt","mx","position","InfoOutline","left","top","w","textAlign","ExternalLink","hasWarning","textDecoration","icon","Close","right","size","getLocalStoreWriter","initialize","Promise","resolve","reject","addEventListener","domain","navigator","__storeWriter","AWSCShortbread","callIfDefined","method","Error","access","checkForCookieConsent","customizeCookies","getConsentCookie","hasConsent","shortbread","publicAPI","ShortbreadContext","ShortbreadProvider","isReady","setIsReady","isCancelled","then","FOOTER_LINKS","SERVICE_TERMS","testId","PRIVACY","isExternal","LEGAL","values","Footer","align","container","direction","justify","py","columnGap","columns","links","index","mr","orientation","NavLink","to","disclaimer","manageCookies","fontWeight","DOCUMENTATION","isNavLink","RESOURCES","NavPopover","menuProps","Link","justifyContent","NavPopoverContent","idx","title","link","linkIdx","NavPopoverTrigger","Documentation","gettingStartedTrigger","gettingStartedMenu","Resources","resourcesTrigger","resourcesMenu","Title","MobileNav","placement","mobileNav","spacing","NavButton","nav","navOpen","Hamburger","onOpen","SearchModal","currentLanguage","onSearchSubmit","searchAPI","showResults","inputRef","initialFocusRef","pb","my","pkg","SearchButton","searchModal","some","path","searchButton","m","maxW","Search","ml","searchIcon","HeaderItem","rowStart","Header","gridTemplateColumns","gridTemplateRows","zIndex","colStart","justifySelf","placeItems","PageLoader","LazyRoute","Component","component","routeProps","fallback","lazy","Home","NotFound","Packages","SearchResults","SiteTerms","App","inset","overflow","exact","theme","components","Code","variants","subtle","whiteSpace","createVariant","overrides","varBase","Tag","baseStyle","background","official","Divider","defaultProps","foundations","borders","colors","blue","bgPrimary","radii","card","sizes","shadows","extendTheme","Theme","resetCSS","isLocalhost","Boolean","registerValidSW","swUrl","config","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","onUpdate","onSuccess","ReactDOM","render","StrictMode","Config","Analytics","ExternalLinkWarning","Catalog","getElementById","Function","getCLS","getFID","getFCP","getLCP","getTTFB","process","origin","headers","contentType","status","indexOf","unregister","reload","checkValidServiceWorker","LANGUAGES","Python","Java","Go","DotNet","Set","LANGUAGE_RENDER_MAP","typescript","transform","viewBox","d","fill","python","id","stopColor","gradientUnits","x1","x2","xlinkHref","y1","y2","style","marker","java","golang","dotnet","hasIcon","noFollow","withPrompt","useExternalLinkWarning","rel","mb","scope","ids","reduce","acc","curr","RouterLink","fetchPackages","statusText","CatalogContext","CatalogProvider","requestPackages","catalogResponse","requestFn","initialValue","onError","setLoading","setData","setError","mountedRef","statefulFetch","res","PREFERS_WARN_ON_EXTERNAL_LINK_CLICK","ExternalLinkWarningModal","setShouldWarn","finalShouldWarn","setFinalShouldWarn","closeOnOverlayClick","shouldWarn","checked","hasArrow","label","ExternalLinkWarningContext","ExternalLinkWarningProvider","modalOption","setModalOptions","saved"],"mappings":"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","file":"static/js/main.f1390607.chunk.js","sourcesContent":["import { Language } from \"../constants/languages\";\nimport { ROUTES, QUERY_PARAMS } from \"../constants/url\";\n\nconst gitSSHRegex = new RegExp(\n /git@github\\.com:([a-zA-Z-]+)+\\/?([a-zA-Z-]+)*(\\.git)?/\n);\n\nexport const getRepoUrlAndHost = (\n repoUrl: string\n): { url: string; hostname: string } | undefined => {\n try {\n let url = repoUrl;\n\n const sshUrl = repoUrl.match(gitSSHRegex);\n\n if (sshUrl) {\n const [, author, repo] = sshUrl;\n\n url = `https://github.com/${author}/${repo}`;\n }\n\n return {\n hostname: new URL(url).hostname,\n url,\n };\n } catch {\n // Invalid URL, return undefined as a signal that we should not display it\n return undefined;\n }\n};\n\nexport type SearchParamsObject = Record<\n string,\n string | number | undefined | null\n>;\n\nexport const createURLSearchParams = (\n params: SearchParamsObject,\n base?: string\n) => {\n const searchParams = new URLSearchParams(base);\n\n Object.entries(params)\n .filter(([, v]) => v != null)\n .forEach(([k, v]) => {\n searchParams.set(k, `${v}`);\n });\n\n return searchParams.toString();\n};\n\nexport const createURL = (base: string, params?: SearchParamsObject) => {\n let url = base;\n\n if (params) {\n const search = createURLSearchParams(params);\n\n if (search) {\n url += `?${search}`;\n }\n }\n\n return url;\n};\n\nexport const getSearchPath = ({\n query,\n offset,\n language,\n}: {\n query?: string;\n offset?: string | number;\n language?: Language | null;\n}) =>\n createURL(ROUTES.SEARCH, {\n [QUERY_PARAMS.SEARCH_QUERY]: query,\n [QUERY_PARAMS.LANGUAGE]: language,\n [QUERY_PARAMS.OFFSET]: offset ?? 0,\n });\n\nexport const getPackagePath = ({\n name,\n version,\n language,\n submodule,\n}: {\n name: string;\n version: string;\n language?: Language;\n submodule?: string;\n}) =>\n createURL(`${ROUTES.PACKAGES}/${name}/v/${version}`, {\n [QUERY_PARAMS.SUBMODULE]: submodule,\n [QUERY_PARAMS.LANGUAGE]: language,\n });\n","import {\n useContext,\n useCallback,\n useRef,\n createContext,\n FunctionComponent,\n} from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { PageViewConfig } from \"./types\";\n\nexport interface AnalyticsAPI {\n trackPageView: (opts: PageViewConfig) => void;\n}\n\nconst AnalyticsContext = createContext<AnalyticsAPI>({\n trackPageView: () => {},\n});\n\nexport const useAnalytics = () => useContext(AnalyticsContext);\n\nexport const AnalyticsProvider: FunctionComponent = ({ children }) => {\n const { pathname } = useLocation();\n\n const prevPath = useRef<null | string>(null);\n\n const trackPageView = useCallback(\n (opts: PageViewConfig) => {\n if (prevPath.current === pathname) {\n return;\n }\n\n window?.AWSMA?.ready?.(() => {\n document.dispatchEvent(\n new CustomEvent(window.AWSMA.TRIGGER_EVENT, { detail: opts })\n );\n\n prevPath.current = pathname;\n });\n },\n [pathname]\n );\n\n return (\n <AnalyticsContext.Provider value={{ trackPageView }}>\n {children}\n </AnalyticsContext.Provider>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useAnalytics } from \"./Analytics\";\nimport type { PageViewOptions, PageViewConfig } from \"./types\";\n\nexport const usePageView = (opts: PageViewOptions) => {\n const { trackPageView } = useAnalytics();\n const { pathname } = useLocation();\n\n const options: PageViewConfig = useMemo(\n () => ({\n page: {\n // This is silly but the analytics library crashes in dev if using localhost as the pageURL :/\n pageURL: window.location.href.replace(\n \"://localhost:3000\",\n \"://constructs.local.dev\"\n ),\n ...opts.page,\n },\n event: {\n type: \"pageview\",\n name: opts.event.name,\n description: opts.event.description,\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [pathname, opts]\n );\n\n const track = useCallback(() => {\n return trackPageView(options);\n }, [trackPageView, options]);\n\n return track;\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\n\nexport interface CardProps extends BoxProps {}\n\n/**\n * Implements a <Box /> with simple card styles.\n */\nexport const Card = forwardRef<CardProps, \"div\">((props, ref) => {\n return (\n <Box\n bg=\"white\"\n border=\"base\"\n borderRadius=\"card\"\n boxShadow=\"base\"\n p={2}\n ref={ref}\n {...props}\n />\n );\n});\n\nCard.displayName = \"Card\";\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"catalogSearch\", [\n \"form\",\n \"input\",\n \"languageDropdown\",\n \"languageDropdownMenu\",\n \"languageDropdownValue\",\n \"languageItem\",\n \"submit\",\n] as const);\n\nexport default testIds;\n","import { Button, forwardRef, Input } from \"@chakra-ui/react\";\nimport type { ChangeEventHandler, FunctionComponent } from \"react\";\nimport {\n Language,\n TEMP_SUPPORTED_LANGUAGES,\n LANGUAGE_NAME_MAP,\n} from \"../../constants/languages\";\nimport { Dropdown, DropdownProps } from \"./Dropdown\";\nimport testIds from \"./testIds\";\n\ntype LanguageItems = Partial<Record<Language, string>>;\n\nconst languageOptions = Object.fromEntries(\n Object.entries(LANGUAGE_NAME_MAP).filter(([key]) =>\n TEMP_SUPPORTED_LANGUAGES.has(key as Language)\n )\n) as LanguageItems;\n\nconst LanguageDropdown: FunctionComponent<DropdownProps<LanguageItems>> =\n Dropdown;\n\nexport interface CatalogSearchInputsProps {\n /**\n * Controls the query state value\n */\n query: string;\n /**\n * Controls the query state change event\n */\n onQueryChange: ChangeEventHandler<HTMLInputElement>;\n /**\n * Controls the language state value\n */\n language: Language | null;\n /**\n * Controls the language state change event\n */\n onLanguageChange: (language: Language | null) => void;\n}\n\nexport const CatalogSearchInputs = forwardRef<\n CatalogSearchInputsProps,\n \"input\"\n>(({ query, onQueryChange, language, onLanguageChange }, ref) => (\n <>\n <Input\n bg=\"white\"\n borderColor=\"blue.100\"\n boxShadow=\"base\"\n data-testid={testIds.input}\n name=\"query\"\n onChange={onQueryChange}\n placeholder=\"Search Constructs...\"\n ref={ref}\n value={query}\n />\n <LanguageDropdown\n items={languageOptions}\n onSelect={onLanguageChange}\n placeholder=\"Language...\"\n selected={language}\n testIds={{\n item: testIds.languageItem,\n menu: testIds.languageDropdownMenu,\n trigger: testIds.languageDropdown,\n value: testIds.languageDropdownValue,\n }}\n />\n <Button\n boxShadow=\"base\"\n colorScheme=\"blue\"\n data-testid={testIds.submit}\n type=\"submit\"\n >\n Search\n </Button>\n </>\n));\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Menu,\n MenuButton,\n MenuItem,\n MenuList,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface DropdownProps<T = Record<string, string>> {\n testIds: {\n item: string;\n menu: string;\n trigger: string;\n value: string;\n };\n placeholder: string;\n selected: T[keyof T] | null;\n onSelect: (val: keyof T | null) => void;\n items: T;\n}\n\nexport const Dropdown: FunctionComponent<DropdownProps> = ({\n placeholder,\n items,\n onSelect,\n selected,\n testIds,\n}) => {\n const text = selected ? items[selected] : placeholder;\n const options = Object.entries(items);\n\n return (\n <Menu strategy=\"fixed\">\n <MenuButton\n as={Button}\n bg=\"white\"\n borderColor=\"blue.100\"\n boxShadow=\"base\"\n data-testid={testIds.trigger}\n rightIcon={<ChevronDownIcon color=\"blue.500\" />}\n variant=\"outline\"\n >\n <Text data-testid={testIds.value}>{text}</Text>\n </MenuButton>\n <MenuList data-testid={testIds.menu}>\n <MenuItem data-testid={testIds.item} onClick={() => onSelect(null)}>\n Any\n </MenuItem>\n {options.map(([name, displayName]) => (\n <MenuItem\n data-testid={testIds.item}\n key={name}\n onClick={() => onSelect(name)}\n >\n {displayName}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport type { FormEventHandler, FunctionComponent } from \"react\";\nimport { Form } from \"../Form\";\nimport {\n CatalogSearchInputs,\n CatalogSearchInputsProps,\n} from \"./CatalogSearchInputs\";\nimport testIds from \"./testIds\";\n\nexport interface CatalogSearchProps extends CatalogSearchInputsProps {\n /**\n * Called when the catalog search form is submitted (via enter keypress or submit click)\n */\n onSubmit: FormEventHandler<HTMLFormElement>;\n}\n\nexport const CatalogSearch: FunctionComponent<CatalogSearchProps> = ({\n onSubmit,\n ...props\n}) => {\n return (\n <Form data-testid={testIds.form} onSubmit={onSubmit}>\n <Grid\n autoRows=\"1fr\"\n gap={4}\n templateColumns={{ sm: \"1fr\", md: \"3fr 1fr 1fr\" }}\n width=\"full\"\n >\n <CatalogSearchInputs {...props} />\n </Grid>\n </Form>\n );\n};\n","import { useMemo } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { useCatalog } from \"../../contexts/Catalog\";\n\nexport interface UseCatalogResultsOptions {\n limit: number;\n offset?: number;\n query?: string;\n language?: Language | null;\n}\n\n/**\n * A hook which encapsulates logic around applying search filters\n * and determining displayable results\n */\nexport const useCatalogResults = ({\n limit,\n offset = 0,\n query = \"\",\n language = null,\n}: UseCatalogResultsOptions) => {\n const { data, loading, error } = useCatalog();\n\n const results = useMemo(() => {\n if (loading || error || !data?.packages) return [];\n\n const filtered = data.packages.filter((item) => {\n // Filter out items which do not support the current language\n if (language && language !== Language.TypeScript) {\n if (!Object.keys(item.languages).includes(language)) {\n return false;\n }\n }\n\n // Filter items which do not match the current query\n if (query.length) {\n const itemStr = JSON.stringify(item).toLowerCase();\n const queryStr = query.toLowerCase();\n\n if (!itemStr.includes(queryStr)) {\n return false;\n }\n }\n\n return true;\n });\n\n // Next sort by most recently updated. (The sort should eventually become a parameter)\n return [...filtered].sort((p1, p2) => {\n const d1 = new Date(p1.metadata.date);\n const d2 = new Date(p2.metadata.date);\n if (d1 === d2) {\n return 0;\n }\n return d1 < d2 ? 1 : -1;\n });\n }, [data?.packages, error, language, loading, query]);\n\n const pageLimit = results ? Math.floor(results.length / limit) : 0;\n\n const displayable = useMemo(() => {\n const startIndex = (offset > pageLimit ? pageLimit : offset) * limit;\n const stopIndex = startIndex + limit;\n\n return results.slice(startIndex, stopIndex);\n }, [limit, offset, pageLimit, results]);\n\n return useMemo(\n () => ({ loading, results, error, displayable, pageLimit }),\n [displayable, error, loading, pageLimit, results]\n );\n};\n","import {\n ChangeEventHandler,\n FormEventHandler,\n useCallback,\n useMemo,\n useState,\n Dispatch,\n SetStateAction,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\n\nexport interface UseCatalogSearchParams {\n defaultQuery?: string;\n defaultLanguage?: Language | null;\n}\n\nexport interface UseCatalogSearchReturn {\n /**\n * The language state for this search\n */\n language: Language | null;\n /**\n * Updates language state\n */\n onLanguageChange: (lang: Language | null) => void;\n /**\n * Input ChangeEventHandler which wraps the setQuery state setter\n */\n onQueryChange: ChangeEventHandler<HTMLInputElement>;\n /**\n * Navigates to the search query url\n */\n onSearch: () => void;\n /**\n * FormEventHandler to handle query submission\n */\n onSubmit: FormEventHandler<HTMLFormElement>;\n /**\n * The query state for this search\n */\n query: string;\n /**\n * Language state setter\n */\n setLanguage: Dispatch<SetStateAction<Language | null>>;\n /**\n * Query state setter\n */\n setQuery: Dispatch<SetStateAction<string>>;\n}\n\n/**\n * This hook provides all of the methods required to implement the functionality\n * of a client-side catalog search component. It additionally exposes lower-level methods\n * for custom components which may want to access parts of the search API\n */\nexport const useCatalogSearch = (\n options: UseCatalogSearchParams = {}\n): UseCatalogSearchReturn => {\n const [query, setQuery] = useState(options.defaultQuery ?? \"\");\n\n const [language, setLanguage] = useState<Language | null>(\n options.defaultLanguage ?? null\n );\n\n const { push } = useHistory();\n\n const onQueryChange: UseCatalogSearchReturn[\"onQueryChange\"] = (e) => {\n e.preventDefault();\n setQuery(e.target.value);\n };\n\n const onSearch = useCallback(() => {\n push(getSearchPath({ language, query }));\n }, [language, push, query]);\n\n const onSubmit: UseCatalogSearchReturn[\"onSubmit\"] = useCallback(\n (e) => {\n e?.preventDefault();\n onSearch();\n },\n [onSearch]\n );\n\n return useMemo(\n () => ({\n language,\n onLanguageChange: setLanguage,\n onQueryChange,\n onSearch,\n onSubmit,\n query,\n setLanguage,\n setQuery,\n }),\n [language, onSearch, onSubmit, query]\n );\n};\n","export const API_PATHS = {\n PACKAGES_PREFIX: \"/data\",\n CATALOG_SUFFIX: \"/catalog.json\",\n ASSEMBLY_SUFFIX: \"/assembly.json\",\n METADATA_SUFFIX: \"/metadata.json\",\n CONFIG: \"/config.json\",\n} as const;\n\nexport const QUERY_PARAMS = {\n LANGUAGE: \"lang\",\n OFFSET: \"offset\",\n SEARCH_QUERY: \"q\",\n SUBMODULE: \"submodule\",\n} as const;\n\nexport const ROUTES = {\n FAQ: \"/faq\",\n HOME: \"/\",\n PACKAGES: \"/packages\",\n SEARCH: \"/search\",\n SITE_TERMS: \"/terms\",\n};\n\ntype QueryParams = typeof QUERY_PARAMS;\n\nexport type QueryParamKey = QueryParams[keyof QueryParams];\n","import { API_PATHS } from \"../../constants/url\";\n\nexport interface PackageLinksConfig {\n name: string;\n value: string;\n displayText?: string;\n}\n\nexport interface Config {\n packageLinks?: PackageLinksConfig[];\n}\n\nconst defaultConfig: Config = {};\n\nexport const fetchConfig = async (): Promise<Config> => {\n const response = await fetch(API_PATHS.CONFIG);\n\n if (!response.ok) {\n console.log(\"Failed to fetch application config, using default values\");\n return defaultConfig;\n }\n\n return response.json().catch((err) => {\n console.error(err);\n console.log(\"Invalid config response, using default values\");\n return defaultConfig;\n });\n};\n","import { createContext, FunctionComponent, useContext, useEffect } from \"react\";\nimport { fetchConfig, Config } from \"../../api/config\";\nimport { useRequest, UseRequestResponse } from \"../../hooks/useRequest\";\n\nconst ConfigContext = createContext<UseRequestResponse<Config>>({\n loading: false,\n data: undefined,\n error: undefined,\n});\n\nexport const useConfig = () => useContext(ConfigContext);\n\nexport const ConfigProvider: FunctionComponent = ({ children }) => {\n const [requestConfig, configResponse] = useRequest(fetchConfig);\n\n useEffect(() => {\n void requestConfig();\n }, [requestConfig]);\n\n return (\n <ConfigContext.Provider value={configResponse}>\n {children}\n </ConfigContext.Provider>\n );\n};\n","import { useState, useEffect } from \"react\";\n\nexport interface UseDebounceOptions<T> {\n delay?: number;\n onChange?: (val: T) => void;\n}\n\nexport const useDebounce = <T>(\n value: T,\n options: UseDebounceOptions<T> = {}\n) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n const { delay = 250, onChange } = options;\n\n useEffect(() => {\n // Update value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n onChange?.(value);\n }, delay);\n\n // Cancel timeout when value / delay changes\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay, onChange]);\n\n return debouncedValue;\n};\n","import { HTMLChakraProps, ListItem, forwardRef } from \"@chakra-ui/react\";\nimport type { KeyboardEventHandler } from \"react\";\n\nexport interface SearchItemProps extends HTMLChakraProps<\"li\"> {\n name: string;\n onClick: () => void;\n}\n\nexport const SearchItem = forwardRef<SearchItemProps, \"li\">(\n ({ name, onClick, ...props }, ref) => {\n const onKeyDown: KeyboardEventHandler<HTMLLIElement> = (e) => {\n if (e.key === \"Enter\") {\n onClick();\n }\n };\n\n return (\n <ListItem\n alignItems=\"center\"\n display=\"flex\"\n fontSize=\"lg\"\n h={12}\n lineHeight=\"base\"\n listStyleType=\"none\"\n onClick={onClick}\n onKeyDown={onKeyDown}\n px={4}\n ref={ref}\n role=\"option\"\n sx={{ \":hover, :focus\": { bg: \"gray.100\" } }}\n tabIndex={0}\n {...props}\n >\n {name}\n </ListItem>\n );\n }\n);\n\nSearchItem.displayName = \"SearchItem\";\n","import { getLocalStoreWriter } from \"./getLocalStoreWriter\";\n\nexport interface ShortbreadOptions {\n domain?: string;\n parent?: HTMLElement;\n language?: Navigator[\"language\"];\n __storeWriter?: (cookie: Document[\"cookie\"]) => void;\n}\n\nexport interface Shortbread {\n /**\n * Call this function to be notified when you cookie category is allowed\n */\n access: (\n name: \"essential\" | \"performance\" | \"functional\" | \"advertising\",\n onAllowed: () => void\n ) => void;\n /**\n * Call to ask the user the type of cookies they'd like to receive\n */\n checkForCookieConsent: () => void;\n /**\n * Open the Customize Cookie Dialog\n */\n customizeCookies: () => void;\n /**\n * Returns the consent cookie or undefined if not yet set\n */\n getConsentCookie: () => Document[\"cookie\"] | undefined;\n /**\n * Call this to ask if the cookie has been set\n */\n hasConsent: (cookieName: string) => boolean;\n}\n\n// We only want to manage a single instance at a time\nlet instance: Shortbread | undefined;\n\n/**\n * Call to initialize the shortbread instance. Must be called before all other methods\n */\nexport const initialize = async () => {\n return new Promise<void>((resolve, reject) => {\n // Wait until page has loaded first\n window.addEventListener(\"load\", async () => {\n try {\n const options: ShortbreadOptions = {\n domain: window.location.hostname,\n language: navigator.language,\n __storeWriter: getLocalStoreWriter(),\n };\n\n // Import the shortbread source\n const { AWSCShortbread } = await import(\"./source\");\n instance = AWSCShortbread(options);\n\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n });\n};\n\n// Shortbread wrappers\n\nconst callIfDefined =\n <T extends keyof Shortbread>(method: T) =>\n (...args: Parameters<Shortbread[T]>): ReturnType<Shortbread[T]> => {\n if (!instance) {\n throw new Error(\"shortbread has not been initialized\");\n }\n\n // Annotations are correct for consumers\n return (instance[method] as any)(...args);\n };\n\n/**\n * Call this function to be notified when you cookie category is allowed\n */\nexport const access = callIfDefined(\"access\");\n/**\n * Call to ask the user the type of cookies they'd like to receive\n */\nexport const checkForCookieConsent = callIfDefined(\"checkForCookieConsent\");\n/**\n * Open the Customize Cookie Dialog\n */\nexport const customizeCookies = callIfDefined(\"customizeCookies\");\n/**\n * Returns the consent cookie or undefined if not yet set\n */\nexport const getConsentCookie = callIfDefined(\"getConsentCookie\");\n/**\n * Call this to ask if the cookie has been set\n */\nexport const hasConsent = callIfDefined(\"hasConsent\");\n","import { ReportHandler } from \"web-vitals\";\n\nexport const reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(\n ({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n },\n () => {}\n );\n }\n};\n","import { CloseIcon, InfoOutlineIcon } from \"@chakra-ui/icons\";\nimport {\n Box,\n IconButton,\n Collapse,\n Text,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../Card\";\nimport { ExternalLink } from \"../ExternalLink\";\n\nconst STORAGE_KEY = \"showing-dev-preview-banner\";\n\nexport const DevPreviewBanner: FunctionComponent = () => {\n const { isOpen, onClose } = useDisclosure({\n defaultIsOpen: JSON.parse(\n window.sessionStorage.getItem(STORAGE_KEY) ?? \"true\"\n ),\n onClose: () => window.sessionStorage.setItem(STORAGE_KEY, \"false\"),\n });\n\n return (\n <Box h=\"max-content\">\n <Collapse in={isOpen}>\n <Card\n aria-label=\"Preview Banner\"\n bg=\"blue.500\"\n border=\"none\"\n boxShadow=\"none\"\n color=\"white\"\n mt={4}\n mx={4}\n p={4}\n position=\"relative\"\n role=\"alertdialog\"\n >\n <InfoOutlineIcon h={5} left={4} position=\"absolute\" top={4} w={5} />\n <Text fontSize=\"md\" mx={8} textAlign=\"center\">\n This application is in Dev Preview. Some features may change. If you\n find any issues, please report them{\" \"}\n <ExternalLink\n color=\"inherit\"\n hasWarning={false}\n href=\"https://github.com/cdklabs/construct-hub-webapp/issues\"\n textDecoration=\"underline\"\n >\n here\n </ExternalLink>\n </Text>\n <IconButton\n aria-label=\"Dismiss banner\"\n colorScheme=\"white\"\n icon={<CloseIcon />}\n onClick={onClose}\n position=\"absolute\"\n right={4}\n size=\"xs\"\n top={3}\n variant=\"ghost\"\n />\n </Card>\n </Collapse>\n </Box>\n );\n};\n","import type { ShortbreadOptions } from \"./shortbread\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * This function allows for shortbread testing locally.\n * If the node env is dev and the url has a query param of sb=true,\n * it will return a __storeWriter function to pass into shortbread's options\n */\nexport const getLocalStoreWriter = (): ShortbreadOptions[\"__storeWriter\"] => {\n const search = new URLSearchParams(window.location.search);\n const shouldUseOverride = search.get(\"sb\") === \"true\";\n\n if (isDev && shouldUseOverride) {\n return (cookie) => {\n document.cookie = cookie.replace(\" secure=true;\", \"\");\n };\n }\n\n return undefined;\n};\n","import {\n createContext,\n FunctionComponent,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport * as shortbread from \"../../lib/shortbread\";\n\nconst { initialize, ...publicAPI } = shortbread;\n\nconst ShortbreadContext = createContext<Partial<typeof publicAPI>>({});\n\nexport const useShortBread = () => useContext(ShortbreadContext);\n\nexport const ShortbreadProvider: FunctionComponent = ({ children }) => {\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n let isCancelled = false;\n\n initialize()\n .then(() => {\n if (!isCancelled) {\n publicAPI.checkForCookieConsent();\n setIsReady(true);\n }\n })\n .catch((e) => {\n console.error(e);\n\n if (!isCancelled) {\n setIsReady(false);\n }\n });\n\n return () => {\n isCancelled = true;\n setIsReady(false);\n };\n }, []);\n\n return (\n <ShortbreadContext.Provider value={isReady ? publicAPI : {}}>\n {children}\n </ShortbreadContext.Provider>\n );\n};\n","import { ROUTES } from \"../../constants/url\";\n\nexport type Link = {\n display: string;\n url: string;\n testId: string;\n isExternal?: boolean;\n};\n\nexport const FOOTER_LINKS: Record<string, Link> = {\n SERVICE_TERMS: {\n display: \"AWS Service Terms\",\n url: \"https://aws.amazon.com/service-terms/\",\n testId: \"service-terms\",\n },\n PRIVACY: {\n display: \"Privacy\",\n url: \"https://aws.amazon.com/privacy/\",\n testId: \"privacy\",\n },\n SITE_TERMS: {\n display: \"Site Terms\",\n url: ROUTES.SITE_TERMS,\n testId: \"site-terms\",\n isExternal: false,\n },\n LEGAL: {\n display: \"Legal\",\n url: \"https://aws.amazon.com/legal/\",\n testId: \"legal\",\n },\n} as const;\n\nexport const DISCLAIMER = \"2021 Amazon Web Services, Inc. All rights reserved.\";\n","import { createTestIds } from \"../../util/createTestIds\";\nimport { FOOTER_LINKS } from \"./constants\";\n\nconst testIds = createTestIds(\"footer\", [\n \"container\",\n \"links\",\n \"disclaimer\",\n \"manageCookies\",\n ...Object.values(FOOTER_LINKS).map(({ testId }) => testId),\n] as const);\n\nexport default testIds;\n","import { Box, Button, Divider, Flex, SimpleGrid, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { useShortBread } from \"../../contexts/Shortbread\";\nimport { ExternalLink } from \"../ExternalLink\";\nimport { NavLink } from \"../NavLink\";\nimport { DISCLAIMER, FOOTER_LINKS } from \"./constants\";\nimport testIds from \"./testIds\";\n\nexport interface FooterProps {}\n\nexport const Footer: FunctionComponent<FooterProps> = () => {\n const { customizeCookies } = useShortBread();\n\n return (\n <Flex\n align=\"center\"\n as=\"footer\"\n bg=\"blue.800\"\n color=\"white\"\n data-testid={testIds.container}\n direction=\"column\"\n justify=\"center\"\n py={4}\n >\n <SimpleGrid columnGap={6} columns={[1, 2, 4]} data-testid={testIds.links}>\n {Object.entries(FOOTER_LINKS).map(\n ([key, { display, isExternal = true, testId, url }], index) => (\n <Flex\n align=\"center\"\n direction={{ base: \"column\", md: \"row\" }}\n key={key}\n >\n {/* Single Row Divider */}\n <Box\n display={{ base: \"none\", md: index !== 0 ? \"initial\" : \"none\" }}\n h={5}\n >\n <Divider borderColor=\"white\" mr={6} orientation=\"vertical\" />\n </Box>\n {isExternal ? (\n <ExternalLink\n color=\"currentcolor\"\n data-testid={testIds[testId]}\n hasWarning={false}\n href={url}\n lineHeight={10}\n mx=\"auto\"\n >\n {display}\n </ExternalLink>\n ) : (\n <NavLink\n color=\"currentcolor\"\n data-testid={testIds[testId]}\n lineHeight={10}\n mx=\"auto\"\n to={url}\n >\n {display}\n </NavLink>\n )}\n {/* 2 Row Divider */}\n <Box\n display={{\n base: \"none\",\n sm: index < 2 ? \"initial\" : \"none\",\n md: \"none\",\n }}\n w=\"100%\"\n >\n <Divider borderColor=\"white\" />\n </Box>\n </Flex>\n )\n )}\n </SimpleGrid>\n <Text data-testid={testIds.disclaimer} fontSize=\"xs\" mt={4}>\n {DISCLAIMER}\n </Text>\n <Button\n color=\"white\"\n data-testid={testIds.manageCookies}\n fontSize=\"xs\"\n fontWeight=\"normal\"\n mt={4}\n onClick={customizeCookies}\n variant=\"link\"\n >\n Manage Cookies\n </Button>\n </Flex>\n );\n};\n","import type { IMenuItems } from \"../components/NavPopover\";\n\nexport const DOCUMENTATION: IMenuItems = [\n { display: \"FAQ\", isNavLink: true, url: \"/faq\" },\n {\n display: \"Construct Hub on GitHub\",\n url: \"https://github.com/cdklabs/construct-hub\",\n },\n {\n display: \"Issues on GitHub\",\n url: \"https://github.com/cdklabs/construct-hub/issues\",\n },\n];\n\nexport const RESOURCES: IMenuItems = [\n {\n display: \"AWS CDK\",\n links: [\n { display: \"Home\", url: \"https://aws.amazon.com/cdk/\" },\n {\n display: \"Getting Started\",\n url: \"https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html\",\n },\n { display: \"Workshop\", url: \"https://cdkworkshop.com/\" },\n {\n display: \"Best Practices\",\n url: \"https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk\",\n },\n ],\n },\n {\n display: \"CDK for Terraform\",\n links: [\n {\n display: \"Getting Started\",\n url: \"https://learn.hashicorp.com/tutorials/terraform/cdktf\",\n },\n {\n display: \"Tutorials\",\n url: \"https://learn.hashicorp.com/collections/terraform/cdktf\",\n },\n ],\n },\n {\n display: \"CDK for Kubernetes\",\n links: [\n { display: \"Home\", url: \"https://cdk8s.io\" },\n {\n display: \"Getting Started\",\n url: \"https://cdk8s.io/docs/latest/getting-started\",\n },\n { display: \"Documentation\", url: \"https://cdk8s.io/docs/latest\" },\n {\n display: \"API Reference\",\n url: \"https://cdk8s.io/docs/latest/reference/index.html\",\n },\n ],\n },\n {\n display: \"Community\",\n links: [\n {\n display: \"Slack\",\n url: \"https://join.slack.com/t/cdk-dev/shared_invite/zt-mso6p56d-qJp7SOTBvMaQuDrx7R2wHg\",\n },\n { display: \"Community Hub\", url: \"https://cdk.dev\" },\n ],\n },\n];\n","import { Menu, MenuProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface NavPopoverProps extends MenuProps {}\n\nexport const NavPopover: FunctionComponent<NavPopoverProps> = ({\n children,\n ...menuProps\n}) => {\n return (\n <Menu colorScheme=\"blue.800\" strategy=\"fixed\" {...menuProps}>\n {children}\n </Menu>\n );\n};\n","import {\n forwardRef,\n MenuDivider,\n MenuGroup,\n MenuItem,\n MenuList,\n MenuListProps,\n} from \"@chakra-ui/react\";\nimport { Fragment, FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../ExternalLink\";\nimport { NavLink } from \"../NavLink\";\nimport type { IMenuItems, ILink } from \"./types\";\n\nexport interface NavPopoverContentProps extends MenuListProps {\n items: IMenuItems;\n}\n\nconst Link: FunctionComponent<ILink> = ({ display, isNavLink, url }) =>\n isNavLink ? (\n <NavLink color=\"blue.500\" to={url}>\n {display}\n </NavLink>\n ) : (\n <ExternalLink\n alignItems=\"center\"\n display=\"flex\"\n hasWarning={false}\n href={url}\n justifyContent=\"space-between\"\n w=\"100%\"\n >\n {display}\n </ExternalLink>\n );\n\nexport const NavPopoverContent = forwardRef<NavPopoverContentProps, \"div\">(\n ({ items, ...menuProps }, ref) => {\n return (\n <MenuList {...menuProps} ref={ref}>\n {items.map((item, idx) => {\n if (\"links\" in item) {\n return (\n <Fragment key={`${item.display}-${idx}`}>\n <MenuGroup align=\"left\" title={item.display}>\n {item.links.map((link, linkIdx) => (\n <MenuItem key={`${link.display}-${linkIdx}`}>\n <Link {...link} />\n </MenuItem>\n ))}\n </MenuGroup>\n {idx !== items.length - 1 && <MenuDivider />}\n </Fragment>\n );\n }\n\n return (\n <MenuItem key={`${item.display}-${idx}`}>\n <Link {...item} />\n </MenuItem>\n );\n })}\n </MenuList>\n );\n }\n);\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n MenuButton,\n MenuButtonProps,\n forwardRef,\n} from \"@chakra-ui/react\";\n\nexport const NavPopoverTrigger = forwardRef<MenuButtonProps, \"button\">(\n ({ children, ...props }, ref) => {\n return (\n <MenuButton\n as={Button}\n color=\"blue.800\"\n fontWeight=\"500\"\n ref={ref}\n rightIcon={<ChevronDownIcon h={6} w={6} />}\n size=\"md\"\n variant=\"link\"\n {...props}\n >\n {children}\n </MenuButton>\n );\n }\n);\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"header\", [\n \"container\",\n \"title\",\n \"gettingStartedTrigger\",\n \"gettingStartedMenu\",\n \"resourcesTrigger\",\n \"resourcesMenu\",\n \"navOpen\",\n \"navClose\",\n \"searchButton\",\n \"searchIcon\",\n \"mobileNav\",\n] as const);\n\nexport default testIds;\n","import type { FunctionComponent } from \"react\";\nimport { DOCUMENTATION } from \"../../constants/links\";\nimport {\n NavPopover,\n NavPopoverContent,\n NavPopoverTrigger,\n} from \"../NavPopover\";\nimport testIds from \"./testIds\";\n\nexport const Documentation: FunctionComponent = () => (\n <NavPopover>\n <NavPopoverTrigger data-testid={testIds.gettingStartedTrigger}>\n Getting Started\n </NavPopoverTrigger>\n <NavPopoverContent\n data-testid={testIds.gettingStartedMenu}\n items={DOCUMENTATION}\n />\n </NavPopover>\n);\n","import type { FunctionComponent } from \"react\";\nimport { RESOURCES } from \"../../constants/links\";\nimport {\n NavPopover,\n NavPopoverContent,\n NavPopoverTrigger,\n} from \"../NavPopover\";\nimport testIds from \"./testIds\";\n\nexport const Resources: FunctionComponent = () => {\n return (\n <NavPopover>\n <NavPopoverTrigger data-testid={testIds.resourcesTrigger}>\n Resources\n </NavPopoverTrigger>\n <NavPopoverContent\n data-testid={testIds.resourcesMenu}\n items={RESOURCES}\n />\n </NavPopover>\n );\n};\n","import { Box, Heading } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport testIds from \"./testIds\";\n\nexport const Title: FunctionComponent = () => (\n <Heading as=\"h1\" color=\"blue.800\" data-testid={testIds.title} size=\"lg\">\n <Link to=\"/\">\n <Box as=\"span\" color=\"blue.500\">\n Construct\n </Box>{\" \"}\n Hub\n </Link>\n </Heading>\n);\n","import {\n Drawer,\n DrawerBody,\n DrawerOverlay,\n DrawerHeader,\n DrawerContent,\n DrawerCloseButton,\n Portal,\n Stack,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Documentation } from \"./Documentation\";\nimport { Resources } from \"./Resources\";\nimport testIds from \"./testIds\";\nimport { Title } from \"./Title\";\nexport interface MobileNavProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const MobileNav: FunctionComponent<MobileNavProps> = ({\n isOpen,\n onClose,\n}) => {\n return (\n <Portal>\n <Drawer isOpen={isOpen} onClose={onClose} placement=\"left\" size=\"xs\">\n <DrawerOverlay />\n <DrawerContent data-testid={testIds.mobileNav}>\n <DrawerCloseButton />\n <DrawerHeader display=\"flex\" justifyContent=\"center\">\n <Title />\n </DrawerHeader>\n <DrawerBody>\n <Stack align=\"start\" justify=\"start\" spacing={4}>\n <Documentation />\n <Resources />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </Portal>\n );\n};\n","import { HamburgerIcon } from \"@chakra-ui/icons\";\nimport { IconButton, useDisclosure } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { MobileNav } from \"./MobileNav\";\nimport testIds from \"./testIds\";\n\nexport const NavButton: FunctionComponent = () => {\n const nav = useDisclosure();\n\n return (\n <>\n <IconButton\n aria-label=\"Navigation Menu\"\n borderRadius=\"md\"\n data-testid={testIds.navOpen}\n display={{ md: \"none\" }}\n icon={<HamburgerIcon />}\n onClick={nav.onOpen}\n variant=\"ghost\"\n />\n <MobileNav {...nav} />\n </>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"searchModal\", [\"container\"] as const);\n\nexport default testIds;\n","import {\n Divider,\n Heading,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalHeader,\n ModalOverlay,\n Portal,\n Stack,\n UnorderedList,\n} from \"@chakra-ui/react\";\nimport { FormEventHandler, FunctionComponent, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { QUERY_PARAMS, ROUTES } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useDebounce } from \"../../hooks/useDebounce\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { CatalogSearchInputs } from \"../CatalogSearch\";\nimport { Form } from \"../Form\";\nimport { SearchItem } from \"../SearchItem\";\nimport testIds from \"./testIds\";\n\nexport interface SearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const SearchModal: FunctionComponent<SearchModalProps> = ({\n isOpen,\n onClose,\n}) => {\n const { push } = useHistory();\n const [currentLanguage] = useLanguage();\n const { onSubmit: onSearchSubmit, ...searchAPI } = useCatalogSearch();\n const { query, language } = useDebounce({\n query: searchAPI.query,\n language: searchAPI.language,\n });\n\n const { displayable } = useCatalogResults({\n limit: 5,\n offset: 0,\n query,\n language,\n });\n\n const showResults = (query || language) && displayable.length > 0;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const navigate = (to: string) => {\n onClose();\n push(to);\n };\n\n const onSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n onClose();\n onSearchSubmit(e);\n };\n\n return (\n <Portal>\n <Modal initialFocusRef={inputRef} isOpen={isOpen} onClose={onClose}>\n <ModalOverlay>\n <ModalContent data-testid={testIds.container}>\n <ModalCloseButton />\n <ModalHeader>Search modules or providers</ModalHeader>\n <ModalBody>\n <Form onSubmit={onSubmit} pb={4}>\n <Stack spacing={4}>\n <CatalogSearchInputs ref={inputRef} {...searchAPI} />\n </Stack>\n </Form>\n {showResults && (\n <>\n <Divider />\n <Heading fontSize=\"md\" my={4} textAlign=\"center\">\n Suggestions\n </Heading>\n <UnorderedList>\n {displayable.map((pkg) => (\n <SearchItem\n key={pkg.name}\n name={pkg.name}\n onClick={() =>\n navigate(\n `${ROUTES.PACKAGES}/${pkg.name}/v/${pkg.version}?${\n QUERY_PARAMS.LANGUAGE\n }=${language ?? currentLanguage}`\n )\n }\n />\n ))}\n </UnorderedList>\n </>\n )}\n </ModalBody>\n </ModalContent>\n </ModalOverlay>\n </Modal>\n </Portal>\n );\n};\n","import { SearchIcon } from \"@chakra-ui/icons\";\nimport { Button, IconButton, useDisclosure } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { ROUTES } from \"../../constants/url\";\nimport { SearchModal } from \"../SearchModal\";\nimport testIds from \"./testIds\";\n\nexport const SearchButton: FunctionComponent = () => {\n const searchModal = useDisclosure();\n const { pathname } = useLocation();\n\n if ([ROUTES.HOME, ROUTES.SEARCH].some((path) => path === pathname)) {\n return null;\n }\n\n return (\n <>\n {/* Desktop / Tablet Search Trigger */}\n <Button\n align=\"center\"\n color=\"gray.600\"\n colorScheme=\"gray\"\n data-testid={testIds.searchButton}\n display={{ base: \"none\", md: \"flex\" }}\n fontWeight=\"medium\"\n justifyContent=\"space-between\"\n m=\"0 auto\"\n maxW=\"500px\"\n onClick={searchModal.onOpen}\n rightIcon={<SearchIcon color=\"gray.600\" ml={4} />}\n variant=\"outline\"\n w=\"100%\"\n >\n Search Constructs...\n </Button>\n {/* Mobile Search Trigger */}\n <IconButton\n aria-label=\"Search Icon\"\n borderRadius=\"md\"\n data-testid={testIds.searchIcon}\n display={{ base: \"initial\", md: \"none\" }}\n icon={<SearchIcon color=\"gray.600\" />}\n onClick={searchModal.onOpen}\n variant=\"ghost\"\n />\n <SearchModal {...searchModal} />\n </>\n );\n};\n","import { Box, Grid, GridItem, GridItemProps } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Documentation } from \"./Documentation\";\nimport { NavButton } from \"./NavButton\";\nimport { Resources } from \"./Resources\";\nimport { SearchButton } from \"./SearchButton\";\nimport testIds from \"./testIds\";\nimport { Title } from \"./Title\";\n\nconst HeaderItem: FunctionComponent<GridItemProps> = (props) => (\n <GridItem align=\"center\" justify=\"center\" rowStart={1} {...props} />\n);\n\nexport const Header: FunctionComponent = () => {\n return (\n <Grid\n alignItems=\"center\"\n as=\"header\"\n bg=\"white\"\n boxShadow=\"base\"\n data-testid={testIds.container}\n gap={4}\n gridTemplateColumns={{\n base: \"1fr 3fr 1fr\",\n md: \"minmax(200px, 2fr) minmax(200px, 3fr) 2fr\",\n }}\n gridTemplateRows=\"1fr\"\n maxW=\"100vw\"\n position=\"sticky\"\n px={4}\n py={4}\n top={0}\n w=\"100%\"\n zIndex=\"sticky\"\n >\n {/* Logo / Header */}\n <HeaderItem\n colStart={{ base: 2, md: 1 }}\n justifySelf={{ base: \"center\", md: \"start\" }}\n >\n <Title />\n </HeaderItem>\n\n {/* Search Trigger */}\n <HeaderItem\n colStart={{ base: 3, md: 2 }}\n justifySelf={{ base: \"end\", md: \"stretch\" }}\n >\n <SearchButton />\n </HeaderItem>\n\n {/* Navigation */}\n <HeaderItem\n colStart={{ base: 1, md: 3 }}\n justifySelf={{ base: \"start\", md: \"end\" }}\n >\n <Grid\n display={{ base: \"none\", md: \"grid\" }}\n gap={4}\n gridTemplateColumns=\"1fr 1fr\"\n gridTemplateRows=\"1fr\"\n placeItems=\"center\"\n w=\"100%\"\n >\n <Box>\n <Documentation />\n </Box>\n <Box>\n <Resources />\n </Box>\n </Grid>\n <NavButton />\n </HeaderItem>\n </Grid>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const PageLoader: FunctionComponent = () => (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n);\n","import { FunctionComponent, LazyExoticComponent, Suspense } from \"react\";\nimport { Route, RouteProps } from \"react-router-dom\";\nimport { PageLoader } from \"../PageLoader\";\n\nexport interface LazyRouteProps extends RouteProps {\n component: LazyExoticComponent<FunctionComponent>;\n}\n\n/**\n * A wrapper around the react-router-dom <Route /> which takes in a lazy loaded component\n * and wraps it with <Suspense /> and a generic <PageLoader /> fallback\n *\n * Usage:\n * ```tsx\n * import { lazy } from \"react\";\n *\n * const MyComponent = lazy(() => import(\"./path/to/MyComponent\"));\n *\n * <LazyRoute path=\"/\" component={MyComponent} />\n *\n * ```\n */\nexport const LazyRoute: FunctionComponent<LazyRouteProps> = ({\n component: Component,\n ...routeProps\n}) => (\n <Route {...routeProps}>\n <Suspense fallback={<PageLoader />}>\n <Component />\n </Suspense>\n </Route>\n);\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent, lazy } from \"react\";\nimport { Switch } from \"react-router-dom\";\nimport { DevPreviewBanner } from \"./components/DevPreviewBanner\";\nimport { Footer } from \"./components/Footer\";\nimport { Header } from \"./components/Header\";\nimport { LazyRoute } from \"./components/LazyRoute\";\nimport { ROUTES } from \"./constants/url\";\n\nconst FAQ = lazy(() => import(\"./views/FAQ\"));\nconst Home = lazy(() => import(\"./views/Home\"));\nconst NotFound = lazy(() => import(\"./views/NotFound\"));\nconst Packages = lazy(() => import(\"./views/Packages\"));\nconst SearchResults = lazy(() => import(\"./views/SearchResults\"));\nconst SiteTerms = lazy(() => import(\"./views/SiteTerms\"));\n\nexport const App: FunctionComponent = () => {\n return (\n <Grid\n as=\"main\"\n bg=\"bgPrimary\"\n gridTemplateColumns=\"1fr\"\n gridTemplateRows=\"auto auto 1fr auto\"\n h=\"100%\"\n inset={0}\n maxW=\"100vw\"\n overflow=\"hidden auto\"\n position=\"fixed\"\n >\n <Header />\n <DevPreviewBanner />\n <Switch>\n <LazyRoute component={FAQ} exact path={ROUTES.FAQ} />\n <LazyRoute component={Home} exact path={ROUTES.HOME} />\n <LazyRoute component={SiteTerms} exact path={ROUTES.SITE_TERMS} />\n <LazyRoute component={Packages} path={ROUTES.PACKAGES} />\n <LazyRoute component={SearchResults} exact path={ROUTES.SEARCH} />\n <LazyRoute component={NotFound} path=\"*\" />\n </Switch>\n <Footer />\n </Grid>\n );\n};\n","import { theme } from \"@chakra-ui/react\";\n\nconst {\n components: { Code: base },\n} = theme;\n\nexport const Code = {\n ...base,\n variants: {\n ...base.variants,\n \"code-block\": {\n ...base.variants.subtle,\n display: \"block\",\n whiteSpace: \"pre\",\n },\n },\n};\n","import type { tagAnatomy } from \"@chakra-ui/anatomy\";\nimport { theme } from \"@chakra-ui/react\";\nimport type {\n PartsStyleInterpolation,\n StyleFunctionProps,\n} from \"@chakra-ui/theme-tools\";\n\nconst createVariant =\n (\n variant: PartsStyleInterpolation<typeof tagAnatomy>,\n overrides: Record<string, any>\n ) =>\n (props: StyleFunctionProps) => {\n const varBase = typeof variant === \"function\" ? variant(props) : variant;\n return {\n ...varBase,\n container: {\n ...varBase.container,\n ...overrides,\n },\n };\n };\n\nconst {\n components: { Tag: base },\n} = theme;\n\nexport const Tag = {\n ...base,\n baseStyle: {\n container: {\n fontWeight: \"normal\",\n },\n },\n variants: {\n ...base.variants,\n subtle: createVariant(base.variants.subtle, {\n background: \"#F2F2F2\",\n color: \"blue.800\",\n }),\n official: createVariant(base.variants.subtle, {\n background: \"rgba(33, 150, 83, 0.1)\",\n color: \"#219653\",\n }),\n },\n};\n","import { theme } from \"@chakra-ui/react\";\nimport { Code } from \"./Code\";\nimport { Divider } from \"./Divider\";\nimport { Tag } from \"./Tag\";\n\nexport const components = {\n ...theme.components,\n Code,\n Divider,\n Tag,\n};\n","// TODO: Figure out why this does nothing\nexport const Divider = {\n defaultProps: {\n borderColor: \"rgba(0, 124, 253, 0.15)\",\n },\n};\n","import { borders } from \"./borders\";\nimport { colors } from \"./colors\";\nimport { radii } from \"./radius\";\nimport { shadows } from \"./shadows\";\nimport { sizes } from \"./sizes\";\n\nexport const foundations = {\n borders,\n colors,\n radii,\n sizes,\n shadows,\n};\n","export const borders = {\n base: \"1px solid rgba(0, 124, 253, 0.15)\",\n};\n","import { theme } from \"@chakra-ui/react\";\n\nexport const colors = {\n ...theme.colors,\n blue: {\n 50: \"#dcf3ff\",\n 100: \"#aed9ff\",\n 200: \"#7dbeff\",\n 300: \"#4aa4ff\",\n 400: \"#1a8aff\",\n 500: \"#0070e6\",\n 600: \"#0057b4\",\n 700: \"#003e82\",\n 800: \"#002551\",\n 900: \"#000d21\",\n },\n bgPrimary: \"#F8F8F8\",\n};\n","export const radii = {\n card: \"0.75rem\",\n};\n","// import { theme } from \"@chakra-ui/react\";\n\nexport const sizes = {\n container: {\n \"2xl\": \"1920px\",\n },\n};\n","export const shadows = {\n base: \"0px 4px 15px rgba(40, 132, 178, 0.15)\",\n};\n","import { extendTheme } from \"@chakra-ui/react\";\nimport { components } from \"./components\";\nimport { foundations } from \"./foundations\";\n\nexport const theme = extendTheme({\n ...foundations,\n components,\n});\n","import { ChakraProvider } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { theme } from \"../theme\";\n\nexport const Theme: FunctionComponent = ({ children }) => {\n return (\n <ChakraProvider resetCSS theme={theme}>\n {children}\n </ChakraProvider>\n );\n};\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\n// [::1] is the IPv6 localhost address.\n// 127.0.0.0/8 are considered localhost for IPv4.\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"[::1]\" ||\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nconst registerValidSW = (swUrl: string, config?: Config) => {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://cra.link/PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n};\n\nconst checkValidServiceWorker = (swUrl: string, config?: Config) => {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n void navigator.serviceWorker.ready.then((registration) => {\n void registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n};\n\nexport const register = (config?: Config) => {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n void navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service worker. To learn more, visit https://cra.link/PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n};\n\nexport const unregister = () => {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n void registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n};\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport \"./index.css\";\nimport { App } from \"./App\";\nimport { AnalyticsProvider } from \"./contexts/Analytics\";\nimport { CatalogProvider } from \"./contexts/Catalog\";\nimport { ConfigProvider } from \"./contexts/Config\";\nimport { ExternalLinkWarningProvider } from \"./contexts/ExternalLinkWarning\";\nimport { ShortbreadProvider } from \"./contexts/Shortbread\";\nimport { Theme } from \"./contexts/Theme\";\nimport { register } from \"./register-service-worker\";\nimport { reportWebVitals } from \"./reportWebVitals\";\n\nReactDOM.render(\n <React.StrictMode>\n <ConfigProvider>\n <ShortbreadProvider>\n <Router>\n <AnalyticsProvider>\n <Theme>\n <ExternalLinkWarningProvider>\n <CatalogProvider>\n <App />\n </CatalogProvider>\n </ExternalLinkWarningProvider>\n </Theme>\n </AnalyticsProvider>\n </Router>\n </ShortbreadProvider>\n </ConfigProvider>\n </React.StrictMode>,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n\n// Register service worker for PWA functionality.\nregister();\n","import type { PropsOf, Icon } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { DotNetIcon } from \"../icons/DotNetIcon\";\nimport { GoIcon } from \"../icons/GoIcon\";\nimport { JavaIcon } from \"../icons/JavaIcon\";\nimport { PythonIcon } from \"../icons/PythonIcon\";\nimport { TSIcon } from \"../icons/TSIcon\";\n\nexport enum Language {\n DotNet = \"dotnet\",\n TypeScript = \"typescript\",\n Python = \"python\",\n Go = \"golang\",\n Java = \"java\",\n}\n\n/**\n * The sorted list of all available languages.\n */\nexport const LANGUAGES: readonly Language[] = [\n Language.TypeScript,\n Language.Python,\n Language.Java,\n Language.Go,\n Language.DotNet,\n];\n\nexport const LANGUAGE_NAME_MAP: { readonly [key in Language]: string } = {\n [Language.TypeScript]: \"TypeScript\",\n [Language.Python]: \"Python\",\n [Language.Java]: \"Java\",\n [Language.Go]: \"Go\",\n [Language.DotNet]: \".NET\",\n};\n\nexport const TEMP_SUPPORTED_LANGUAGES: ReadonlySet<Language> = new Set([\n Language.Python,\n Language.TypeScript,\n]);\n\nexport const LANGUAGE_RENDER_MAP: {\n readonly [key in Language]: {\n readonly name: string;\n readonly icon: FunctionComponent<PropsOf<typeof Icon>>;\n };\n} = {\n [Language.TypeScript]: {\n name: LANGUAGE_NAME_MAP.typescript,\n icon: TSIcon,\n },\n [Language.Python]: {\n name: LANGUAGE_NAME_MAP.python,\n icon: PythonIcon,\n },\n [Language.Java]: {\n name: LANGUAGE_NAME_MAP.java,\n icon: JavaIcon,\n },\n [Language.Go]: {\n name: LANGUAGE_NAME_MAP.golang,\n icon: GoIcon,\n },\n [Language.DotNet]: {\n name: LANGUAGE_NAME_MAP.dotnet,\n icon: DotNetIcon,\n },\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const TSIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M0 128v128h256V0H0z\" fill=\"#007ACC\" />\n <path\n d=\"M56.611 128.85l-.081 10.483h33.32v94.68h23.57v-94.68h33.32v-10.28c0-5.69-.122-10.444-.284-10.566-.122-.162-20.399-.244-44.983-.203l-44.739.122-.122 10.443zM206.567 118.108c6.501 1.626 11.459 4.51 16.01 9.224 2.357 2.52 5.851 7.112 6.136 8.209.08.325-11.053 7.802-17.798 11.987-.244.163-1.22-.894-2.317-2.52-3.291-4.794-6.745-6.867-12.028-7.232-7.76-.529-12.759 3.535-12.718 10.32 0 1.992.284 3.17 1.097 4.796 1.707 3.535 4.876 5.648 14.832 9.955 18.326 7.884 26.168 13.085 31.045 20.48 5.445 8.25 6.664 21.415 2.966 31.208-4.063 10.646-14.14 17.88-28.323 20.277-4.388.772-14.79.65-19.504-.203-10.28-1.829-20.033-6.908-26.047-13.572-2.357-2.601-6.949-9.387-6.664-9.875.122-.162 1.178-.812 2.356-1.503 1.138-.65 5.446-3.13 9.509-5.486l7.355-4.267 1.544 2.276c2.154 3.291 6.867 7.802 9.712 9.305 8.167 4.308 19.383 3.698 24.909-1.26 2.357-2.153 3.332-4.388 3.332-7.68 0-2.966-.366-4.266-1.91-6.5-1.99-2.845-6.054-5.243-17.595-10.24-13.206-5.69-18.895-9.225-24.096-14.833-3.007-3.25-5.852-8.452-7.03-12.8-.975-3.616-1.22-12.678-.447-16.335 2.723-12.76 12.353-21.658 26.25-24.3 4.51-.853 14.994-.528 19.424.57z\"\n fill=\"#FFF\"\n />\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const PythonIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon {...props} version=\"1.0\" viewBox=\"0 0 110.421 109.846\">\n <defs>\n <linearGradient id=\"a\">\n <stop offset=\"0\" stopColor=\"#ffe052\" />\n <stop offset=\"1\" stopColor=\"#ffc331\" />\n </linearGradient>\n <linearGradient\n gradientUnits=\"userSpaceOnUse\"\n id=\"d\"\n x1=\"89.137\"\n x2=\"147.777\"\n xlinkHref=\"#a\"\n y1=\"111.921\"\n y2=\"168.101\"\n />\n <linearGradient id=\"b\">\n <stop offset=\"0\" stopColor=\"#387eb8\" />\n <stop offset=\"1\" stopColor=\"#366994\" />\n </linearGradient>\n <linearGradient\n gradientUnits=\"userSpaceOnUse\"\n id=\"c\"\n x1=\"55.549\"\n x2=\"110.149\"\n xlinkHref=\"#b\"\n y1=\"77.07\"\n y2=\"131.853\"\n />\n </defs>\n <g color=\"#000\">\n <path\n d=\"M99.75 67.469c-28.032 0-26.281 12.156-26.281 12.156l.031 12.594h26.75V96H62.875s-17.938-2.034-17.938 26.25 15.657 27.281 15.657 27.281h9.343v-13.125s-.503-15.656 15.407-15.656h26.531s14.906.241 14.906-14.406V82.125s2.263-14.656-27.031-14.656zM85 75.938a4.808 4.808 0 014.813 4.812A4.808 4.808 0 0185 85.563a4.808 4.808 0 01-4.813-4.813A4.808 4.808 0 0185 75.937z\"\n fill=\"url(#c)\"\n overflow=\"visible\"\n style={{ marker: \"none\" }}\n transform=\"translate(-44.938 -67.469)\"\n />\n <path\n d=\"M100.546 177.315c28.032 0 26.281-12.156 26.281-12.156l-.03-12.594h-26.75v-3.781h37.374s17.938 2.034 17.938-26.25c0-28.285-15.657-27.282-15.657-27.282h-9.343v13.125s.503 15.657-15.407 15.657h-26.53s-14.907-.241-14.907 14.406v24.219s-2.263 14.656 27.031 14.656zm14.75-8.469a4.808 4.808 0 01-4.812-4.812 4.808 4.808 0 014.812-4.813 4.808 4.808 0 014.813 4.813 4.808 4.808 0 01-4.813 4.812z\"\n fill=\"url(#d)\"\n overflow=\"visible\"\n style={{ marker: \"none\" }}\n transform=\"translate(-44.938 -67.469)\"\n />\n </g>\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const JavaIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 256 346\"\n >\n <path\n d=\"M82.554 267.473s-13.198 7.675 9.393 10.272c27.369 3.122 41.356 2.675 71.517-3.034 0 0 7.93 4.972 19.003 9.279-67.611 28.977-153.019-1.679-99.913-16.517M74.292 229.659s-14.803 10.958 7.805 13.296c29.236 3.016 52.324 3.263 92.276-4.43 0 0 5.526 5.602 14.215 8.666-81.747 23.904-172.798 1.885-114.296-17.532\"\n fill=\"#5382A1\"\n />\n <path\n d=\"M143.942 165.515c16.66 19.18-4.377 36.44-4.377 36.44s42.301-21.837 22.874-49.183c-18.144-25.5-32.059-38.172 43.268-81.858 0 0-118.238 29.53-61.765 94.6\"\n fill=\"#E76F00\"\n />\n <path\n d=\"M233.364 295.442s9.767 8.047-10.757 14.273c-39.026 11.823-162.432 15.393-196.714.471-12.323-5.36 10.787-12.8 18.056-14.362 7.581-1.644 11.914-1.337 11.914-1.337-13.705-9.655-88.583 18.957-38.034 27.15 137.853 22.356 251.292-10.066 215.535-26.195M88.9 190.48s-62.771 14.91-22.228 20.323c17.118 2.292 51.243 1.774 83.03-.89 25.978-2.19 52.063-6.85 52.063-6.85s-9.16 3.923-15.787 8.448c-63.744 16.765-186.886 8.966-151.435-8.183 29.981-14.492 54.358-12.848 54.358-12.848M201.506 253.422c64.8-33.672 34.839-66.03 13.927-61.67-5.126 1.066-7.411 1.99-7.411 1.99s1.903-2.98 5.537-4.27c41.37-14.545 73.187 42.897-13.355 65.647 0 .001 1.003-.895 1.302-1.697\"\n fill=\"#5382A1\"\n />\n <path\n d=\"M162.439.371s35.887 35.9-34.037 91.101c-56.071 44.282-12.786 69.53-.023 98.377-32.73-29.53-56.75-55.526-40.635-79.72C111.395 74.612 176.918 57.393 162.439.37\"\n fill=\"#E76F00\"\n />\n <path\n d=\"M95.268 344.665c62.199 3.982 157.712-2.209 159.974-31.64 0 0-4.348 11.158-51.404 20.018-53.088 9.99-118.564 8.824-157.399 2.421.001 0 7.95 6.58 48.83 9.201\"\n fill=\"#5382A1\"\n />\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const GoIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 512 192\"\n >\n <path\n d=\"M292.533 13.295l1.124.75c13.212 8.725 22.685 20.691 28.917 35.15 1.496 2.243.499 3.49-2.493 4.237l-5.063 1.296c-11.447 2.949-20.53 5.429-31.827 8.378l-6.443 1.678c-2.32.574-2.96.333-5.428-2.477l-.348-.399c-3.519-3.988-6.155-6.652-10.817-9.03l-.899-.443c-15.705-7.727-30.911-5.484-45.12 3.74-16.952 10.968-25.677 27.172-25.428 47.364.25 19.942 13.96 36.395 33.654 39.137 16.951 2.244 31.16-3.739 42.378-16.452 2.244-2.743 4.238-5.734 6.73-9.224h-48.11c-5.235 0-6.481-3.24-4.736-7.478l.864-2.035c3.204-7.454 8.173-18.168 11.4-24.294l.704-1.319c.862-1.494 2.612-3.513 5.977-3.513h80.224c3.603-11.415 9.449-22.201 17.246-32.407 18.198-23.931 40.135-36.396 69.8-41.63 25.427-4.488 49.359-1.995 71.046 12.713 19.694 13.461 31.909 31.66 35.15 55.59 4.237 33.654-5.485 61.075-28.668 84.508-16.453 16.702-36.645 27.172-59.829 31.908-6.73 1.247-13.461 1.496-19.942 2.244-22.685-.499-43.376-6.98-60.826-21.937-12.273-10.61-20.727-23.648-24.928-38.828a104.937 104.937 0 01-10.47 16.89c-17.949 23.683-41.381 38.39-71.046 42.38-24.43 3.24-47.115-1.497-67.058-16.454-18.447-13.96-28.917-32.407-31.66-55.34-3.24-27.173 4.737-51.603 21.19-73.041 17.7-23.184 41.132-37.891 69.8-43.126 22.999-4.16 45.037-1.595 64.936 11.464zM411.12 49.017l-.798.178c-23.183 5.235-38.14 19.942-43.624 43.375-4.488 19.444 4.985 39.138 22.934 47.115 13.71 5.983 27.421 5.235 40.633-1.496 19.694-10.22 30.413-26.175 31.66-47.613-.25-3.24-.25-5.734-.749-8.227-4.436-24.401-26.664-38.324-50.056-33.332zM116.416 94.564c.997 0 1.496.748 1.496 1.745l-.499 5.983c0 .997-.997 1.745-1.745 1.745l-54.344-.249c-.997 0-1.246-.748-.748-1.496l3.49-6.232c.499-.748 1.496-1.496 2.493-1.496h49.857zM121.9 71.63c.997 0 1.496.748 1.247 1.496l-1.995 5.983c-.249.997-1.246 1.495-2.243 1.495l-117.912.25c-.997 0-1.246-.499-.748-1.247l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247H121.9zm12.963-22.934c.997 0 1.246.748.748 1.496l-4.238 6.481c-.499.748-1.745 1.496-2.493 1.496l-90.24-.25c-.998 0-1.247-.498-.749-1.246l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247h88.995z\"\n fill=\"#00ACD7\"\n />\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const DotNetIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 32 32\"\n >\n <path\n d=\"M4.224 10.089v11.667h1.365v-8.438a12.58 12.58 0 00-.068-1.599h.052c.099.255.224.5.37.729l6 9.302h1.672V10.089h-1.359v8.203c-.016.573.016 1.146.083 1.714h-.031a13.986 13.986 0 00-.474-.781L5.995 10.09zm12.417 0v11.667h6.203l.005-1.281h-4.813v-4.047h4.214v-1.229h-4.214v-3.875h4.521V10.09zm7.25 0v1.234h3.354v10.432h1.365V11.323h3.391v-1.234zm-23.021 10a.86.86 0 00-.609.276.91.91 0 00-.26.641.901.901 0 001.542.641c.172-.167.271-.401.271-.641s-.099-.474-.271-.641a.876.876 0 00-.641-.276H.871z\"\n fill=\"#626262\"\n />\n </Icon>\n );\n};\n","import { ExternalLinkIcon } from \"@chakra-ui/icons\";\nimport { forwardRef, Link, LinkProps } from \"@chakra-ui/react\";\nimport { useExternalLinkWarning } from \"../../contexts/ExternalLinkWarning\";\n\nexport interface ExternalLinkProps extends LinkProps {\n /**\n * Shows an external link icon. `true` by default\n */\n hasIcon?: boolean;\n /**\n * Prompts the user to confirm leaving the site. `true` by default\n */\n hasWarning?: boolean;\n /**\n * Adds the nofollow annotation to the anchor's rel attribute\n */\n noFollow?: boolean;\n}\n\nexport const ExternalLink = forwardRef<ExternalLinkProps, \"a\">(\n (\n {\n children,\n hasIcon = true,\n hasWarning = true,\n href,\n onClick,\n noFollow,\n ...props\n },\n ref\n ) => {\n const withPrompt = useExternalLinkWarning();\n\n let rel = \"noopener noreferrer\";\n\n if (hasWarning || noFollow) {\n rel += \" nofollow\";\n }\n\n return (\n <Link\n color=\"blue.500\"\n href={href}\n isExternal\n onClick={hasWarning ? withPrompt({ href, onClick }) : onClick}\n ref={ref}\n rel={rel}\n {...props}\n >\n {children} {hasIcon && <ExternalLinkIcon mb={1} ml={2} />}\n </Link>\n );\n }\n);\n\nExternalLink.displayName = \"ExternalLink\";\n","type TestIds<T extends Readonly<string[]>> = {\n [key in T[number]]: string;\n};\n\n/**\n * A helper to create scoped test ids across components which can be re-used\n * in e2e and unit tests.\n */\nexport const createTestIds = <T extends Readonly<string[]>>(\n scope: string,\n ids: T\n): TestIds<T> =>\n ids.reduce<Record<string, string>>((acc, curr) => {\n acc[curr] = `${scope}-${curr}`;\n return acc;\n }, {}) as TestIds<T>;\n","import { Link as ChakraLink, PropsOf } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nexport type NavLinkProps = PropsOf<typeof ChakraLink> &\n PropsOf<typeof RouterLink>;\n\nexport const NavLink: FunctionComponent<NavLinkProps> = (props) => {\n return <ChakraLink as={RouterLink} {...props} />;\n};\n","import { Language } from \"../../constants/languages\";\nimport { API_PATHS } from \"../../constants/url\";\nimport { Metadata } from \"./metadata\";\n\nexport interface Author {\n readonly name: string;\n readonly url: string;\n}\n\nexport interface CatalogPackage {\n name: string;\n languages: Partial<Record<Language, Record<string, unknown>>>;\n version: string;\n description: string;\n author: Author | string;\n keywords: string[];\n metadata: Metadata;\n}\n\nexport interface Packages {\n packages: CatalogPackage[];\n}\n\n/**\n * Fetch the catalog of all packages from the backend.\n */\nexport const fetchPackages = async (): Promise<Packages> => {\n const response = await fetch(API_PATHS.CATALOG_SUFFIX);\n\n if (!response.ok) {\n console.error(response.statusText);\n throw new Error(`Failed fetching packages index: ${response.statusText}`);\n }\n\n return response.json();\n};\n","import { createContext, FunctionComponent, useContext, useEffect } from \"react\";\nimport { fetchPackages, Packages } from \"../../api/package/packages\";\nimport { useRequest, UseRequestResponse } from \"../../hooks/useRequest\";\n\nconst CatalogContext = createContext<UseRequestResponse<Packages>>({\n loading: false,\n data: undefined,\n error: undefined,\n});\n\nexport const useCatalog = () => useContext(CatalogContext);\n\nexport const CatalogProvider: FunctionComponent = ({ children }) => {\n const [requestPackages, catalogResponse] = useRequest(fetchPackages);\n\n useEffect(() => {\n void requestPackages();\n }, [requestPackages]);\n\n return (\n <CatalogContext.Provider value={catalogResponse}>\n {children}\n </CatalogContext.Provider>\n );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\n// Possible utility types for re-use\ntype PromiseFn = (...args: any[]) => Promise<any>;\ntype Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T;\ntype AwaitedReturn<T extends PromiseFn> = Awaited<ReturnType<T>>;\n\nexport interface UseRequestOptions<T> {\n initialValue?: T;\n onError?: (err: Error) => void;\n onSuccess?: (res: T) => void;\n}\n\nexport interface UseRequestResponse<T> {\n loading: boolean;\n error: Error | undefined;\n data: T | undefined;\n}\n\nexport type UseRequestReturn<T extends (...args: any[]) => Promise<T>> = [\n (...args: Parameters<T>) => Promise<void>,\n UseRequestResponse<AwaitedReturn<T>>\n];\n\n/**\n * Provides an API to statefully interact with promises. This hook\n * prevents state updates if promise has not resolved before component unmounts.\n * It will return a tuple with a request() function, and an object representing the state\n */\nexport const useRequest = <T extends PromiseFn>(\n requestFn: T,\n options: UseRequestOptions<AwaitedReturn<T>> = {}\n): UseRequestReturn<T> => {\n const { initialValue, onSuccess, onError } = options;\n\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState<AwaitedReturn<T> | undefined>(initialValue);\n const [error, setError] = useState<Error | undefined>();\n\n const mountedRef = useRef(false);\n\n useEffect(() => {\n mountedRef.current = true;\n\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const statefulFetch = useCallback(\n async (...args: Parameters<T>): Promise<void> => {\n if (!mountedRef.current) return;\n\n setLoading(true);\n setError(undefined);\n\n try {\n const res = await requestFn(...args);\n onSuccess?.(res);\n\n if (mountedRef.current) {\n setData(res);\n setLoading(false);\n }\n } catch (e: any) {\n console.error(e);\n onError?.(e);\n\n if (mountedRef.current) {\n setData(initialValue);\n setError(e);\n setLoading(false);\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [onError, onSuccess]\n );\n\n return useMemo(\n () => [\n statefulFetch,\n {\n data,\n loading,\n error,\n },\n ],\n [statefulFetch, data, loading, error]\n );\n};\n","import { chakra, HTMLChakraProps, forwardRef } from \"@chakra-ui/react\";\n\nexport interface FormProps extends HTMLChakraProps<\"form\"> {}\n\nexport const Form = forwardRef<FormProps, \"form\">((props, ref) => (\n <chakra.form {...props} ref={ref} />\n));\n\nForm.displayName = \"Form\";\n","import type { MouseEventHandler } from \"react\";\n\nexport interface ExternalLinkPromptOptions {\n href?: string;\n onClick?: MouseEventHandler<HTMLAnchorElement>;\n}\n\nexport type ExternalLinkPrompt = ({\n href,\n onClick,\n}: ExternalLinkPromptOptions) => typeof onClick;\n\nexport const PREFERS_WARN_ON_EXTERNAL_LINK_CLICK =\n \"prefersWarnOnExternalLinkClick\";\n","import { ExternalLinkIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Checkbox,\n Modal,\n ModalBody,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n Text,\n Tooltip,\n} from \"@chakra-ui/react\";\nimport {\n ChangeEventHandler,\n FunctionComponent,\n MouseEventHandler,\n useState,\n} from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\nimport {\n ExternalLinkPromptOptions,\n PREFERS_WARN_ON_EXTERNAL_LINK_CLICK,\n} from \"./constants\";\n\nexport interface ExternalLinkWarningModalProps\n extends ExternalLinkPromptOptions {\n isOpen: boolean;\n onClose: () => void;\n setShouldWarn: (shouldWarn: boolean) => void;\n}\n\nexport const ExternalLinkWarningModal: FunctionComponent<ExternalLinkWarningModalProps> =\n ({ href, isOpen, onClick, onClose, setShouldWarn }) => {\n // Track a final state for showing warnings that will only be updated if a user chooses to proceed\n const [finalShouldWarn, setFinalShouldWarn] = useState(true);\n\n // Update intermediate state when preference checkmark is updated\n const onPreferenceUpdated: ChangeEventHandler<HTMLInputElement> = (e) => {\n const shouldWarn = !e.target.checked;\n setFinalShouldWarn(shouldWarn);\n };\n\n const onCancel = () => {\n // If user cancelled the navigation, reset final warning state\n setFinalShouldWarn(true);\n onClose();\n };\n\n const onProceed: MouseEventHandler<HTMLAnchorElement> = (e) => {\n // If a user decided to not show warnings in the future, update localStorage & state to reflect their decision\n if (!finalShouldWarn) {\n setShouldWarn(finalShouldWarn);\n\n try {\n localStorage.setItem(\n PREFERS_WARN_ON_EXTERNAL_LINK_CLICK,\n JSON.stringify(finalShouldWarn)\n );\n } catch {}\n }\n\n onClick?.(e);\n onClose();\n };\n\n return (\n <Modal closeOnOverlayClick={false} isOpen={isOpen} onClose={onClose}>\n <ModalOverlay>\n <ModalContent color=\"blue.800\">\n <ModalHeader>Confirm</ModalHeader>\n <ModalBody>\n <Text fontSize=\"lg\" mb={2}>\n This link is taking you to an external site\n </Text>\n <Text\n bg=\"gray.100\"\n borderRadius=\"sm\"\n color=\"blue.500\"\n fontSize=\"sm\"\n mb={4}\n p={1}\n >\n {href}\n </Text>\n <Checkbox onChange={onPreferenceUpdated}>\n Do not show this warning again.\n </Checkbox>\n </ModalBody>\n <ModalFooter>\n <Button onClick={onCancel} variant=\"ghost\">\n Cancel\n </Button>\n\n <Tooltip hasArrow label={href} placement=\"top\">\n <ExternalLink\n hasIcon={false}\n hasWarning={false}\n href={href}\n noFollow\n onClick={onProceed}\n >\n <Button\n colorScheme=\"blue\"\n ml={4}\n rightIcon={<ExternalLinkIcon />}\n tabIndex={0}\n variant=\"ghost\"\n >\n Proceed\n </Button>\n </ExternalLink>\n </Tooltip>\n </ModalFooter>\n </ModalContent>\n </ModalOverlay>\n </Modal>\n );\n };\n","import { useDisclosure } from \"@chakra-ui/react\";\nimport {\n useContext,\n useState,\n createContext,\n FunctionComponent,\n MouseEventHandler,\n useCallback,\n} from \"react\";\nimport {\n PREFERS_WARN_ON_EXTERNAL_LINK_CLICK,\n ExternalLinkPrompt,\n ExternalLinkPromptOptions,\n} from \"./constants\";\nimport { ExternalLinkWarningModal } from \"./ExternalLinkWarningModal\";\n\nconst ExternalLinkWarningContext = createContext<ExternalLinkPrompt>(\n ({ onClick }) => onClick\n);\n\nexport const useExternalLinkWarning = () =>\n useContext(ExternalLinkWarningContext);\n\nexport const ExternalLinkWarningProvider: FunctionComponent = ({\n children,\n}) => {\n const [modalOption, setModalOptions] =\n useState<ExternalLinkPromptOptions | null>(null);\n\n const { isOpen, onOpen, onClose } = useDisclosure({\n // Reset the modal options when closed\n onClose: () => {\n setModalOptions(null);\n },\n });\n\n // Determines initial state from localStorage. If no value is found, default to showing warning\n const [shouldWarn, setShouldWarn] = useState(() => {\n try {\n const saved =\n localStorage.getItem(PREFERS_WARN_ON_EXTERNAL_LINK_CLICK) ?? \"true\";\n return JSON.parse(saved);\n } catch {\n return true;\n }\n });\n\n // Takes in an href & onClick to set options for modal. If it should warn the user, it will wrap the onClick\n // With additional logic to show the modal\n const withPrompt = useCallback<ExternalLinkPrompt>(\n ({ href, onClick }) => {\n if (!shouldWarn) return onClick;\n\n const handler: MouseEventHandler<HTMLAnchorElement> = (e) => {\n setModalOptions({ href, onClick });\n e.preventDefault();\n onOpen();\n };\n\n return handler;\n },\n [onOpen, shouldWarn]\n );\n\n return (\n <ExternalLinkWarningContext.Provider value={withPrompt}>\n {children}\n <ExternalLinkWarningModal\n isOpen={isOpen}\n onClose={onClose}\n setShouldWarn={setShouldWarn}\n {...modalOption}\n />\n </ExternalLinkWarningContext.Provider>\n );\n};\n"],"sourceRoot":""}