construct-hub 0.2.1 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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":"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","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":""}