construct-hub-webapp 0.1.249 → 0.1.253

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 (65) hide show
  1. package/build/asset-manifest.json +43 -39
  2. package/build/index.html +1 -1
  3. package/build/service-worker.js +1 -1
  4. package/build/service-worker.js.map +1 -1
  5. package/build/static/js/{0.3c441159.chunk.js → 0.5ad19331.chunk.js} +2 -2
  6. package/build/static/js/{0.3c441159.chunk.js.map → 0.5ad19331.chunk.js.map} +1 -1
  7. package/build/static/js/1.70e091c8.chunk.js +2 -0
  8. package/build/static/js/1.70e091c8.chunk.js.map +1 -0
  9. package/build/static/js/10.ea2b219a.chunk.js +3 -0
  10. package/build/static/js/{11.3e7ab347.chunk.js.LICENSE.txt → 10.ea2b219a.chunk.js.LICENSE.txt} +0 -0
  11. package/build/static/js/10.ea2b219a.chunk.js.map +1 -0
  12. package/build/static/js/{10.5038f4e4.chunk.js → 11.aeb3d166.chunk.js} +2 -2
  13. package/build/static/js/{10.5038f4e4.chunk.js.map → 11.aeb3d166.chunk.js.map} +1 -1
  14. package/build/static/js/12.02a3d0a7.chunk.js +2 -0
  15. package/build/static/js/12.02a3d0a7.chunk.js.map +1 -0
  16. package/build/static/js/13.ac190679.chunk.js +2 -0
  17. package/build/static/js/13.ac190679.chunk.js.map +1 -0
  18. package/build/static/js/{12.180c2643.chunk.js → 14.8e810438.chunk.js} +2 -2
  19. package/build/static/js/{12.180c2643.chunk.js.map → 14.8e810438.chunk.js.map} +1 -1
  20. package/build/static/js/{13.51138a32.chunk.js → 15.6688232e.chunk.js} +2 -2
  21. package/build/static/js/{13.51138a32.chunk.js.map → 15.6688232e.chunk.js.map} +1 -1
  22. package/build/static/js/{14.04d06b74.chunk.js → 16.210e0dab.chunk.js} +3 -3
  23. package/build/static/js/{14.04d06b74.chunk.js.LICENSE.txt → 16.210e0dab.chunk.js.LICENSE.txt} +0 -0
  24. package/build/static/js/{14.04d06b74.chunk.js.map → 16.210e0dab.chunk.js.map} +1 -1
  25. package/build/static/js/{15.a6d03254.chunk.js → 17.2638b83f.chunk.js} +2 -2
  26. package/build/static/js/{15.a6d03254.chunk.js.map → 17.2638b83f.chunk.js.map} +1 -1
  27. package/build/static/js/2.e24744b9.chunk.js +2 -0
  28. package/build/static/js/2.e24744b9.chunk.js.map +1 -0
  29. package/build/static/js/5.2724fff8.chunk.js +3 -0
  30. package/build/static/js/{3.c48117e3.chunk.js.LICENSE.txt → 5.2724fff8.chunk.js.LICENSE.txt} +0 -0
  31. package/build/static/js/{3.c48117e3.chunk.js.map → 5.2724fff8.chunk.js.map} +1 -1
  32. package/build/static/js/6.9a3e7114.chunk.js +3 -0
  33. package/build/static/js/{4.07f80d65.chunk.js.LICENSE.txt → 6.9a3e7114.chunk.js.LICENSE.txt} +0 -0
  34. package/build/static/js/6.9a3e7114.chunk.js.map +1 -0
  35. package/build/static/js/7.1c9ccb21.chunk.js +2 -0
  36. package/build/static/js/7.1c9ccb21.chunk.js.map +1 -0
  37. package/build/static/js/8.fbb8172d.chunk.js +2 -0
  38. package/build/static/js/8.fbb8172d.chunk.js.map +1 -0
  39. package/build/static/js/9.f72a1066.chunk.js +2 -0
  40. package/build/static/js/9.f72a1066.chunk.js.map +1 -0
  41. package/build/static/js/main.f194ce06.chunk.js +2 -0
  42. package/build/static/js/main.f194ce06.chunk.js.map +1 -0
  43. package/build/static/js/runtime-main.c2e7c59e.js +2 -0
  44. package/build/static/js/runtime-main.c2e7c59e.js.map +1 -0
  45. package/cypress/integration/search.spec.ts +0 -20
  46. package/package.json +4 -4
  47. package/build/static/js/11.3e7ab347.chunk.js +0 -3
  48. package/build/static/js/11.3e7ab347.chunk.js.map +0 -1
  49. package/build/static/js/3.c48117e3.chunk.js +0 -3
  50. package/build/static/js/4.07f80d65.chunk.js +0 -3
  51. package/build/static/js/4.07f80d65.chunk.js.map +0 -1
  52. package/build/static/js/5.8a1668dc.chunk.js +0 -2
  53. package/build/static/js/5.8a1668dc.chunk.js.map +0 -1
  54. package/build/static/js/6.11aee62c.chunk.js +0 -2
  55. package/build/static/js/6.11aee62c.chunk.js.map +0 -1
  56. package/build/static/js/7.c53ed1ae.chunk.js +0 -2
  57. package/build/static/js/7.c53ed1ae.chunk.js.map +0 -1
  58. package/build/static/js/8.0c7361ec.chunk.js +0 -2
  59. package/build/static/js/8.0c7361ec.chunk.js.map +0 -1
  60. package/build/static/js/9.6620eb5b.chunk.js +0 -2
  61. package/build/static/js/9.6620eb5b.chunk.js.map +0 -1
  62. package/build/static/js/main.809e79d6.chunk.js +0 -2
  63. package/build/static/js/main.809e79d6.chunk.js.map +0 -1
  64. package/build/static/js/runtime-main.1cbbf81f.js +0 -2
  65. package/build/static/js/runtime-main.1cbbf81f.js.map +0 -1
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[5],{232:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(0),c=n(241),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(112),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 d=n.suffix,u=void 0===d||d,b=n.title,j=n.description,h=u?"".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]})}},248:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(22),r=n(18),o=n(190),i=n(298),s=n(1),l=["sources"],d=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))]})}));d.displayName="Picture"},260:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(22),r=n(299),o=n(56),i=n(68),s=n(1),l=["children","language","value","label","zIndex"],d=function(e){var t=e.children,n=e.language,d=e.value,u=e.label,b=void 0===u?d:u,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(d),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})}))})}},297:function(e,t,n){"use strict";n.r(t),n.d(t,"NotFound",(function(){return u})),n.d(t,"default",(function(){return u}));var a=n(215),c=n(205),r=n(149),o=n(24),i=n(232),s=n(248),l=n(1),d={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"},u=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:d.optimal,src:d.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"})]})]})})}},302:function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return L}));var a,c=n(4),r=n(190),o=n(361),i=n.n(o),s=n(457),l=n.n(s),d=n(490),u=n.n(d),b=n(579),j=n(537),h=n.n(j),f=n(577),O=n(581),p=n(350),m=n(572),x=n(573),v=n(574),g=n(575),y=n(1),w={a:g.a,blockquote:g.b,caption:v.b,code:f.a,em:g.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:g.d,pre:g.e,sup:g.f,table:v.a,tbody:v.c,td:v.d,tfoot:v.e,th:v.f,thead:v.g,tr:v.h,ul:x.c},k=n(341);k.attributes.span=(null!==(a=k.attributes.span)&&void 0!==a?a:[]).concat(["dataHeadingTitle","dataHeadingId"]);var S=[[l.a],[u.a,k]],C=[h.a,b.a],I=/^(?:(?:git@)?github\.com:|(?:https?:\/\/)github\.com\/)([^/]+)\/([^/]+)(?:\.git)?$/,L=function(t){var n=t.children,a=function(e){var t=e.type,n=e.url;if("git"===t){var a=I.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(357).Buffer)},350:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(6),c=n(207),r=n(1),o=function(e){return Object(r.jsx)(c.a,Object(a.a)({my:10},e))}},572:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(6),c=n(298),r=n(1),o=function(e){return Object(r.jsx)(c.a,Object(a.a)({display:"inline-block"},e))}},573: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(213),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})}},574:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(190),c=n(247);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})})}},575: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(200),i=n(190),s=n(195),l=n(57),d=n(1),u=["children","href"],b=function(e){var t=e.children,n=e.href,a=Object(r.a)(e,u),i=o.a;try{if(n&&n.startsWith("http"))if(new URL(n).hostname!==window.location.hostname){i=function(e){return Object(d.jsx)(l.a,Object(c.a)({},e))}}}catch(s){i=o.a}return Object(d.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(d.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(d.jsx)(i.a,{as:"em",color:"blue.500",fontStyle:"normal",fontWeight:"semibold",children:t})},f=function(e){var t=e.children;return Object(d.jsx)(s.a,{children:t})},O=function(e){var t=e.children;return Object(d.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(d.jsx)(i.a,{as:"sup",color:n,ml:2,top:-1,children:t})}},577:function(e,t,n){"use strict";n.d(t,"a",(function(){return y}));var a=n(587),c=n(0),r=n(6),o=n(190),i=n(580),s=n(569),l=n(205),d=n(22),u=n(585),b=n(586),j=n(18),h=n(583),f=n(203),O=n(1),p=["value"],m=Object(j.a)((function(e,t){var n=e.value,a=Object(d.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)(u.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)}))})})]})},v=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})})]})},g=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)(v,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)(g,{code:i,language:o})}},581:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(211),c=n(0),r=n(570),o=n.n(r),i=n(68),s=n(350),l=n(1),d=function(e){var t,n,r=e.level,d=e.children,u=["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(d),"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(d).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:u,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:d})}),p&&Object(l.jsx)(s.a,{mb:b,mt:0,sx:{"& + hr":{display:"none"}}})]})}},591: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(20),c=n(297),r=n(4),o=n(229),i=n(190),s=n(0),l=n(33),d=n.n(l),u=n(50),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(u.a)(d.a.mark((function e(t,n,a){var c,r;return d.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(u.a)(d.a.mark((function e(t,n,a,c,r){var o,i,s,l,u;return d.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",(u=s.headers.get("Content-Type"))&&u.includes(l)){e.next=11;break}throw new Error("Invalid content type: ".concat(u,". 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(u.a)(d.a.mark((function e(t,n,a){var c,r,o;return d.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(232),v=n(25),g=n(88),y=n(70),w=n(115),k=n(90),S=n(215),C=n(197),I=n(205),L=n(145),T=n(207),R=n(113),F=n(19),A=n(203),P=n(120),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 v.a.indexOf(e)-v.a.indexOf(t)})).map((function(e){var t=!v.e.has(e),c=e===n,r=v.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(v.a),W=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:{})),[v.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)}))})},N=n(200),B=n(582),H=n(210),U=n(220),D=n(149),q=n(68),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(213),X=n(195),J=n(57),V=n(6),Y=n(22),$=n(18),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)(J.a,Object(V.a)(Object(V.a)({href:c,ref:t},a),{},{children:n}))}));ee.displayName="LicenseLink";var te=n(119),ne=n(56),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,d=null===t||void 0===t?void 0:t.license,u=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)(J.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)(J.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)(J.a,{href:f.url,children:f.hostname});b.push(Object(E.jsxs)(E.Fragment,{children:["Repository: ",O]}))}}if(d&&d in Q){var p=Object(E.jsx)(ee,{license:d});b.push(Object(E.jsxs)(E.Fragment,{children:["License: ",p]}))}if(u){var m=Object(E.jsx)(J.a,{href:u,children:new URL(u).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)(I.a,{direction:"column",textAlign:{base:"center",md:"initial"},children:[Object(E.jsx)(N.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(211),oe=n(260),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)(I.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)(I.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(585),le=n(586),de=n(204),ue=n(583),be=n(198),je=n(138),he=n(584),fe=n(593),Oe=n(587),pe=n(37),me={borderRadius:"md",color:"white",variant:"link"},xe={h:4,w:4},ve=Object(pe.a)("code-popover",["close","content","code","copy","header","trigger"]),ge=function(e){var t=e.code,n=e.header,a=e.trigger,c=Object(ue.a)(t),o=c.hasCopied,i=c.onCopy,l=Object(be.a)(),d=Object(s.useRef)(null),u=Object(je.b)("breakpoints","md"),b=Object(he.a)("(min-width: ".concat(u,")")),j=Object(r.a)(b,1)[0];return Object(E.jsxs)(fe.a,Object(V.a)(Object(V.a)({initialFocusRef:d,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":ve.content,children:[Object(E.jsxs)(fe.d,{align:"center",as:I.a,color:"white","data-testid":ve.header,justify:"space-between",pr:0,children:[Object(E.jsx)(X.a,{children:n}),Object(E.jsxs)(I.a,{align:"center",children:[Object(E.jsx)(A.a,Object(V.a)({"aria-label":"copy-text-icon","data-testid":ve.copy,icon:o?Object(E.jsx)(se.a,Object(V.a)(Object(V.a)({},xe),{},{color:"green.200"})):Object(E.jsx)(le.a,Object(V.a)({},xe)),onClick:i,ref:d},me)),Object(E.jsx)(A.a,Object(V.a)({"aria-label":"close-icon","data-testid":ve.close,icon:Object(E.jsx)(de.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":ve.code,overflow:"auto",variant:"code-block",children:t})]})]}))},ye=Object($.a)((function(e,t){return Object(E.jsx)(D.a,Object(V.a)(Object(V.a)({color:"white",colorScheme:"blue","data-testid":ve.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=v.b[a],o=function(e){var t=e.language,n=e.assembly,a=n.version;if(t===v.d.TypeScript){var c=n.name;return"npm install ".concat(c,"@").concat(a)}if(t===v.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)}if(t===v.d.Java){var s,l,d,u,b,j,h=null===(s=n.targets)||void 0===s||null===(l=s.java)||void 0===l||null===(d=l.maven)||void 0===d?void 0:d.groupId,f=null===(u=n.targets)||void 0===u||null===(b=u.java)||void 0===b||null===(j=b.maven)||void 0===j?void 0:j.artifactId;if(!h||!f)return;return["// add this to your pom.xml","<dependency>"," <groupId>".concat(h,"</groupId>")," <artifactId>".concat(f,"</artifactId>")," <version>".concat(a,"</version>"),"</dependency>"].join("\n")}}({language:a,assembly:t}),i=!o,s=i?"Unsupported":"Install",l=Object(E.jsx)(ye,{disabled:i,children:s});return Object(E.jsx)(ge,{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)(I.a,{as:R.a,direction:"column",children:[Object(E.jsxs)(L.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)(T.a,{display:{base:"none",md:"initial"},orientation:"vertical"}),Object(E.jsx)(T.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)(W,{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(302),Ce=n(272),Ie={color:"gray.900",h:4,w:4},Le=function e(t){var n,c=t.children,r=t.display,o=t.url,l=t.onOpen,d=Object(a.h)(),u=d.pathname,b=d.hash,j=o.startsWith("#"),h=j?b===o:u===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?N.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(V.a)(Object(V.a)({},t),{},{key:n,onOpen:f.onOpen}))}))}),[c,f.onOpen]);return Object(E.jsxs)(I.a,{direction:"column",children:[Object(E.jsxs)(I.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(V.a)({},Ie)):Object(E.jsx)(Ce.a,Object(V.a)({},Ie)),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})]})},Te=function(e){var t=e.items;return Object(E.jsx)(I.a,{direction:"column",maxWidth:"100%",children:t.map((function(e,t){return Object(s.createElement)(Le,Object(V.a)(Object(V.a)({},e),{},{key:t,onOpen:void 0}))}))})},Re=n(588),Fe=n(45),Ae=n(137),Pe=n(214),Ee=n(353),ze=n(354),Me=n(224),We=n(84),Ne=n(136),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],d=i[1];return Object(Ne.a)(l,{onChange:a}),Object(E.jsx)(We.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 d(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),d=Object(a.g)().push,u=Object(s.useCallback)((function(e){c(),d(e)}),[c,d]),b=Object(s.useCallback)((function(e){if(e.preventDefault(),o.length){var t=o[0].to;u(t)}}),[u,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)(T.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 u(n)}},t)}))})]})]})})})},Ue=function(e){var t,n=e.assembly,c=Object(a.h)().pathname,i=Object(a.g)().push,l=Object(w.a)(),d=Object.keys(null!==(t=null===n||void 0===n?void 0:n.submodules)&&void 0!==t?t:{}),u=Object(be.a)(),j=u.isOpen,h=u.onOpen,f=u.onClose,O=l.get(b.b.SUBMODULE),p=O?"Submodule: ".concat(O):"Choose Submodule",m=Object(s.useState)(""),x=Object(r.a)(m,2),v=x[0],g=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=d;return v&&(e=e.filter((function(e){return e.toLowerCase().includes(v.toLowerCase())}))),e.map((function(e){var t=e.split(".")[1];return{name:t,to:y(t)}}))}),[d,v,y]);return 0===d.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)(T.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:v,isOpen:j,onClose:f,onInputChange:g,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),d=l[0],u=l[1];Object(s.useEffect)((function(){var e=Object(F.a)(document.querySelectorAll("[data-heading-id][data-heading-title][data-heading-level]")).reduce(De,[]);u(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)(L.a,{bg:"white",columnGap:4,h:"100%",templateColumns:{base:"1fr",md:"1fr 3fr"},width:"100%",children:[Object(E.jsxs)(I.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)(I.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)(Te,{items:d})})]}),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)(J.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=v.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."]})},Je=function(){var e,t,n,l,d,u=Object(a.i)(),j=u.name,h=u.scope,f=u.version,S=Object(k.a)(p),C=Object(r.a)(S,2),I=C[0],L=C[1],T=Object(k.a)(O),R=Object(r.a)(T,2),F=R[0],A=R[1],P=Object(k.a)(m),z=Object(r.a)(P,2),M=z[0],W=z[1],N=Object(g.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(){I(j,f,U,h,D)}),[j,h,f,U,D,I]),A.error)return Object(E.jsx)(c.NotFound,{});var _=L.error||A.error,X=!L.loading&&!A.loading&&L.data&&A.data,J=U===v.d.TypeScript||A.loading||A.error||null!=(null===(l=A.data)||void 0===l||null===(d=l.targets)||void 0===d?void 0:d[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:N,metadata:W,version:f})}),J?_?Object(E.jsx)(_e,{language:U}):X&&Object(E.jsx)(Ge,{assembly:A.data,markdown:L.data}):Object(E.jsx)(Xe,{language:U})]})})},Ve=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(Ve.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)(Je,{})}),Object(E.jsx)(a.b,{path:"*",children:Object(E.jsx)(c.NotFound,{})})]})}}}]);
2
- //# sourceMappingURL=5.8a1668dc.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","components/PackageTag/PackageTag.tsx","views/NotFound/NotFound.tsx","components/Markdown/Markdown.tsx","components/Markdown/Hr.tsx","components/Markdown/Img.tsx","components/Markdown/List.tsx","components/Markdown/Table.tsx","components/Markdown/Text.tsx","components/CopyButton/CopyButton.tsx","components/Code/MultiLineRenderer.tsx","components/Code/SingleLineRenderer.tsx","components/Code/Code.tsx","components/Markdown/Code.tsx","components/Markdown/Headings.tsx","util/sanitize-anchor.ts","api/package/util.ts","api/package/assembly.ts","api/package/docs.ts","api/package/metadata.ts","components/LanguageBar/LanguageBar.tsx","views/Package/components/LanguageSelection/LanguageSelection.tsx","views/Package/components/DependencyDropdown/DependencyDropdown.tsx","components/LicenseLink/constants.ts","components/LicenseLink/LicenseLink.tsx","views/Package/components/OperatorArea/Details.tsx","views/Package/components/OperatorArea/OperatorArea.tsx","views/Package/components/PackageHeader/PackageHeader.tsx","components/CodePopover/CodePopover.tsx","components/CodePopover/CodePopoverTrigger.tsx","views/Package/components/UseConstruct/UseConstruct.tsx","views/Package/components/PackageDetails/PackageDetails.tsx","components/NavTree/NavTree.tsx","views/Package/components/ChooseSubmodule/SearchInput.tsx","views/Package/components/ChooseSubmodule/SearchModal.tsx","views/Package/components/ChooseSubmodule/ChooseSubmodule.tsx","views/Package/components/PackageDocs/PackageDocs.tsx","views/Package/components/PackageDocsError/PackageDocsError.tsx","views/Package/components/PackageDocsUnsupported/PackageDocsUnsupported.tsx","views/Package/Package.tsx","views/PackageLatest/PackageLatest.tsx","views/Packages/Packages.tsx"],"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","PackageTag","language","value","label","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","bgSources","optimal","fallback","NotFound","h","position","w","alt","inset","src","align","direction","justify","Link","colorScheme","components","a","A","blockquote","Blockquote","caption","TableCaption","code","Code","em","Em","h1","Headings","h2","h3","h4","h5","h6","hr","Hr","img","Img","li","Li","ol","Ol","p","P","pre","Pre","sup","Sup","table","Table","tbody","Tbody","td","Td","tfoot","Tfoot","th","Th","thead","Thead","tr","Tr","ul","Ul","ghSchema","require","attributes","span","concat","rehypePlugins","rehypeRaw","rehypeSanitize","remarkPlugins","remarkGfm","remarkEmoji","GITHUB_REPO_REGEX","Markdown","repoConfig","type","url","match","exec","owner","repo","parseGitHubRepository","repository","toAbsoluteUri","githubPrefix","githubSuffix","ReactMarkdown","uriTransformer","uri","first","includes","replace","Buffer","byteLength","substring","lastIndexOf","join","px","sx","mb","lineHeight","transformImageUri","transformLinkUri","my","display","mr","fontStyle","fontSize","color","maxW","overflowX","variant","href","linkProps","Component","startsWith","URL","hostname","window","location","bg","borderLeft","borderLeftColor","borderRadius","wordBreak","fontWeight","undefined","text","Array","isArray","ml","top","CopyButton","btnProps","useClipboard","hasCopied","onCopy","icon","Check","Copy","minW","onClick","MultiLineRenderer","tokens","getLineProps","getTokenProps","py","line","i","key","token","SingleLineRenderer","defaultProps","theme","nightOwlLight","border","boxShadow","className","overflow","style","length","inline","borderColor","Children","toArray","reduce","accum","child","trim","level","size","marginY","elem","dataElement","DOMParser","parseFromString","ReactDOMServer","renderToStaticMarkup","querySelector","dataset","headingTitle","id","headingId","toLowerCase","isH3OrLarger","mt","getFullPackageName","scope","getAssetsPath","version","prefix","API_PATHS","PACKAGES_PREFIX","body","sanitizeVersion","ver","sanitized","fetchAssembly","assemblyPath","ASSEMBLY_SUFFIX","fetch","response","ok","Error","statusText","json","fetchMarkdown","submodule","docsSuffix","markdownPath","expectedContentType","contentType","headers","get","fetchMetadata","sanitizedVersion","metadataPath","METADATA_SUFFIX","LanguageBar","targetLanguages","selectedLanguage","setSelectedLanguage","spacing","sort","left","right","LANGUAGES","indexOf","isDisabled","TEMP_SUPPORTED_LANGUAGES","has","isSelected","LangIcon","LANGUAGE_RENDER_MAP","LanguageSupportTooltip","cursor","disabled","height","width","languageSet","Set","LanguageSelection","assembly","useLanguage","updateSaved","updateUrl","setLanguage","targets","Object","keys","Language","TypeScript","filter","target","DependencyDropdown","dependencies","depEntries","entries","Button","leftIcon","rightIcon","ChevronDown","OS_ORG_LINK","LICENSE_LINKS","MIT","LicenseLink","license","ExternalLink","Details","linksConfig","metadata","detailItems","useMemo","date","links","username","author","authorUrl","registry","npm","items","publishDate","Time","Date","format","push","forEach","displayText","packageLinks","link","getRepoUrlAndHost","repoLink","licenseLink","registryLink","slice","detail","listStyleType","OperatorArea","textAlign","base","md","encodeURIComponent","m","PackageHeader","tags","currentLanguage","maxWidth","Boolean","tag","iconButtonProps","iconProps","testIds","createTestIds","CodePopover","header","trigger","disclosure","useDisclosure","focusRef","useRef","mdBreakpoint","useToken","useMediaQuery","isMd","initialFocusRef","isLazy","placement","Flex","pr","copy","close","Close","onClose","borderTopLeftRadius","borderTopRightRadius","CodePopoverTrigger","UseConstruct","LANGUAGE_NAME_MAP","packageName","Python","python","distName","Java","groupId","java","maven","artifactId","getCodeSample","PackageDetails","config","loading","data","Card","gap","templateColumns","templateRows","keywords","orientation","minH","NavItem","onOpen","useLocation","pathname","hash","isHashUrl","linkIsActive","defaultIsOpen","showToggle","showChildren","isOpen","LinkComponent","nestedItems","item","ChevronRight","onToggle","pl","textOverflow","whiteSpace","_before","bottom","NavTree","SearchInput","inputRef","onChange","onSubmit","useState","inputValue","setInputValue","useDebounce","Form","Search","e","placeholder","SearchModal","onInputChange","submodules","useHistory","navigate","useCallback","preventDefault","mx","pb","maxH","role","tabIndex","SearchItem","ChooseSubmodule","useQueryParams","allSubmodules","currentSubmodule","QUERY_PARAMS","SUBMODULE","submoduleText","setFilter","getUrl","submoduleName","params","URLSearchParams","toString","set","results","fqn","split","ArrowBack","lang","LANGUAGE","flexGrow","appendItem","itemTree","HTMLElement","headingLevel","innerText","parseInt","last","TOP_OFFSET","PackageDocs","markdown","navItems","setNavItems","tree","document","querySelectorAll","scrollIntoView","columnGap","alignSelf","borderRight","borderRightColor","maxHeight","borderBottom","overflowY","scrollMarginTop","PackageDocsError","issueLink","PackageDocsUnsupported","languageName","Package","useParams","useRequest","requestMarkdown","markdownResponse","requestAssembly","assemblyResponse","requestMetadata","metadataResponse","configResponse","useConfig","q","pageTitle","pageDescription","error","hasError","hasDocs","isSupported","pt","extractMajor","buildRedirectUrl","catalog","pkg","packages","p1","p2","mv1","localeCompare","findPackage","PackageLatest","useCatalog","nameRegexp","scopeRegexp","Packages","path","useRouteMatch","exact"],"mappings":"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","file":"static/js/5.8a1668dc.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 { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\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 { Box } from \"@chakra-ui/react\";\nimport { Assembly } from \"@jsii/spec\";\nimport { FunctionComponent } from \"react\";\nimport ReactMarkdown, {\n PluggableList,\n ReactMarkdownOptions,\n} from \"react-markdown\";\nimport type { TableCellComponent } from \"react-markdown/src/ast-to-react\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeSanitize from \"rehype-sanitize\";\nimport remarkEmoji from \"remark-emoji\";\nimport remarkGfm from \"remark-gfm\";\nimport { Code } from \"./Code\";\nimport { Headings } from \"./Headings\";\nimport { Hr } from \"./Hr\";\nimport { Img } from \"./Img\";\nimport { Ul, Ol, Li } from \"./List\";\nimport { Table, Thead, Tbody, Tfoot, Tr, Th, Td, TableCaption } from \"./Table\";\nimport { A, Blockquote, Em, P, Pre, Sup } from \"./Text\";\n\nconst ONE_MEGABYTE = 1024 * 1024;\n\nconst components: ReactMarkdownOptions[\"components\"] = {\n a: A,\n blockquote: Blockquote,\n caption: TableCaption,\n code: Code,\n em: Em,\n h1: Headings,\n h2: Headings,\n h3: Headings,\n h4: Headings,\n h5: Headings,\n h6: Headings,\n hr: Hr,\n img: Img,\n li: Li,\n ol: Ol,\n p: P,\n pre: Pre,\n sup: Sup,\n table: Table,\n tbody: Tbody,\n td: Td as TableCellComponent, // The react-markdown component has a tighter signature than the one from @chakra-ui\n tfoot: Tfoot,\n th: Th as TableCellComponent, // The react-markdown component has a tighter signature than the one from @chakra-ui\n thead: Thead,\n tr: Tr,\n ul: Ul,\n};\n\n// see https://github.com/rehypejs/rehype-sanitize#use\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nvar ghSchema = require(\"hast-util-sanitize/lib/github\");\n\n// jsii-docgen adds these attributes to <span> elements embedded inside\n// headings in order to configure custom anchor ids.\n// tell rehype not to strip those out.\nghSchema.attributes.span = (ghSchema.attributes.span ?? []).concat([\n \"dataHeadingTitle\",\n \"dataHeadingId\",\n]);\n\n// Note - the default schema for rehypeSanitize is GitHub-style, which is what we need!\nconst rehypePlugins: PluggableList = [\n [rehypeRaw],\n // ALWAYS keep rehypeSanitize LAST!\n [rehypeSanitize, ghSchema],\n];\nconst remarkPlugins = [remarkGfm, remarkEmoji];\n\nconst GITHUB_REPO_REGEX =\n /^(?:(?:git@)?github\\.com:|(?:https?:\\/\\/)github\\.com\\/)([^/]+)\\/([^/]+)(?:\\.git)?$/;\n\n/**\n * Parses out a GitHub repository owner and repo name from the `repository`\n * configuration of a jsii Assembly.\n *\n * @returns the `owner` and `repo` for the configured repository, if it looks\n * like a GitHub repository URL.\n */\nconst parseGitHubRepository = ({ type, url }: Assembly[\"repository\"]) => {\n if (type !== \"git\") {\n return undefined;\n }\n // git@github.com:<owner>/<repo>.git\n // https://github.com/<owner>/<repo>.git\n const match = GITHUB_REPO_REGEX.exec(url);\n if (match == null) {\n return undefined;\n }\n\n const [, owner, repo] = match;\n return { owner, repo };\n};\n\nexport const Markdown: FunctionComponent<{\n children: string;\n repository: Assembly[\"repository\"];\n}> = ({ children, repository }) => {\n const repoConfig = parseGitHubRepository(repository);\n\n const toAbsoluteUri = (githubPrefix: string, githubSuffix = \"HEAD\") =>\n repoConfig == null\n ? ReactMarkdown.uriTransformer\n : (uri: string) => {\n const url = ReactMarkdown.uriTransformer(uri);\n\n // If this is an anchor or absolute URL, return it.\n const [first] = url;\n if (first === \"#\" || first === \"/\") {\n return url;\n }\n\n // If there is a protocol element, then return the URL as-is.\n if (url.includes(\"://\")) {\n return url;\n }\n\n const owner = repoConfig.owner;\n const repo = repoConfig.repo.replace(/\\.git$/, \"\");\n return `https://${githubPrefix}/${owner}/${repo}/${githubSuffix}/${url}`;\n };\n\n const byteLength = Buffer.byteLength(children);\n if (byteLength > ONE_MEGABYTE) {\n children = children.substring(0, children.lastIndexOf(\"# API Reference\"));\n children = [\n children,\n \"# API Reference\",\n \"The API Reference for this package could not be rendered.\",\n \"If this issue persists, please let us know by creating an [issue](https://github.com/cdklabs/construct-hub-webapp/issues/new)\",\n ].join(\"\\n\");\n }\n return (\n <Box\n px={8}\n sx={{\n \"& > *\": { mb: 8 },\n \"& > p\": { lineHeight: \"taller\" },\n }}\n >\n <ReactMarkdown\n components={components}\n rehypePlugins={rehypePlugins}\n remarkPlugins={remarkPlugins}\n transformImageUri={toAbsoluteUri(\"raw.githubusercontent.com\")}\n transformLinkUri={toAbsoluteUri(\"github.com\", \"blob/HEAD\")}\n >\n {children}\n </ReactMarkdown>\n </Box>\n );\n};\n","import { Divider, DividerProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const Hr: FunctionComponent<DividerProps> = (props) => (\n <Divider my={10} {...props} />\n);\n","import { Image, ImageProps } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport const Img: FunctionComponent<ImageProps> = (props) => (\n <Image display=\"inline-block\" {...props} />\n);\n","import { UnorderedList, OrderedList, ListItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const Ul: FunctionComponent = ({ children }) => (\n <UnorderedList>{children}</UnorderedList>\n);\n\nexport const Ol: FunctionComponent = ({ children }) => (\n <OrderedList>{children}</OrderedList>\n);\n\nexport const Li: FunctionComponent = ({ children }) => (\n <ListItem\n lineHeight=\"tall\"\n mb={2}\n sx={{\n \"em:first-of-type\": {\n mr: 2,\n fontStyle: \"italic\",\n fontSize: \"small\",\n },\n \"&::marker\": {\n color: \"blue.500\",\n },\n code: {\n fontSize: \"small\",\n },\n }}\n >\n {children}\n </ListItem>\n);\n","import {\n Box,\n Table as ChakraTable,\n Thead,\n Tbody,\n Tfoot,\n Tr,\n Th,\n Td,\n TableCaption,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nconst Table: FunctionComponent = ({ children }) => (\n <Box maxW=\"100%\" overflowX=\"auto\">\n <ChakraTable variant=\"striped\">{children}</ChakraTable>\n </Box>\n);\n\nexport { Table, Tfoot, Tbody, Td, Thead, Tr, Th, TableCaption };\n","import { Box, HTMLChakraProps, Link, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../ExternalLink\";\n\ntype AnchorComponent = FunctionComponent<HTMLChakraProps<\"a\">>;\n\nexport const A: AnchorComponent = ({ children, href, ...linkProps }) => {\n let Component: AnchorComponent = Link;\n\n try {\n if (href && href.startsWith(\"http\")) {\n const hostname = new URL(href).hostname;\n\n if (hostname !== window.location.hostname) {\n const External: AnchorComponent = (props) => (\n <ExternalLink {...props} />\n );\n\n Component = External;\n }\n }\n } catch {\n Component = Link;\n }\n\n return (\n <Component\n color=\"blue.500\"\n href={href}\n // If we are rendering an img within the link (specifically stability banners),\n // do not display the external link Icon\n sx={{ \"> img + svg\": { display: \"none\" } }}\n {...linkProps}\n >\n {children}\n </Component>\n );\n};\n\nexport const Blockquote: FunctionComponent = ({ children }) => (\n <Box\n as=\"blockquote\"\n bg=\"gray.100\"\n borderLeft=\"5px solid\"\n borderLeftColor=\"gray.200\"\n borderRadius=\"md\"\n p={2}\n wordBreak=\"break-word\"\n >\n {children}\n </Box>\n);\n\nexport const Em: FunctionComponent = ({ children }) => (\n <Box as=\"em\" color=\"blue.500\" fontStyle=\"normal\" fontWeight=\"semibold\">\n {children}\n </Box>\n);\n\nexport const P: FunctionComponent = ({ children }) => <Text>{children}</Text>;\n\nexport const Pre: FunctionComponent = ({ children }) => (\n <Box as=\"pre\">{children}</Box>\n);\n\nexport const Sup: FunctionComponent = ({ children }) => {\n let color: string | undefined = undefined;\n let text = \"\";\n\n if (Array.isArray(children)) {\n const [first] = children;\n\n if (typeof first === \"string\") {\n text = first;\n }\n }\n\n if (text === \"Required\") {\n color = \"orange.500\";\n } else if (text === \"Optional\") {\n color = \"green.500\";\n }\n\n return (\n <Box as=\"sup\" color={color} ml={2} top={-1}>\n {children}\n </Box>\n );\n};\n","import { CopyIcon, CheckIcon } from \"@chakra-ui/icons\";\nimport {\n forwardRef,\n IconButton,\n IconButtonProps,\n useClipboard,\n} from \"@chakra-ui/react\";\n\nexport interface CopyButtonProps extends Omit<IconButtonProps, \"aria-label\"> {\n // Optional since we set a default\n \"aria-label\"?: string;\n value: string;\n}\n\nexport const CopyButton = forwardRef<CopyButtonProps, \"button\">(\n ({ value, ...btnProps }, ref) => {\n const { hasCopied, onCopy } = useClipboard(value);\n\n return (\n <IconButton\n aria-label=\"Copy Button\"\n h={6}\n icon={hasCopied ? <CheckIcon color=\"green.300\" /> : <CopyIcon />}\n minW=\"auto\"\n onClick={onCopy}\n ref={ref}\n variant=\"ghost\"\n w={6}\n {...btnProps}\n />\n );\n }\n);\n\nCopyButton.displayName = \"CopyButton\";\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { CopyButton } from \"../CopyButton\";\nimport type { RendererProps } from \"./types\";\n\nexport const MultiLineRenderer: FunctionComponent<RendererProps> = ({\n code,\n tokens,\n getLineProps,\n getTokenProps,\n}) => (\n <>\n <Flex\n align=\"center\"\n bg=\"rgba(0, 124, 253, 0.15)\"\n justify=\"flex-end\"\n px={2}\n py={1}\n >\n <CopyButton _hover={{ bg: \"gray.300\" }} color=\"gray.500\" value={code} />\n </Flex>\n <Box maxW=\"100%\" overflowX=\"auto\" p={2}>\n <Box w=\"max-content\">\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line, key: i })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token, key })} />\n ))}\n </div>\n ))}\n </Box>\n </Box>\n </>\n);\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { CopyButton } from \"../CopyButton\";\nimport type { RendererProps } from \"./types\";\n\nexport const SingleLineRenderer: FunctionComponent<RendererProps> = ({\n code,\n tokens,\n getLineProps,\n getTokenProps,\n}) => (\n <Flex align=\"center\" justify=\"space-between\" p={2}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line, key: i })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token, key })} />\n ))}\n </div>\n ))}\n <Box>\n <CopyButton color=\"blue.500\" colorScheme=\"blue\" ml={4} value={code} />\n </Box>\n </Flex>\n);\n","import { Box } from \"@chakra-ui/react\";\nimport Highlight, { defaultProps, Language } from \"prism-react-renderer\";\nimport nightOwlLight from \"prism-react-renderer/themes/nightOwlLight\";\nimport { FunctionComponent } from \"react\";\nimport { MultiLineRenderer } from \"./MultiLineRenderer\";\nimport { SingleLineRenderer } from \"./SingleLineRenderer\";\n\nexport interface CodeProps {\n code: string;\n language: Language;\n}\n\nexport const Code: FunctionComponent<CodeProps> = ({ code, language }) => {\n return (\n <Highlight\n {...defaultProps}\n code={code}\n language={language}\n theme={nightOwlLight}\n >\n {(props) => (\n <Box\n as=\"pre\"\n border=\"base\"\n borderRadius=\"md\"\n boxShadow=\"base\"\n className={props.className}\n maxW=\"100%\"\n overflow=\"hidden\"\n style={props.style}\n w=\"min-content\"\n >\n {props.tokens.length > 1 ? (\n <MultiLineRenderer {...props} code={code} />\n ) : (\n <SingleLineRenderer {...props} code={code} />\n )}\n </Box>\n )}\n </Highlight>\n );\n};\n","import { Code as InlineCode } from \"@chakra-ui/react\";\nimport { Language } from \"prism-react-renderer\";\nimport { Children, FunctionComponent, ReactNode } from \"react\";\nimport { Code as BlockCode } from \"../Code\";\n\ninterface CodeProps {\n inline?: boolean;\n children: ReactNode;\n language?: Language;\n}\n\nexport const Code: FunctionComponent<CodeProps> = ({\n inline,\n children,\n language = \"typescript\",\n}) => {\n if (inline) {\n return (\n <InlineCode\n bg=\"gray.100\"\n border=\"1px solid\"\n borderColor=\"gray.100\"\n borderRadius=\"md\"\n color=\"blue.500\"\n px={2}\n py={0}\n >\n {children}\n </InlineCode>\n );\n }\n\n const code = Children.toArray(children)\n .reduce((accum: string, child): string => {\n if (typeof child === \"string\") {\n return `${accum}${child}`;\n }\n return accum;\n }, \"\")\n .trim();\n\n return <BlockCode code={code} language={language} />;\n};\n","import { Heading, As } from \"@chakra-ui/react\";\nimport { Children, FunctionComponent, ReactNode } from \"react\";\nimport ReactDOMServer from \"react-dom/server\";\nimport { sanitize } from \"../../util/sanitize-anchor\";\nimport { NavLink } from \"../NavLink\";\nimport { Hr } from \"./Hr\";\n\ninterface HeadingResolverProps {\n level: number;\n children: ReactNode;\n}\n\nexport const Headings: FunctionComponent<HeadingResolverProps> = ({\n level,\n children,\n}) => {\n const size: string = [\"2xl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"][level - 1];\n const marginY: number = [10, 10, 10, 8, 8, 8][level - 1];\n const elem = `h${level}` as As<any>;\n\n // Use DOMParser to look for data attribute for link ID\n const parser = new DOMParser();\n const doc = parser.parseFromString(\n ReactDOMServer.renderToStaticMarkup(children as React.ReactElement),\n \"text/html\"\n );\n\n const dataElement = doc.querySelector(\n \"span[data-heading-title][data-heading-id]\"\n ) as HTMLElement;\n const title =\n dataElement?.dataset.headingTitle ??\n Children.toArray(children)\n .reduce((accum: string, child): string => {\n if (typeof child === \"string\") {\n return `${accum}${child}`;\n }\n return accum;\n }, \"\")\n .trim();\n\n const id = dataElement?.dataset.headingId ?? sanitize(title);\n\n const isH3OrLarger = level < 4;\n\n return (\n <>\n <Heading\n as={elem}\n color=\"blue.800\"\n level={level}\n mb={isH3OrLarger ? 0 : level}\n mt={marginY}\n size={size}\n >\n <NavLink\n data-heading-id={id}\n data-heading-level={level}\n data-heading-title={title}\n id={id}\n replace\n sx={{ \"> code\": { color: \"blue.800\", fontSize: \"inherit\" } }}\n to={`#${id}`}\n >\n {children}\n </NavLink>\n </Heading>\n {isH3OrLarger && (\n // If there's an adjacent HR from the source md, do a magic trick and make it disappear\n <Hr mb={marginY} mt={0} sx={{ \"& + hr\": { display: \"none\" } }} />\n )}\n </>\n );\n};\n","export const sanitize = (input: string): string => {\n return input\n .toLowerCase()\n .replace(/[^a-zA-Z0-9 ]/g, \"\")\n .replace(/ /g, \"-\");\n};\n","import { API_PATHS } from \"../../constants/url\";\n\nexport const getFullPackageName = (name: string, scope?: string) => {\n return scope ? `${scope}/${name}` : name;\n};\n\nexport const getAssetsPath = (\n name: string,\n version: string,\n scope?: string\n) => {\n const prefix = `${API_PATHS.PACKAGES_PREFIX}/`;\n const body = getFullPackageName(name, scope);\n const suffix = `/v${version}`;\n return `${prefix}${body}${suffix}`;\n};\n\nexport const sanitizeVersion = (ver: string) => {\n let sanitized = ver;\n if (sanitized.startsWith(\"~\") || sanitized.startsWith(\"^\")) {\n sanitized = sanitized.substring(1);\n }\n return sanitized;\n};\n","import * as spec from \"@jsii/spec\";\nimport { API_PATHS } from \"../../constants/url\";\nimport { getAssetsPath } from \"./util\";\n\n/**\n * Fetch assembly of a specific package from the backend.\n */\nexport const fetchAssembly = async (\n name: string,\n version: string,\n scope?: string\n): Promise<spec.Assembly> => {\n const assemblyPath = `${getAssetsPath(name, version, scope)}${\n API_PATHS.ASSEMBLY_SUFFIX\n }`;\n const response = await fetch(assemblyPath);\n if (!response.ok) {\n throw new Error(\n `Failed fetching assembly for ${assemblyPath}: ${response.statusText}`\n );\n }\n return response.json();\n};\n","import { getAssetsPath } from \"./util\";\n\n/**\n * Fetch markdown docs of a specific package from the backend.\n */\nexport const fetchMarkdown = async (\n name: string,\n version: string,\n language: string,\n scope?: string,\n submodule?: string\n): Promise<string> => {\n const docsSuffix = `/docs-${submodule ? `${submodule}-` : \"\"}${language}.md`;\n\n const markdownPath = `${getAssetsPath(name, version, scope)}${docsSuffix}`;\n const response = await fetch(markdownPath);\n if (!response.ok) {\n throw new Error(\n `Failed fetching documentation for ${markdownPath}: ${response.statusText}`\n );\n }\n\n // since CloudFront returns a 200 /index.html for missing documents,\n // we assert the expected docs content type to detect these errors.\n // TODO: switch to proper 404 responses in this case (requires backend changes)\n const expectedContentType = \"text/markdown\";\n const contentType = response.headers.get(\"Content-Type\");\n\n // we check 'includes' and not 'equal' because the content type contains\n // charset as well (e.g text/markdown; charset=UTF-8)\n if (!contentType || !contentType.includes(expectedContentType)) {\n throw new Error(\n `Invalid content type: ${contentType}. Expected ${expectedContentType}\"`\n );\n }\n return response.text();\n};\n","import { API_PATHS } from \"../../constants/url\";\nimport { getAssetsPath } from \"./util\";\n\nexport interface Metadata {\n date: string;\n links?: {\n npm: string;\n };\n packageLinks?: {\n [key: string]: string;\n };\n}\n\n/**\n * Fetch metadata of a specific package from the backend.\n */\nexport const fetchMetadata = async (\n name: string,\n version: string,\n scope?: string\n): Promise<Metadata> => {\n let sanitizedVersion = version;\n\n if (sanitizedVersion.startsWith(\"^\")) {\n sanitizedVersion = sanitizedVersion.substring(1, sanitizedVersion.length);\n }\n\n const metadataPath = `${getAssetsPath(name, version, scope)}${\n API_PATHS.METADATA_SUFFIX\n }`;\n const response = await fetch(metadataPath);\n\n if (!response.ok) {\n throw new Error(\n `Failed fetching metadata for ${metadataPath}: ${response.statusText}`\n );\n }\n\n return response.json();\n};\n","import { IconButton, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n TEMP_SUPPORTED_LANGUAGES,\n LANGUAGE_RENDER_MAP,\n LANGUAGES,\n} from \"../../constants/languages\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nexport interface LanguageBarProps {\n targetLanguages: readonly Language[];\n selectedLanguage: Language;\n setSelectedLanguage: (lang: Language) => void;\n}\n\nexport const LanguageBar: FunctionComponent<LanguageBarProps> = ({\n targetLanguages,\n selectedLanguage,\n setSelectedLanguage,\n}) => {\n return (\n <Stack\n align=\"center\"\n data-testid=\"language-bar\"\n direction=\"row\"\n spacing={2}\n >\n {[...targetLanguages]\n .sort(\n (left, right) => LANGUAGES.indexOf(left) - LANGUAGES.indexOf(right)\n )\n .map((language: Language) => {\n const isDisabled = !TEMP_SUPPORTED_LANGUAGES.has(language);\n const isSelected = language === selectedLanguage;\n\n const { icon: LangIcon } = LANGUAGE_RENDER_MAP[language];\n\n const onClick = () => {\n if (isSelected) return;\n setSelectedLanguage(language);\n };\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n <IconButton\n aria-label={`Select ${language} icon`}\n border={isSelected ? \"1px solid\" : \"none\"}\n borderColor=\"blue.500\"\n borderRadius=\"lg\"\n boxShadow=\"base\"\n colorScheme=\"blue\"\n cursor={isDisabled ? \"not-allowed\" : \"pointer\"}\n data-testid={`language-${language}`}\n disabled={isDisabled}\n icon={\n <LangIcon\n aria-label={`${language}-icon`}\n borderRadius=\"sm\"\n height={[4, 5, 6]}\n width={[4, 5, 6]}\n />\n }\n onClick={onClick}\n p={1}\n variant=\"outline\"\n w=\"max-content\"\n />\n </LanguageSupportTooltip>\n );\n })}\n </Stack>\n );\n};\n","import type { Assembly } from \"@jsii/spec\";\nimport type { FunctionComponent } from \"react\";\nimport { LanguageBar } from \"../../../../components/LanguageBar\";\nimport { Language, LANGUAGES } from \"../../../../constants/languages\";\nimport { useLanguage } from \"../../../../hooks/useLanguage\";\n\nexport interface LanguageSelectionProps {\n assembly: Assembly;\n}\n\nconst languageSet = new Set(LANGUAGES);\n\nexport const LanguageSelection: FunctionComponent<LanguageSelectionProps> = ({\n assembly,\n}) => {\n const [language, setLanguage] = useLanguage({\n updateSaved: true,\n updateUrl: true,\n });\n const targets = [\n ...Object.keys(assembly?.targets ?? {}),\n // typescript is the source language and hence always supported.\n // (it doesn't appear in spec.targets)\n Language.TypeScript,\n ] as Language[];\n\n return (\n <LanguageBar\n selectedLanguage={targets.includes(language) ? language : targets[0]}\n setSelectedLanguage={setLanguage}\n targetLanguages={targets.filter((target) => languageSet.has(target))}\n />\n );\n};\n","import { ChevronDownIcon, LinkIcon } from \"@chakra-ui/icons\";\nimport { Menu, MenuButton, Button, MenuItem, MenuList } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { sanitizeVersion } from \"../../../../api/package/util\";\nimport { NavLink } from \"../../../../components/NavLink\";\n\nexport interface DependencyDropdownProps {\n dependencies: {\n /**\n * Key is a dep name, value is a version\n */\n [key: string]: string;\n };\n}\n\nexport const DependencyDropdown: FunctionComponent<DependencyDropdownProps> = ({\n dependencies,\n}) => {\n const depEntries = Object.entries(dependencies);\n\n if (!depEntries.length) return null;\n\n return (\n <Menu>\n <MenuButton\n as={Button}\n color=\"blue.500\"\n leftIcon={<LinkIcon />}\n rightIcon={<ChevronDownIcon h={6} w={6} />}\n size=\"md\"\n variant=\"outline\"\n >\n Dependencies\n </MenuButton>\n <MenuList>\n {depEntries.map(([name, version]) => (\n <MenuItem key={`${name}/${version}`} p={0}>\n <NavLink\n h=\"100%\"\n p={2}\n to={`/packages/${name}/v/${sanitizeVersion(version)}`}\n w=\"100%\"\n >\n {`${name} - ${version}`}\n </NavLink>\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n );\n};\n","const OS_ORG_LINK = \"https://opensource.org/licenses\";\n\nexport const LICENSE_LINKS = {\n \"Apache-2.0\": `${OS_ORG_LINK}/apache2.0.php`,\n \"BSD-2-Clause\": `${OS_ORG_LINK}/bsd-license.php`,\n MIT: `${OS_ORG_LINK}/mit-license.php`,\n} as const;\n","import { forwardRef } from \"@chakra-ui/react\";\nimport { ExternalLink, ExternalLinkProps } from \"../ExternalLink\";\nimport { LICENSE_LINKS } from \"./constants\";\n\nexport interface LicenseLinkOptions {\n license: keyof typeof LICENSE_LINKS;\n}\n\nexport interface LicenseLinkProps\n extends ExternalLinkProps,\n LicenseLinkOptions {}\n\nexport const LicenseLink = forwardRef<LicenseLinkProps, \"a\">(\n ({ license, ...linkProps }, ref) => {\n const url = LICENSE_LINKS[license];\n\n return (\n <ExternalLink href={url} ref={ref} {...linkProps}>\n {license}\n </ExternalLink>\n );\n }\n);\n\nLicenseLink.displayName = \"LicenseLink\";\n","import { Box, ListItem, Text, UnorderedList } from \"@chakra-ui/react\";\nimport type { Assembly } from \"@jsii/spec\";\nimport { ReactNode, useMemo } from \"react\";\nimport type { PackageLinksConfig } from \"../../../../api/config\";\nimport type { Metadata } from \"../../../../api/package/metadata\";\nimport { ExternalLink } from \"../../../../components/ExternalLink\";\nimport { LicenseLink, LICENSE_LINKS } from \"../../../../components/LicenseLink\";\nimport { Time } from \"../../../../components/Time\";\nimport { getRepoUrlAndHost } from \"../../../../util/url\";\n\nexport interface DetailsProps {\n assembly?: Assembly;\n linksConfig?: PackageLinksConfig[];\n metadata: Metadata;\n}\n\nexport const Details = ({ assembly, linksConfig, metadata }: DetailsProps) => {\n const detailItems = useMemo(() => {\n if (!metadata) return [];\n\n const { date, links } = metadata;\n const username = assembly?.author.name;\n const authorUrl = assembly?.author.url;\n const repository = assembly?.repository;\n const license = assembly?.license;\n // https://www.npmjs.com/package/aws-cdk/v/1.113.0\n const registry =\n links?.npm ??\n `https://www.npmjs.com/package/${assembly?.name}/v/${assembly?.version}`;\n\n const items = [];\n\n if (date) {\n const publishDate = (\n <Time date={new Date(date)} fontWeight=\"bold\" format=\"MMMM dd, yyyy\" />\n );\n items.push(<>Published: {publishDate}</>);\n }\n\n if (username) {\n const author = authorUrl ? (\n <ExternalLink href={authorUrl}>{username}</ExternalLink>\n ) : (\n <Box as=\"strong\" fontWeight=\"bold\">\n {username}\n </Box>\n );\n items.push(<>Author: {author}</>);\n }\n\n // Prioritize custom links when available\n if (linksConfig?.length) {\n linksConfig.forEach(({ name, value, displayText }) => {\n const target = (metadata?.packageLinks ?? {})[value];\n if (target) {\n const link = (\n <ExternalLink href={target}>{displayText ?? target}</ExternalLink>\n );\n items.push(\n <>\n {name}: {link}\n </>\n );\n }\n });\n }\n\n if (repository) {\n const repo = getRepoUrlAndHost(repository.url);\n\n if (repo) {\n const repoLink = (\n <ExternalLink href={repo.url}>{repo.hostname}</ExternalLink>\n );\n items.push(<>Repository: {repoLink}</>);\n }\n }\n\n if (license && license in LICENSE_LINKS) {\n const licenseLink = (\n <LicenseLink license={license as keyof typeof LICENSE_LINKS} />\n );\n items.push(<>License: {licenseLink}</>);\n }\n\n if (registry) {\n const registryLink = (\n <ExternalLink href={registry}>\n {new URL(registry).hostname}\n </ExternalLink>\n );\n items.push(<>Registry: {registryLink}</>);\n }\n\n return items.slice(0, 5).map((detail: string | ReactNode, i: number) => (\n <ListItem key={`detail-${i}`} listStyleType=\"none\" my={1}>\n <Text color=\"gray.600\">{detail}</Text>\n </ListItem>\n ));\n }, [metadata, assembly, linksConfig]);\n return <UnorderedList ml={0}>{detailItems}</UnorderedList>;\n};\n","import { Box, Flex, Link } from \"@chakra-ui/react\";\nimport type { Assembly } from \"@jsii/spec\";\nimport { FunctionComponent } from \"react\";\nimport { PackageLinksConfig } from \"../../../../api/config\";\nimport type { Metadata } from \"../../../../api/package/metadata\";\nimport { DependencyDropdown } from \"../DependencyDropdown\";\nimport { Details } from \"./Details\";\n\nexport interface OperatorAreaProps {\n assembly?: Assembly;\n linksConfig?: PackageLinksConfig[];\n metadata: Metadata;\n}\n\nexport const OperatorArea: FunctionComponent<OperatorAreaProps> = ({\n assembly,\n linksConfig,\n metadata,\n}) => {\n return (\n <Flex direction=\"column\" textAlign={{ base: \"center\", md: \"initial\" }}>\n <Link\n color=\"blue.500\"\n fontSize=\"sm\"\n href={`mailto:abuse@amazonaws.com?subject=${encodeURIComponent(\n `ConstructHub - Report of abusive package: ${assembly?.name}`\n )}`}\n m={2}\n textAlign={{ base: \"center\", md: \"right\" }}\n >\n Report this Package\n </Link>\n <Details\n assembly={assembly}\n linksConfig={linksConfig}\n metadata={metadata}\n />\n {assembly?.dependencies && (\n <Box mt={4}>\n <DependencyDropdown dependencies={assembly.dependencies} />\n </Box>\n )}\n </Flex>\n );\n};\n","import { Flex, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { PackageTag } from \"../../../../components/PackageTag\";\nimport { useLanguage } from \"../../../../hooks/useLanguage\";\n\nexport interface PackageHeaderProps {\n title: string;\n description: string;\n tags: string[];\n version: string;\n}\n\nexport const PackageHeader: FunctionComponent<PackageHeaderProps> = ({\n description,\n tags,\n title,\n version,\n}) => {\n const [currentLanguage] = useLanguage();\n return (\n <Flex\n direction=\"column\"\n maxWidth=\"100%\"\n overflowX=\"hidden\"\n p={2}\n textAlign={{ base: \"center\", md: \"initial\" }}\n >\n <Stack\n align=\"center\"\n direction={{ base: \"column\", md: \"row\" }}\n justify={{ base: \"center\", md: \"start\" }}\n mb={4}\n spacing={4}\n >\n <Heading wordBreak=\"break-word\">{title}</Heading>\n <Text color=\"blue.500\" fontSize=\"md\">\n {version}\n </Text>\n </Stack>\n\n <Text wordBreak=\"break-word\">{description}</Text>\n {!!tags.length && (\n <Flex\n direction=\"row\"\n justify={{ base: \"center\", md: \"initial\" }}\n mt={3}\n >\n {title.startsWith(\"@aws-cdk/\") ? (\n <PackageTag\n key=\"official\"\n label=\"official\"\n language={currentLanguage}\n mr={2}\n value=\"@aws-cdk\"\n variant=\"official\"\n >\n Official\n </PackageTag>\n ) : null}\n {tags\n .filter(Boolean)\n .slice(0, 3)\n .map((tag) => (\n <PackageTag\n key={tag}\n language={currentLanguage}\n mr={2}\n value={tag}\n >\n {tag}\n </PackageTag>\n ))}\n </Flex>\n )}\n </Flex>\n );\n};\n","import { CheckIcon, CloseIcon, CopyIcon } from \"@chakra-ui/icons\";\nimport {\n Code,\n Flex,\n IconButton,\n Popover,\n PopoverBody,\n PopoverContent,\n PopoverHeader,\n PopoverTrigger,\n Text,\n useClipboard,\n useDisclosure,\n useMediaQuery,\n useToken,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent, ReactNode, useRef } from \"react\";\nimport { createTestIds } from \"../../util/createTestIds\";\n\nconst iconButtonProps = {\n borderRadius: \"md\",\n color: \"white\",\n variant: \"link\",\n};\n\nconst iconProps = {\n h: 4,\n w: 4,\n};\n\nexport const testIds = createTestIds(\"code-popover\", [\n \"close\",\n \"content\",\n \"code\",\n \"copy\",\n \"header\",\n \"trigger\",\n] as const);\n\nexport interface CodePopoverProps {\n code: string;\n header: string;\n trigger: ReactNode;\n}\n\nexport const CodePopover: FunctionComponent<CodePopoverProps> = ({\n code,\n header,\n trigger,\n}) => {\n const { hasCopied, onCopy } = useClipboard(code);\n const disclosure = useDisclosure();\n const focusRef = useRef<HTMLButtonElement>(null);\n const mdBreakpoint = useToken(\"breakpoints\", \"md\");\n const [isMd] = useMediaQuery(`(min-width: ${mdBreakpoint})`);\n\n return (\n <Popover\n initialFocusRef={focusRef}\n isLazy\n placement={isMd ? \"bottom-end\" : \"bottom\"}\n {...disclosure}\n >\n <PopoverTrigger>{trigger}</PopoverTrigger>\n <PopoverContent bg=\"blue.500\" data-testid={testIds.content}>\n <PopoverHeader\n align=\"center\"\n as={Flex}\n color=\"white\"\n data-testid={testIds.header}\n justify=\"space-between\"\n pr={0}\n >\n <Text>{header}</Text>\n <Flex align=\"center\">\n <IconButton\n aria-label=\"copy-text-icon\"\n data-testid={testIds.copy}\n icon={\n hasCopied ? (\n <CheckIcon {...iconProps} color=\"green.200\" />\n ) : (\n <CopyIcon {...iconProps} />\n )\n }\n onClick={onCopy}\n ref={focusRef}\n {...iconButtonProps}\n />\n <IconButton\n aria-label=\"close-icon\"\n data-testid={testIds.close}\n icon={<CloseIcon h={3} w={3} />}\n onClick={disclosure.onClose}\n {...iconButtonProps}\n />\n </Flex>\n </PopoverHeader>\n <PopoverBody\n as={Code}\n bg=\"gray.100\"\n borderTopLeftRadius=\"0\"\n borderTopRightRadius=\"0\"\n color=\"gray.800\"\n data-testid={testIds.code}\n overflow=\"auto\"\n variant=\"code-block\"\n >\n {code}\n </PopoverBody>\n </PopoverContent>\n </Popover>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport { Button, ButtonProps, forwardRef } from \"@chakra-ui/react\";\nimport { testIds } from \"./CodePopover\";\n\nexport interface CodePopoverTriggerProps extends ButtonProps {}\n\n/**\n * A default trigger button for the code popover\n */\nexport const CodePopoverTrigger = forwardRef<CodePopoverTriggerProps, \"button\">(\n (props, ref) => (\n <Button\n color=\"white\"\n colorScheme=\"blue\"\n data-testid={testIds.trigger}\n ref={ref}\n rightIcon={<ChevronDownIcon h={5} w={5} />}\n {...props}\n >\n {props.children}\n </Button>\n )\n);\n\nCodePopoverTrigger.displayName = \"CodePopoverTrigger\";\n","import type { Assembly } from \"@jsii/spec\";\nimport type { FunctionComponent } from \"react\";\nimport {\n CodePopover,\n CodePopoverTrigger,\n} from \"../../../../components/CodePopover\";\nimport { LANGUAGE_NAME_MAP, Language } from \"../../../../constants/languages\";\nimport { useLanguage } from \"../../../../hooks/useLanguage\";\n\n// TODO: We'll probably want to get this from BE as we add more languages, however this should do the trick for now...\nconst getCodeSample = ({\n language,\n assembly,\n}: {\n language: Language;\n assembly: Assembly;\n}): string | undefined => {\n const version = assembly.version;\n if (language === Language.TypeScript) {\n const packageName = assembly.name;\n return `npm install ${packageName}@${version}`;\n } else if (language === Language.Python) {\n const packageName = assembly.targets?.python?.distName;\n if (!packageName) {\n return undefined;\n }\n return `pip install ${packageName}==${version}`;\n } else if (language === Language.Java) {\n const groupId = assembly.targets?.java?.maven?.groupId;\n const artifactId = assembly.targets?.java?.maven?.artifactId;\n if (!groupId || !artifactId) return undefined;\n return [\n \"// add this to your pom.xml\",\n \"<dependency>\",\n ` <groupId>${groupId}</groupId>`,\n ` <artifactId>${artifactId}</artifactId>`,\n ` <version>${version}</version>`,\n \"</dependency>\",\n ].join(\"\\n\");\n }\n\n return undefined;\n};\n\nexport interface UseConstructProps {\n assembly: Assembly;\n}\n\nexport const UseConstruct: FunctionComponent<UseConstructProps> = ({\n assembly,\n}) => {\n const [language] = useLanguage();\n\n const header = LANGUAGE_NAME_MAP[language];\n const code = getCodeSample({ language, assembly });\n\n const isDisabled = !code;\n const label = !isDisabled ? \"Install\" : \"Unsupported\";\n\n const trigger = (\n <CodePopoverTrigger disabled={isDisabled}>{label}</CodePopoverTrigger>\n );\n\n return <CodePopover code={code ?? \"\"} header={header} trigger={trigger} />;\n};\n","import { Center, Divider, Flex, Grid, Spinner, Stack } from \"@chakra-ui/react\";\nimport type { Assembly } from \"@jsii/spec\";\nimport { FunctionComponent } from \"react\";\nimport { Config } from \"../../../../api/config\";\nimport type { Metadata } from \"../../../../api/package/metadata\";\nimport { Card } from \"../../../../components/Card\";\nimport type { UseRequestResponse } from \"../../../../hooks/useRequest\";\nimport { LanguageSelection } from \"../LanguageSelection\";\nimport { OperatorArea } from \"../OperatorArea\";\nimport { PackageHeader } from \"../PackageHeader\";\nimport { UseConstruct } from \"../UseConstruct\";\n\ninterface PackageDetailsProps {\n config: UseRequestResponse<Config>;\n assembly: UseRequestResponse<Assembly>;\n metadata: UseRequestResponse<Metadata>;\n version: string;\n}\n\n/**\n * Renders the header section of a package. This includes\n * the Getting Started, Operator Area, and Publisher Area sections\n */\nexport const PackageDetails: FunctionComponent<PackageDetailsProps> = ({\n assembly,\n config,\n metadata,\n version,\n}) => {\n const isLoading = assembly.loading || metadata.loading;\n\n if (isLoading || !assembly.data || !metadata.data) {\n return (\n <Center minH=\"200px\">\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n return (\n <Flex as={Card} direction=\"column\">\n <Grid\n gap={4}\n overflow=\"hidden\"\n templateColumns={{ base: \"1fr\", md: \"3fr auto 2fr\" }}\n templateRows=\"auto\"\n >\n <PackageHeader\n description={assembly.data.description}\n tags={assembly.data.keywords ?? []}\n title={assembly.data.name}\n version={version}\n />\n <Divider\n display={{ base: \"none\", md: \"initial\" }}\n orientation=\"vertical\"\n />\n <Divider\n display={{ base: \"initial\", md: \"none\" }}\n orientation=\"horizontal\"\n />\n {config.loading ? (\n <Center minH=\"200px\">\n <Spinner size=\"xl\" />\n </Center>\n ) : (\n <OperatorArea\n assembly={assembly.data}\n linksConfig={config.data?.packageLinks}\n metadata={metadata.data}\n />\n )}\n </Grid>\n <Stack\n align=\"center\"\n direction={{ base: \"column\", md: \"row\" }}\n justify={{ base: \"center\", md: \"space-between\" }}\n px={2}\n py={4}\n spacing={4}\n >\n <LanguageSelection assembly={assembly.data} />\n <UseConstruct assembly={assembly.data} />\n </Stack>\n </Flex>\n );\n};\n","import { ChevronDownIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Box, Flex, Link, IconButton, useDisclosure } from \"@chakra-ui/react\";\nimport { FunctionComponent, useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface NavItemConfig {\n children?: NavItemConfig[];\n display: string;\n url: string;\n}\n\nexport interface NavItemProps extends NavItemConfig {\n // The following props don't need to be explicitly defined - they are passed internally\n onOpen?: () => void;\n}\n\nexport interface NavTreeProps {\n /**\n * Items to render\n */\n items: NavItemConfig[];\n}\n\nconst iconProps = {\n color: \"gray.900\",\n h: 4,\n w: 4,\n};\n\nexport const NavItem: FunctionComponent<NavItemProps> = ({\n children,\n display,\n url,\n onOpen,\n}) => {\n const { pathname, hash } = useLocation();\n const isHashUrl = url.startsWith(\"#\");\n const linkIsActive = isHashUrl ? hash === url : pathname === url;\n const disclosure = useDisclosure({ onOpen, defaultIsOpen: true });\n\n const showToggle = (children?.length ?? 0) > 0;\n const showChildren = disclosure.isOpen && showToggle;\n\n const LinkComponent = isHashUrl ? Link : NavLink;\n\n const nestedItems = useMemo(\n () =>\n children?.map((item, idx) => {\n return <NavItem {...item} key={idx} onOpen={disclosure.onOpen} />;\n }),\n [children, disclosure.onOpen]\n );\n\n return (\n <Flex direction=\"column\">\n <Flex align=\"center\" color={linkIsActive ? \"blue.500\" : \"gray.800\"}>\n {showToggle && (\n <IconButton\n aria-label=\"expand-toggle\"\n borderRadius=\"md\"\n h={4}\n icon={\n disclosure.isOpen ? (\n <ChevronDownIcon {...iconProps} />\n ) : (\n <ChevronRightIcon {...iconProps} />\n )\n }\n ml={-1}\n onClick={disclosure.onToggle}\n size=\"xs\"\n variant=\"link\"\n w={4}\n />\n )}\n <LinkComponent\n _hover={{ bg: \"rgba(0, 124, 253, 0.05)\" }}\n href={url}\n overflow=\"hidden\"\n pl={showToggle ? 1 : 2}\n py={1.5}\n textOverflow=\"ellipsis\"\n title={display}\n to={url}\n w=\"100%\"\n whiteSpace=\"nowrap\"\n >\n {display}\n </LinkComponent>\n </Flex>\n <Box\n _before={{\n // Creates a border without taking up any box space\n // This is important to keep items perfectly aligned\n bg: \"gray.100\",\n bottom: 0,\n content: `\"\"`,\n left: 0,\n position: \"absolute\",\n top: 0,\n w: \"1px\",\n }}\n display={showChildren ? \"initial\" : \"none\"}\n ml={2}\n pl={2}\n position=\"relative\"\n >\n {nestedItems}\n </Box>\n </Flex>\n );\n};\n\nexport const NavTree: FunctionComponent<NavTreeProps> = ({ items }) => {\n return (\n <Flex direction=\"column\" maxWidth=\"100%\">\n {items.map((item, idx) => {\n return <NavItem {...item} key={idx} onOpen={undefined} />;\n })}\n </Flex>\n );\n};\n","import { SearchIcon } from \"@chakra-ui/icons\";\nimport {\n InputGroup,\n InputLeftElement,\n Input,\n forwardRef,\n} from \"@chakra-ui/react\";\nimport { FormEventHandler, useState } from \"react\";\nimport { Form } from \"../../../../components/Form\";\nimport { useDebounce } from \"../../../../hooks/useDebounce\";\n\nexport interface SearchInputProps {\n value: string;\n onChange: (s: string) => void;\n onSubmit: FormEventHandler<HTMLFormElement>;\n}\n\nexport const SearchInput = forwardRef<SearchInputProps, \"input\">(\n ({ value, onChange, onSubmit }, inputRef) => {\n const [inputValue, setInputValue] = useState(value);\n\n useDebounce(inputValue, { onChange });\n\n return (\n <Form data-testid=\"choose-submodule-search-form\" onSubmit={onSubmit}>\n <InputGroup>\n <InputLeftElement>\n <SearchIcon color=\"gray.400\" />\n </InputLeftElement>\n <Input\n data-testid=\"choose-submodule-search-input\"\n onChange={(e) => setInputValue(e.target.value)}\n placeholder=\"Search\"\n ref={inputRef}\n value={inputValue}\n variant=\"filled\"\n />\n </InputGroup>\n </Form>\n );\n }\n);\n\nSearchInput.displayName = \"SearchInput\";\n","import {\n Box,\n Divider,\n Modal,\n ModalHeader,\n ModalContent,\n ModalCloseButton,\n ModalBody,\n ModalOverlay,\n UnorderedList,\n} from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n useCallback,\n useRef,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { SearchItem } from \"../../../../components/SearchItem\";\nimport { SearchInput } from \"./SearchInput\";\n\nexport interface SearchModalProps {\n inputValue: string;\n isOpen: boolean;\n onClose: () => void;\n onInputChange: (s: string) => void;\n submodules: { name: string; to: string }[];\n}\n\nexport const SearchModal: FunctionComponent<SearchModalProps> = ({\n inputValue,\n isOpen,\n onClose,\n onInputChange,\n submodules,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const { push } = useHistory();\n\n const navigate = useCallback(\n (to: string) => {\n onClose();\n push(to);\n },\n [onClose, push]\n );\n\n const onSubmit = useCallback<FormEventHandler<HTMLFormElement>>(\n (e) => {\n e.preventDefault();\n\n if (!submodules.length) return;\n const { to } = submodules[0];\n navigate(to);\n },\n [navigate, submodules]\n );\n\n return (\n <Modal initialFocusRef={inputRef} isOpen={isOpen} onClose={onClose}>\n <ModalOverlay>\n <ModalContent mx={4}>\n <ModalCloseButton data-testid=\"choose-submodule-modal-close\" />\n <ModalHeader\n data-testid=\"choose-submodule-modal-header\"\n fontSize=\"lg\"\n fontWeight=\"bold\"\n >\n Choose a submodule\n </ModalHeader>\n <ModalBody data-testid=\"choose-submodule-modal-body\" p={0}>\n <Box pb={4} px={4}>\n <SearchInput\n onChange={onInputChange}\n onSubmit={onSubmit}\n ref={inputRef}\n value={inputValue}\n />\n </Box>\n <Divider />\n <UnorderedList\n data-testid=\"choose-submodule-modal-results\"\n m={0}\n maxH=\"50vh\"\n overflow=\"hidden auto\"\n p={0}\n role=\"listbox\"\n tabIndex={-1}\n >\n {submodules.map(({ name, to }) => (\n <SearchItem\n data-testid=\"choose-submodule-result\"\n key={name}\n name={name}\n onClick={() => navigate(to)}\n />\n ))}\n </UnorderedList>\n </ModalBody>\n </ModalContent>\n </ModalOverlay>\n </Modal>\n );\n};\n","import { ArrowBackIcon, ChevronDownIcon } from \"@chakra-ui/icons\";\nimport { Button, Divider, Stack, useDisclosure } from \"@chakra-ui/react\";\nimport type { Assembly } from \"@jsii/spec\";\nimport { FunctionComponent, useCallback, useMemo, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { QUERY_PARAMS } from \"../../../../constants/url\";\nimport { useQueryParams } from \"../../../../hooks/useQueryParams\";\nimport { SearchModal } from \"./SearchModal\";\n\nexport interface ChooseSubmoduleProps {\n assembly?: Assembly;\n}\n\nexport const ChooseSubmodule: FunctionComponent<ChooseSubmoduleProps> = ({\n assembly,\n}) => {\n const { pathname } = useLocation();\n const { push } = useHistory();\n const query = useQueryParams();\n\n const allSubmodules = Object.keys(assembly?.submodules ?? {});\n const { isOpen, onOpen, onClose } = useDisclosure();\n\n const currentSubmodule = query.get(QUERY_PARAMS.SUBMODULE);\n const submoduleText = currentSubmodule\n ? `Submodule: ${currentSubmodule}`\n : \"Choose Submodule\";\n\n const [filter, setFilter] = useState(\"\");\n\n const onGoBack = () => {\n const lang = query.get(QUERY_PARAMS.LANGUAGE);\n push(`${pathname}${lang ? `?${QUERY_PARAMS.LANGUAGE}=${lang}` : \"\"}`);\n };\n\n const getUrl = useCallback(\n (submoduleName: string) => {\n const params = new URLSearchParams(query.toString());\n params.set(\"submodule\", submoduleName);\n return `${pathname}?${params}`;\n },\n [pathname, query]\n );\n\n const submodules = useMemo(() => {\n let results = allSubmodules;\n\n if (filter) {\n results = results.filter((fqn) =>\n fqn.toLowerCase().includes(filter.toLowerCase())\n );\n }\n\n return results.map((fqn) => {\n const name = fqn.split(\".\")[1];\n return {\n name,\n to: getUrl(name),\n };\n });\n }, [allSubmodules, filter, getUrl]);\n\n if (allSubmodules.length === 0) {\n return null;\n }\n\n return (\n <Stack spacing={4} w=\"100%\">\n {currentSubmodule && (\n <>\n <Button\n borderRadius=\"none\"\n data-testid=\"choose-submodule-go-back\"\n leftIcon={<ArrowBackIcon aria-label=\"Back to construct root\" />}\n onClick={onGoBack}\n title=\"Back to construct root\"\n variant=\"link\"\n >\n {assembly?.name}\n </Button>\n <Divider />\n </>\n )}\n <Button\n borderRadius=\"none\"\n color=\"blue.500\"\n data-testid=\"choose-submodule-search-trigger\"\n flexGrow={1}\n onClick={onOpen}\n rightIcon={<ChevronDownIcon />}\n title=\"Choose Submodule\"\n variant=\"link\"\n >\n {submoduleText}\n </Button>\n <SearchModal\n inputValue={filter}\n isOpen={isOpen}\n onClose={onClose}\n onInputChange={setFilter}\n submodules={submodules}\n />\n </Stack>\n );\n};\n","import { Box, Flex, Grid } from \"@chakra-ui/react\";\nimport type { Assembly } from \"@jsii/spec\";\nimport { useState, useEffect, FunctionComponent, useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { Markdown } from \"../../../../components/Markdown\";\nimport { NavTree, NavItemConfig } from \"../../../../components/NavTree\";\nimport { ChooseSubmodule } from \"../ChooseSubmodule\";\n\nexport interface PackageDocsProps {\n markdown: string;\n assembly: Assembly;\n}\n\ntype Item = NavItemConfig & { level: number; children: Item[] };\n\nexport const appendItem = (itemTree: Item[], item: Element): Item[] => {\n if (!(item instanceof HTMLElement)) {\n return itemTree;\n }\n\n const { headingId, headingLevel = \"100\" } = item.dataset;\n const { innerText } = item;\n const level = parseInt(headingLevel);\n\n // Don't create nav items for items with no title / url\n if (level > 3 || !innerText || !headingId) {\n return itemTree;\n }\n\n const last = itemTree[itemTree.length - 1];\n\n if (last == null || last.level >= level) {\n return [\n ...itemTree,\n {\n display: innerText,\n url: `#${headingId}`,\n level,\n children: [],\n },\n ];\n } else {\n last.children = appendItem(last.children, item);\n return itemTree;\n }\n};\n\n// We want the nav to be sticky, but it should account for the sticky heading as well, which is 72px\nconst TOP_OFFSET = \"72px\";\n\nexport const PackageDocs: FunctionComponent<PackageDocsProps> = ({\n markdown: source,\n assembly,\n}) => {\n const [navItems, setNavItems] = useState<Item[]>([]);\n\n useEffect(() => {\n const tree = [\n ...document.querySelectorAll(\n `[data-heading-id][data-heading-title][data-heading-level]`\n ),\n ].reduce(appendItem, []);\n\n setNavItems(tree);\n }, [source]);\n\n const { hash } = useLocation();\n useEffect(() => {\n if (hash) {\n const target = document.querySelector(`${hash}`) as HTMLElement;\n target?.scrollIntoView(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n\n const markdown = useMemo(\n () => <Markdown repository={assembly.repository}>{source}</Markdown>,\n [assembly.repository, source]\n );\n\n return (\n <Grid\n bg=\"white\"\n columnGap={4}\n h=\"100%\"\n templateColumns={{ base: \"1fr\", md: \"1fr 3fr\" }}\n width=\"100%\"\n >\n <Flex\n alignSelf=\"stretch\"\n borderRight=\"1px solid\"\n borderRightColor=\"blue.50\"\n direction=\"column\"\n display={{ base: \"none\", md: \"flex\" }}\n maxHeight={`calc(100vh - ${TOP_OFFSET})`}\n overflow=\"hidden auto\"\n position=\"sticky\"\n px={4}\n top={TOP_OFFSET}\n >\n {Object.keys(assembly?.submodules ?? {}).length > 0 && (\n <Flex\n borderBottom=\"1px solid\"\n borderColor=\"blue.50\"\n justify=\"center\"\n py={4}\n >\n <ChooseSubmodule assembly={assembly} />\n </Flex>\n )}\n <Box overflowY=\"auto\" py={4}>\n <NavTree items={navItems} />\n </Box>\n </Flex>\n <Box\n h=\"max-content\"\n maxWidth=\"100%\"\n overflow=\"hidden\"\n py={4}\n sx={{\n a: {\n scrollMarginTop: TOP_OFFSET,\n },\n }}\n >\n {markdown}\n </Box>\n </Grid>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../../../../components/ExternalLink\";\nimport { Language } from \"../../../../constants/languages\";\n\nexport interface PackageDocsErrorProps {\n readonly language: Language;\n}\n\nexport const PackageDocsError: FunctionComponent<PackageDocsErrorProps> = ({\n language,\n}) => {\n const issueLink = (\n <ExternalLink href=\"https://github.com/cdklabs/construct-hub-webapp/issues/new\">\n issue\n </ExternalLink>\n );\n return (\n <Text\n align=\"center\"\n fontSize=\"xl\"\n fontStyle=\"oblique\"\n px={4}\n wordBreak=\"break-word\"\n >\n Documentation in {language} is still not ready for this package. Come back\n soon. If this issue persists, please let us know by creating an{\" \"}\n {issueLink}.\n </Text>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Language, LANGUAGE_NAME_MAP } from \"../../../../constants/languages\";\n\nexport interface PackageDocsUnsupportedProps {\n readonly language: Language;\n}\n\nexport const PackageDocsUnsupported: FunctionComponent<PackageDocsUnsupportedProps> =\n ({ language }) => {\n const languageName = LANGUAGE_NAME_MAP[language];\n return (\n <Text\n align=\"center\"\n fontSize=\"xl\"\n fontStyle=\"oblique\"\n px={4}\n wordBreak=\"break-word\"\n >\n This package does not currently support {languageName}. Select one of\n the supported languages above, or ask the author to add support for{\" \"}\n {languageName} in a future release.\n </Text>\n );\n };\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { fetchAssembly } from \"../../api/package/assembly\";\nimport { fetchMarkdown } from \"../../api/package/docs\";\nimport { fetchMetadata } from \"../../api/package/metadata\";\nimport { Page } from \"../../components/Page\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useConfig } from \"../../contexts/Config\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { useRequest } from \"../../hooks/useRequest\";\nimport { NotFound } from \"../NotFound\";\nimport { PackageDetails } from \"./components/PackageDetails\";\nimport { PackageDocs } from \"./components/PackageDocs\";\nimport { PackageDocsError } from \"./components/PackageDocsError\";\nimport { PackageDocsUnsupported } from \"./components/PackageDocsUnsupported/PackageDocsUnsupported\";\n\ninterface PathParams {\n name: string;\n scope?: string;\n version: string;\n}\n\nexport const Package: FunctionComponent = () => {\n const { name, scope, version }: PathParams = useParams();\n const [requestMarkdown, markdownResponse] = useRequest(fetchMarkdown);\n const [requestAssembly, assemblyResponse] = useRequest(fetchAssembly);\n const [requestMetadata, metadataResponse] = useRequest(fetchMetadata);\n const configResponse = useConfig();\n\n const q = useQueryParams();\n const [language] = useLanguage();\n const submodule = q.get(QUERY_PARAMS.SUBMODULE) ?? \"\";\n\n const pageTitle = `${scope ? `${scope}/${name}` : name} ${version}`;\n\n const pageDescription = assemblyResponse?.data?.description ?? \"\";\n\n useEffect(() => {\n void requestMetadata(name, version, scope);\n void requestAssembly(name, version, scope);\n }, [name, requestAssembly, requestMetadata, scope, version]);\n\n useEffect(() => {\n void requestMarkdown(name, version, language, scope, submodule);\n }, [name, scope, version, language, submodule, requestMarkdown]);\n\n // Handle missing JSON for assembly\n if (assemblyResponse.error) {\n return <NotFound />;\n }\n\n const hasError = markdownResponse.error || assemblyResponse.error;\n const hasDocs =\n !markdownResponse.loading &&\n !assemblyResponse.loading &&\n markdownResponse.data &&\n assemblyResponse.data;\n // This will also be true if it cannot be verified (assembly not there)\n const isSupported =\n language === Language.TypeScript ||\n assemblyResponse.loading ||\n assemblyResponse.error ||\n assemblyResponse.data?.targets?.[language.toString()] != null;\n\n return (\n <Page\n meta={{ title: pageTitle, description: pageDescription }}\n pageName=\"packageProfile\"\n >\n <Stack maxW=\"100vw\" pt={4} spacing={4}>\n {/* Operator Area */}\n <Box px={4}>\n <PackageDetails\n assembly={assemblyResponse}\n config={configResponse}\n metadata={metadataResponse}\n version={version}\n />\n </Box>\n {/* Readme and Api Reference Area */}\n {isSupported ? (\n hasError ? (\n <PackageDocsError language={language}></PackageDocsError>\n ) : (\n hasDocs && (\n <PackageDocs\n assembly={assemblyResponse.data!}\n markdown={markdownResponse.data!}\n />\n )\n )\n ) : (\n <PackageDocsUnsupported language={language}></PackageDocsUnsupported>\n )}\n </Stack>\n </Page>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Redirect, useParams } from \"react-router-dom\";\nimport { Packages } from \"../../api/package/packages\";\nimport { getFullPackageName, sanitizeVersion } from \"../../api/package/util\";\nimport { useCatalog } from \"../../contexts/Catalog\";\n\ninterface RouteParams {\n name: string;\n scope?: string;\n}\n\nconst extractMajor = (ver: string) => {\n let sanitized = sanitizeVersion(ver);\n return sanitized.split(\".\")[0];\n};\n\nconst findPackage = (catalog: Packages, pkg: string) => {\n const packages = catalog.packages.filter((p) => p.name === pkg);\n\n if (packages.length === 0) {\n throw new Error(`Package ${pkg} does not exist in catalog`);\n }\n\n if (packages.length > 1) {\n return packages.sort((p1, p2) => {\n const mv1 = extractMajor(p1.version);\n const mv2 = extractMajor(p2.version);\n return mv2.localeCompare(mv1);\n })[0];\n }\n\n return packages[0];\n};\n\nexport const buildRedirectUrl = (\n catalog: Packages,\n name: string,\n scope?: string\n) => {\n const prefix = \"/packages/\";\n const packageName = getFullPackageName(name, scope);\n const version = findPackage(catalog, packageName).version;\n const suffix = `/v/${version}`;\n return `${prefix}${packageName}${suffix}`;\n};\n\nexport const PackageLatest: FunctionComponent = () => {\n const { name, scope }: RouteParams = useParams();\n const catalog = useCatalog();\n\n if (catalog.loading || !catalog.data) {\n return (\n <Center minH=\"200px\">\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n return <Redirect to={buildRedirectUrl(catalog.data, name, scope)} />;\n};\n","import type { FunctionComponent } from \"react\";\nimport { Switch, Route, useRouteMatch } from \"react-router-dom\";\nimport { NotFound } from \"../NotFound\";\nimport { Package } from \"../Package\";\nimport { PackageLatest } from \"../PackageLatest\";\n\nconst nameRegexp = \"[^@\\\\/]+\";\nconst scopeRegexp = \"@[^\\\\/]+\";\n\nexport const Packages: FunctionComponent = () => {\n const { path } = useRouteMatch();\n\n return (\n <Switch>\n <Route\n exact\n path={`${path}/:scope(${scopeRegexp})?/:name(${nameRegexp})`}\n >\n <PackageLatest />\n </Route>\n <Route\n path={`${path}/:scope(${scopeRegexp})?/:name(${nameRegexp})/v/:version`}\n >\n <Package />\n </Route>\n <Route path=\"*\">\n <NotFound />\n </Route>\n </Switch>\n );\n};\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[6],{232:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),c=a(241),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"}}},i=a(112),s=a(1),o=function(e){var t=e.children,a=e.meta,o=e.pageName,l=Object(i.b)(r[o]);Object(n.useEffect)((function(){l()}),[l]);var u=a.suffix,j=void 0===u||u,d=a.title,b=a.description,f=j?"".concat(d," - Construct Hub"):d;return Object(s.jsxs)(s.Fragment,{children:[Object(s.jsxs)(c.a,{children:[!1,Object(s.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(s.jsx)("meta",{charSet:"utf-8"}),Object(s.jsx)("title",{children:f}),Object(s.jsx)("meta",{content:f,property:"og:title"}),Object(s.jsx)("meta",{content:f,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:b,name:"description"}),Object(s.jsx)("meta",{content:b,property:"og:description"}),Object(s.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},260:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),c=a(22),r=a(299),i=a(56),s=a(68),o=a(1),l=["children","language","value","label","zIndex"],u=function(e){var t=e.children,a=e.language,u=e.value,j=e.label,d=void 0===j?u:j,b=e.zIndex,f=Object(c.a)(e,l);return Object(o.jsx)(s.a,{"aria-label":"Tag: ".concat(d),to:Object(i.c)({query:"".concat(u),language:a}),zIndex:b,children:Object(o.jsx)(r.a,Object(n.a)(Object(n.a)({_hover:{textDecoration:"underline"}},f),{},{children:Object(o.jsx)(r.b,{children:t})}))})}},272:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(76),c=Object(n.a)({d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",displayName:"ChevronRightIcon"})},292:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(195),c=a(1),r=function(e){var t=e.children;return Object(c.jsx)(n.a,{as:"em",color:"blue.500",fontWeight:"bold",children:t})},i=function(e){var t=e.limit,a=e.offset,i=e.count,s=e.filtered,o=t*a,l=o+t;return Object(c.jsxs)(n.a,{children:["Displaying"," ",Object(c.jsxs)(r,{children:[i?o+1:i," - ",l>i?i:l]})," ","of ",Object(c.jsx)(r,{children:i})," ",s?"search results":"constructs","."]})}},293:function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));var n=25},294:function(e,t,a){"use strict";a.d(t,"a",(function(){return A}));var n=a(0),c=a(4),r=a(19),i=a(6),s=a(229),o=a(216),l=a(195),u=a(205),j=a(190),d=a(207),b=a(200),f=a(24),O=a(25),g=a(56),h=a(120),m=a(260),p=a(119),x=a(145),v=a(113),y=a(37),w=Object(y.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),S=a(1),L=function(e){var t=e.children;return Object(S.jsx)(v.a,{h:64,p:0,w:"100%",children:Object(S.jsx)(x.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},k=function(e){var t=e.children;return e.isLink?Object(S.jsx)(o.a,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":w.container,children:Object(S.jsx)(L,{children:t})}):Object(S.jsx)(L,{children:t})},E=a(578),I=function(){return Object(S.jsxs)(S.Fragment,{children:[Object(S.jsxs)(s.a,{p:4,spacing:4,children:[Object(S.jsx)(E.a,{h:5,w:"50%"}),Object(S.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(S.jsx)(E.a,{h:5,w:10}),Object(S.jsx)(E.a,{h:5,w:10}),Object(S.jsx)(E.a,{h:5,w:10})]}),Object(S.jsx)(E.a,{h:3,w:"75%"}),Object(S.jsx)(E.a,{h:3,w:"50%"})]}),Object(S.jsxs)(j.a,{children:[Object(S.jsx)(d.a,{}),Object(S.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(S.jsx)(E.a,{h:5,w:"25%"}),Object(S.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(S.jsx)(E.a,{h:5,w:10}),Object(S.jsx)(E.a,{h:5,w:10}),Object(S.jsx)(E.a,{h:5,w:10}),Object(S.jsx)(E.a,{h:5,w:10})]})]})]})]})},N=function(e){var t,a,n,x=e.language,v=e.pkg;if(!v)return Object(S.jsx)(k,{children:Object(S.jsx)(I,{})});var y=(null===(t=v.metadata)||void 0===t?void 0:t.date)?Object(S.jsx)(p.a,{date:new Date(v.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,L=null!==(a=v.author)&&void 0!==a?a:{},E=null!==(n=v.languages)&&void 0!==n?n:{},N=Object.keys(E),P=function(e){return Object(g.a)(Object(i.a)({name:v.name,version:v.version,language:x},e))},C="string"===typeof L?L:L.name;return Object(S.jsxs)(k,{isLink:!0,children:[Object(S.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(S.jsx)(o.b,{as:f.b,to:P(),children:Object(S.jsxs)(l.a,{color:"blue.800","data-testid":w.name,fontWeight:"semibold",isTruncated:!0,children:[v.name,Object(S.jsx)(l.a,{as:"span",color:"blue.500","data-testid":w.version,fontSize:"xs",ml:2,children:v.version})]})}),Object(S.jsx)(o.a,{as:u.a,"data-testid":w.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[v.name.startsWith("@aws-cdk/")?Object(S.jsx)(m.a,{label:"official",language:x,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(r.a)(v.keywords.filter(Boolean).slice(0,3).map((function(e){return Object(S.jsx)(m.a,{language:x,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(S.jsx)(l.a,{"data-testid":w.description,fontSize:"sm",noOfLines:2,children:v.description})]}),Object(S.jsxs)(j.a,{children:[Object(S.jsx)(d.a,{}),Object(S.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(S.jsx)(l.a,{"data-testid":w.date,fontSize:"sm",isTruncated:!0,children:y}),Object(S.jsx)(b.a,{as:f.b,color:"blue.500","data-testid":w.author,fontSize:"sm",to:Object(g.c)({query:C}),children:C}),Object(S.jsx)(o.a,{align:"center",as:s.a,"data-testid":w.languages,direction:"row",children:Object.entries(O.c).sort((function(e,t){var a=Object(c.a)(e,1)[0],n=Object(c.a)(t,1)[0];return O.a.indexOf(a)-O.a.indexOf(n)})).map((function(e){var t=Object(c.a)(e,2),a=t[0],n=t[1],r=a,i=r===O.d.TypeScript||N.includes(r),s=r===O.d.TypeScript||O.e.has(r);if(!i)return null;var o=n.name,l=n.icon,u=Object(S.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(S.jsx)(h.a,{language:r,children:s?Object(S.jsx)(f.b,{"aria-label":"View package docs for ".concat(r),to:P({language:r}),children:u}):u},r)}))})]})]})]})},P=a(206),C=function(e){var t=e.children;return Object(S.jsx)(P.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},T=function(e){for(var t=e.noOfItems,a=[],n=0;n<t;n+=1)a.push(Object(S.jsx)(N,{},n));return Object(S.jsx)(C,{children:a})},z=Object(n.memo)(T),U=function(e){var t=e.language,a=e.results,n=e.skeleton;return(null===n||void 0===n?void 0:n.loading)?Object(S.jsx)(z,{noOfItems:n.noOfItems}):Object(S.jsx)(C,{children:a.map((function(e,a){return Object(S.jsx)(N,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},A=Object(n.memo)(U)},296:function(e,t,a){"use strict";a.d(t,"a",(function(){return y}));var n=a(301),c=a(272),r=a(145),i=a(205),s=a(6),o=a(203),l=a(24),u=a(1),j=function(e){var t=e.icon,a=e.offset,n=e.getPageUrl,c={"aria-label":"Page ".concat(a," link"),borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",icon:Object(u.jsx)(t,{color:"blue.500",h:5,w:5}),mx:2,h:10,w:10,variant:"outline"};return void 0!==a?Object(u.jsx)(o.a,Object(s.a)(Object(s.a)({},c),{},{as:l.b,to:n({offset:a})})):Object(u.jsx)(o.a,Object(s.a)(Object(s.a)({},c),{},{disabled:!0}))},d=a(4),b=a(224),f=a(195),O=a(0),g=a(20),h=function(e){var t=e.pageLimit,a=e.offset,n=e.getPageUrl,c=Object(O.useState)((a+1).toString()),r=Object(d.a)(c,2),s=r[0],o=r[1],l=Object(g.g)().push;Object(O.useEffect)((function(){o((a+1).toString())}),[a]);return Object(u.jsxs)(i.a,{align:"center",as:"form",mx:2,onSubmit:function(e){e.preventDefault(),l(n({offset:parseInt(s)-1}))},children:[Object(u.jsx)(b.a,{colorScheme:"blue",h:10,max:t+1,min:1,name:"page",onChange:function(e){e.preventDefault(),o(e.target.value)},p:0,textAlign:"center",type:"number",value:s,w:10}),Object(u.jsxs)(f.a,{ml:2,w:"max-content",children:["of ",t+1]})]})},m=a(300),p=a(149),x={children:"Next Page",colorScheme:"blue",rightIcon:Object(u.jsx)(m.a,{color:"white"})},v=function(e){var t=e.nextPageUrl;return t?Object(u.jsx)(p.a,Object(s.a)(Object(s.a)({},x),{},{as:l.b,to:t})):Object(u.jsx)(p.a,Object(s.a)(Object(s.a)({},x),{},{disabled:!0}))},y=function(e){var t=e.offset,a=e.pageLimit,s=e.getPageUrl,o=t<a?t+1:void 0,l=t>0?t-1:void 0;return Object(u.jsxs)(r.a,{alignItems:"center",pt:4,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(u.jsx)(r.b,{colStart:2,justifySelf:"center",children:Object(u.jsx)(v,{nextPageUrl:o?s({offset:o}):void 0})}),Object(u.jsx)(r.b,{colStart:3,justifySelf:"end",children:Object(u.jsxs)(i.a,{align:"center",justify:"center",py:4,children:[Object(u.jsx)(h,{getPageUrl:s,offset:t,pageLimit:a}),Object(u.jsx)(j,{getPageUrl:s,icon:n.a,offset:l}),Object(u.jsx)(j,{getPageUrl:s,icon:c.a,offset:o})]})})]})}},299:function(e,t,a){"use strict";a.d(t,"a",(function(){return d})),a.d(t,"b",(function(){return b}));var n=a(103),c=a(18),r=a(66),i=a(44),s=a(75),o=a(23),l=a(8),u=a(0);function j(){return j=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},j.apply(this,arguments)}var d=Object(c.a)((function(e,t){var a=Object(r.a)("Tag",e),n=Object(i.b)(e),c=j({display:"inline-flex",verticalAlign:"top",alignItems:"center",maxWidth:"100%"},a.container);return u.createElement(s.b,{value:a},u.createElement(o.a.span,j({ref:t},n,{__css:c})))}));l.a&&(d.displayName="Tag");var b=Object(c.a)((function(e,t){var a=Object(s.d)();return u.createElement(o.a.span,j({ref:t,isTruncated:!0},e,{__css:a.label}))}));l.a&&(b.displayName="TagLabel");var f=Object(c.a)((function(e,t){return u.createElement(n.a,j({ref:t,verticalAlign:"top",marginEnd:"0.5rem"},e))}));l.a&&(f.displayName="TagLeftIcon");var O=Object(c.a)((function(e,t){return u.createElement(n.a,j({ref:t,verticalAlign:"top",marginStart:"0.5rem"},e))}));l.a&&(O.displayName="TagRightIcon");var g=function(e){return u.createElement(n.a,j({verticalAlign:"inherit",viewBox:"0 0 512 512"},e),u.createElement("path",{fill:"currentColor",d:"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z"}))};l.a&&(g.displayName="TagCloseIcon");l.a},300:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(76),c=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},301:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(76),c=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},578:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(75);var n=a(8);a(28),a(111);a(226);var c=a(0);var r=a(23),i=a(60),s=a(18),o=a(66),l=a(44);var u=a(17);function j(){return j=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},j.apply(this,arguments)}function d(e,t){if(null==e)return{};var a,n,c={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(c[a]=e[a]);return c}var b=Object(r.a)("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),f=Object(i.b)({from:{opacity:0},to:{opacity:1}}),O=Object(s.a)((function(e,t){var a=Object(o.b)("Skeleton",e),n=function(){var e=c.useRef(!0);return c.useEffect((function(){e.current=!1}),[]),e.current}(),i=Object(l.b)(e),s=i.isLoaded,O=i.fadeDuration,g=i.className,h=d(i,["startColor","endColor","isLoaded","fadeDuration","speed","className"]),m=function(e){var t=Object(c.useRef)();return Object(c.useEffect)((function(){t.current=e}),[e]),t.current}(s),p=Object(u.d)("chakra-skeleton",g);if(s){var x=n||m?"none":f+" "+O+"s";return c.createElement(r.a.div,j({ref:t,className:p,__css:{animation:x}},h))}return c.createElement(b,j({ref:t,className:p},h,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a},597:function(e,t,a){"use strict";a.r(t),a.d(t,"SearchResults",(function(){return v})),a.d(t,"default",(function(){return v}));var n=a(6),c=a(205),r=a(190),i=a(207),s=a(0),o=a(20),l=a(116),u=a(232),j=a(294),d=a(13),b=a(117),f=a(118),O=a(115),g=a(56),h=a(296),m=a(292),p=a(293),x=a(1),v=function(){var e,t,a=Object(O.a)(),v=decodeURIComponent(null!==(e=a.get(d.b.SEARCH_QUERY))&&void 0!==e?e:""),y=a.get(d.b.LANGUAGE),w=Object(f.a)({defaultQuery:v,defaultLanguage:y}),S=function(e){var t=parseInt(e);return"NaN"==="".concat(t)?0:t}(null!==(t=a.get(d.b.OFFSET))&&void 0!==t?t:"0"),L=Object(o.g)().push,k=Object(b.a)({query:v,offset:S,limit:p.a,language:y}),E=k.results,I=k.displayable,N=k.loading,P=k.pageLimit,C=function(e){var t,a;return Object(g.c)({query:null!==(t=e.q)&&void 0!==t?t:v,language:y,offset:null!==(a=e.offset)&&void 0!==a?a:S})};return Object(s.useEffect)((function(){!N&&E.length&&(S<0||S>P)&&L(C(S<0?{offset:0}:{offset:P}))}),[N,E,P,S]),Object(s.useEffect)((function(){v!==w.query&&w.setQuery(v)}),[v]),Object(x.jsx)(u.a,{meta:{title:v||"Search",description:v?"".concat(E.length," results for ").concat(v," at Construct Hub"):"Search reusable components for your cloud application"},pageName:"search",children:Object(x.jsxs)(c.a,{direction:"column",maxW:"100vw",children:[Object(x.jsx)(r.a,{p:4,children:Object(x.jsx)(l.a,Object(n.a)({},w))}),Object(x.jsx)(i.a,{}),Object(x.jsxs)(r.a,{p:4,children:[Object(x.jsx)(c.a,{align:"center",justify:"space-between",pb:4,wrap:"wrap",children:Object(x.jsx)(m.a,{count:E.length,filtered:!!v,limit:p.a,offset:S})}),Object(x.jsx)(j.a,{language:null!==y&&void 0!==y?y:void 0,results:I,skeleton:{loading:N,noOfItems:p.a}}),Object(x.jsx)(h.a,{getPageUrl:C,limit:p.a,offset:S,pageLimit:P})]})]})})}}}]);
2
- //# sourceMappingURL=6.11aee62c.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/PackageTag/PackageTag.tsx","../../../src/ChevronRight.tsx","views/SearchResults/components/ShowingDetails.tsx","views/SearchResults/constants.ts","components/CatalogCard/testIds.ts","components/CatalogCard/CatalogCardContainer.tsx","components/CatalogCard/CatalogCardSkeleton.tsx","components/CatalogCard/CatalogCard.tsx","components/Results/ResultsGrid.tsx","components/Results/ResultsSkeleton.tsx","components/Results/Results.tsx","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/components/NextPage.tsx","views/SearchResults/components/PageControls.tsx","../../../src/tag.tsx","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","../../../src/skeleton.tsx","../../../src/use-previous.ts","views/SearchResults/SearchResults.tsx"],"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","PackageTag","language","value","label","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","ChevronRightIcon","createIcon","d","displayName","Em","as","color","fontWeight","ShowingDetails","limit","offset","count","filtered","first","last","LIMIT","testIds","createTestIds","CardContainer","Card","h","p","w","overflow","templateColumns","templateRows","CatalogCardContainer","isLink","bg","container","CatalogCardSkeleton","spacing","align","direction","px","py","CatalogCard","currentLanguage","pkg","publishDate","metadata","date","Time","Date","fontSize","format","author","languages","targets","Object","keys","getUrl","params","getPackagePath","version","authorName","maxH","maxW","Link","isTruncated","ml","Flex","tags","flexWrap","startsWith","mr","variant","keywords","filter","Boolean","slice","map","tag","noOfLines","Stack","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","TEMP_SUPPORTED_LANGUAGES","has","Icon","icon","opacity","LanguageSupportTooltip","ResultsGrid","columns","base","sm","md","lg","xl","ResultsSkeletonComponent","noOfItems","skeletons","i","push","ResultsSkeleton","memo","ResultsComponent","results","skeleton","loading","idx","Results","ArrowButton","getPageUrl","props","borderRadius","borderColor","colorScheme","mx","undefined","disabled","GoToPage","pageLimit","useState","toString","inputValue","setInputValue","useHistory","onSubmit","e","preventDefault","parseInt","max","min","onChange","target","textAlign","type","btnProps","rightIcon","ArrowForward","NextPage","nextPageUrl","PageControls","nextOffset","prevOffset","alignItems","pt","colStart","justifySelf","justify","ChevronLeftIcon","Tag","forwardRef","styles","useMultiStyleConfig","ownProps","omitThemingProps","containerStyles","display","verticalAlign","maxWidth","ref","__css","TagLabel","useStyles","TagLeftIcon","marginEnd","TagRightIcon","marginStart","TagCloseIcon","viewBox","fill","ArrowForwardIcon","StyledSkeleton","chakra","baseStyle","boxShadow","backgroundClip","cursor","pointerEvents","userSelect","visibility","fade","keyframes","from","Skeleton","useStyleConfig","isFirstRender","React","useIsFirstRender","className","wasPreviouslyLoaded","useRef","usePrevious","_className","cx","animation","fadeDuration","speed","SearchResults","queryParams","useQueryParams","searchQuery","decodeURIComponent","get","QUERY_PARAMS","SEARCH_QUERY","languageQuery","LANGUAGE","searchAPI","useCatalogSearch","defaultQuery","defaultLanguage","val","result","toNum","OFFSET","useCatalogResults","displayable","q","length","setQuery","CatalogSearch","pb","wrap"],"mappings":"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","file":"static/js/6.11aee62c.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 { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronRightIcon = createIcon({\n d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\",\n displayName: \"ChevronRightIcon\",\n})\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface ShowingDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"em\" color=\"blue.500\" fontWeight=\"bold\">\n {children}\n </Text>\n);\n\nexport const ShowingDetails: FunctionComponent<ShowingDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n return (\n <Text>\n Displaying{\" \"}\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em> {filtered ? \"search results\" : \"constructs\"}.\n </Text>\n );\n};\n","import type { QueryParamKey } from \"../../constants/url\";\n\nexport const LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"catalogCard\", [\n \"container\",\n \"name\",\n \"version\",\n \"tags\",\n \"description\",\n \"date\",\n \"author\",\n \"languages\",\n] as const);\n\nexport default testIds;\n","import { Grid, LinkBox } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../Card\";\nimport testIds from \"./testIds\";\n\nconst CardContainer: FunctionComponent = ({ children }) => (\n <Card h={64} p={0} w=\"100%\">\n <Grid\n as=\"article\"\n h=\"100%\"\n overflow=\"hidden\"\n templateColumns=\"1fr\"\n templateRows=\"2fr 1fr\"\n >\n {children}\n </Grid>\n </Card>\n);\n\nexport const CatalogCardContainer: FunctionComponent<{ isLink?: boolean }> = ({\n children,\n isLink,\n}) => {\n return isLink ? (\n <LinkBox\n _hover={{\n \"> :first-child\": {\n bg: \"gray.50\",\n },\n }}\n data-testid={testIds.container}\n >\n <CardContainer>{children}</CardContainer>\n </LinkBox>\n ) : (\n <CardContainer>{children}</CardContainer>\n );\n};\n","import { Box, Divider, Skeleton, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const CatalogCardSkeleton: FunctionComponent = () => (\n <>\n <Stack p={4} spacing={4}>\n <Skeleton h={5} w=\"50%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n <Skeleton h={3} w=\"75%\" />\n <Skeleton h={3} w=\"50%\" />\n </Stack>\n <Box>\n <Divider />\n <Stack px={4} py={2} spacing={2}>\n <Skeleton h={5} w=\"25%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n </Stack>\n </Box>\n </>\n);\n","import {\n Box,\n Divider,\n Flex,\n LinkBox,\n Link as UILink,\n LinkOverlay,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath, getSearchPath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\nimport { PackageTag } from \"../PackageTag\";\nimport { Time } from \"../Time\";\nimport { CatalogCardContainer } from \"./CatalogCardContainer\";\nimport { CatalogCardSkeleton } from \"./CatalogCardSkeleton\";\nimport testIds from \"./testIds\";\n\nexport interface CatalogCardProps {\n /**\n * Specifies the language to link to by default\n */\n language?: Language;\n /**\n * If undefined, will render a skeleton\n */\n pkg?: CatalogPackage;\n}\n\nexport const CatalogCard: FunctionComponent<CatalogCardProps> = ({\n language: currentLanguage,\n pkg,\n}) => {\n if (!pkg) {\n return (\n <CatalogCardContainer>\n <CatalogCardSkeleton />\n </CatalogCardContainer>\n );\n }\n\n const publishDate = pkg.metadata?.date ? (\n <Time\n date={new Date(pkg.metadata.date)}\n fontSize=\"sm\"\n format=\"MMMM dd, yyyy\"\n />\n ) : null;\n\n const author = pkg.author ?? {};\n const languages = pkg.languages ?? {};\n const targets = Object.keys(languages) as Language[];\n\n const getUrl = (params?: Partial<Parameters<typeof getPackagePath>[0]>) =>\n getPackagePath({\n name: pkg.name,\n version: pkg.version,\n language: currentLanguage,\n ...params,\n });\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <CatalogCardContainer isLink>\n <Stack maxH=\"100%\" maxW=\"100%\" overflow=\"hidden\" p={4} spacing={0}>\n {/* Name & Version */}\n <LinkOverlay as={Link} to={getUrl()}>\n <Text\n color=\"blue.800\"\n data-testid={testIds.name}\n fontWeight=\"semibold\"\n isTruncated\n >\n {pkg.name}\n\n <Text\n as=\"span\"\n color=\"blue.500\"\n data-testid={testIds.version}\n fontSize=\"xs\"\n ml={2}\n >\n {pkg.version}\n </Text>\n </Text>\n </LinkOverlay>\n\n {/* Tags */}\n <LinkBox\n as={Flex}\n data-testid={testIds.tags}\n flexWrap=\"wrap\"\n maxH={6}\n overflow=\"hidden\"\n >\n {[\n pkg.name.startsWith(\"@aws-cdk/\") ? (\n <PackageTag\n key=\"official\"\n label=\"official\"\n language={currentLanguage}\n mr={1}\n value=\"@aws-cdk\"\n variant=\"official\"\n >\n Official\n </PackageTag>\n ) : null,\n ...pkg.keywords\n .filter(Boolean)\n .slice(0, 3)\n .map((tag) => {\n return (\n <PackageTag\n key={tag}\n language={currentLanguage}\n mr={1}\n value={`\"${tag}\"`}\n zIndex=\"0 !important\"\n >\n {tag}\n </PackageTag>\n );\n }),\n ]}\n </LinkBox>\n <Text data-testid={testIds.description} fontSize=\"sm\" noOfLines={2}>\n {pkg.description}\n </Text>\n </Stack>\n\n {/* Bottom Details */}\n <Box>\n <Divider />\n <Stack maxW=\"100%\" overflow=\"hidden\" px={4} py={2} spacing={2}>\n <Text data-testid={testIds.date} fontSize=\"sm\" isTruncated>\n {publishDate}\n </Text>\n\n <UILink\n as={Link}\n color=\"blue.500\"\n data-testid={testIds.author}\n fontSize=\"sm\"\n to={getSearchPath({ query: authorName })}\n >\n {authorName}\n </UILink>\n\n {/* Language Support Icons */}\n <LinkBox\n align=\"center\"\n as={Stack}\n data-testid={testIds.languages}\n direction=\"row\"\n >\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript ||\n targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n h={6}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={6}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getUrl({ language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </LinkBox>\n </Stack>\n </Box>\n </CatalogCardContainer>\n );\n};\n","import { SimpleGrid } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const ResultsGrid: FunctionComponent = ({ children }) => (\n <SimpleGrid\n columns={{\n base: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n \"2xl\": 6,\n }}\n spacing={6}\n >\n {children}\n </SimpleGrid>\n);\n","import { FunctionComponent, memo } from \"react\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\n\nexport interface ResultsSkeletonProps {\n noOfItems: number;\n}\n\nconst ResultsSkeletonComponent: FunctionComponent<ResultsSkeletonProps> = ({\n noOfItems,\n}) => {\n const skeletons = [];\n\n for (let i = 0; i < noOfItems; i += 1) {\n skeletons.push(<CatalogCard key={i} />);\n }\n\n return <ResultsGrid>{skeletons}</ResultsGrid>;\n};\n\nexport const ResultsSkeleton = memo(\n ResultsSkeletonComponent\n) as typeof ResultsSkeletonComponent;\n","import { FunctionComponent, memo } from \"react\";\nimport { Packages } from \"../../api/package/packages\";\nimport { Language } from \"../../constants/languages\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\nimport { ResultsSkeleton } from \"./ResultsSkeleton\";\n\nexport interface ResultsProps {\n language?: Language;\n results: Packages[\"packages\"];\n skeleton?: {\n loading: boolean;\n noOfItems: number;\n };\n}\n\nconst ResultsComponent: FunctionComponent<ResultsProps> = ({\n language,\n results,\n skeleton,\n}) => {\n if (skeleton?.loading) {\n return <ResultsSkeleton noOfItems={skeleton.noOfItems} />;\n }\n\n return (\n <ResultsGrid>\n {results.map((pkg, idx) => (\n <CatalogCard key={`${pkg.name}-${idx}`} language={language} pkg={pkg} />\n ))}\n </ResultsGrid>\n );\n};\n\nexport const Results = memo(ResultsComponent) as typeof ResultsComponent;\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport interface GoToPageProps {\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n pageLimit,\n offset,\n getPageUrl,\n}) => {\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n const { push } = useHistory();\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n push(getPageUrl({ offset: parseInt(inputValue) - 1 }));\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n colorScheme=\"blue\"\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ArrowForwardIcon } from \"@chakra-ui/icons\";\nimport { Button } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NextPageProps {\n nextPageUrl?: string;\n}\n\nconst btnProps = {\n children: \"Next Page\",\n colorScheme: \"blue\",\n rightIcon: <ArrowForwardIcon color=\"white\" />,\n};\n\nexport const NextPage: FunctionComponent<NextPageProps> = ({ nextPageUrl }) => {\n if (!nextPageUrl) {\n return <Button {...btnProps} disabled />;\n }\n\n return <Button {...btnProps} as={Link} to={nextPageUrl} />;\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Flex, Grid, GridItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { GoToPage } from \"./GoToPage\";\nimport { NextPage } from \"./NextPage\";\n\nexport interface PageControlsProps {\n limit: number;\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n getPageUrl,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Grid\n alignItems=\"center\"\n pt={4}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <NextPage\n nextPageUrl={\n nextOffset ? getPageUrl({ offset: nextOffset }) : undefined\n }\n />\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <GoToPage\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Icon, IconProps } from \"@chakra-ui/icon\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface TagProps\n extends HTMLChakraProps<\"span\">,\n ThemingProps<\"Tag\"> {}\n\n/**\n * The tag component is used to label or categorize UI elements.\n * To style the tag globally, change the styles in `theme.components.Tag`\n * @see Docs https://chakra-ui.com/tag\n */\nexport const Tag = forwardRef<TagProps, \"span\">((props, ref) => {\n const styles = useMultiStyleConfig(\"Tag\", props)\n const ownProps = omitThemingProps(props)\n\n const containerStyles: SystemStyleObject = {\n display: \"inline-flex\",\n verticalAlign: \"top\",\n alignItems: \"center\",\n maxWidth: \"100%\",\n ...styles.container,\n }\n\n return (\n <StylesProvider value={styles}>\n <chakra.span ref={ref} {...ownProps} __css={containerStyles} />\n </StylesProvider>\n )\n})\n\nif (__DEV__) {\n Tag.displayName = \"Tag\"\n}\n\nexport interface TagLabelProps extends HTMLChakraProps<\"span\"> {}\n\nexport const TagLabel = forwardRef<TagLabelProps, \"span\">((props, ref) => {\n const styles = useStyles()\n return <chakra.span ref={ref} isTruncated {...props} __css={styles.label} />\n})\n\nif (__DEV__) {\n TagLabel.displayName = \"TagLabel\"\n}\n\nexport const TagLeftIcon = forwardRef<IconProps, \"svg\">((props, ref) => (\n <Icon ref={ref} verticalAlign=\"top\" marginEnd=\"0.5rem\" {...props} />\n))\n\nif (__DEV__) {\n TagLeftIcon.displayName = \"TagLeftIcon\"\n}\n\nexport const TagRightIcon = forwardRef<IconProps, \"svg\">((props, ref) => (\n <Icon ref={ref} verticalAlign=\"top\" marginStart=\"0.5rem\" {...props} />\n))\n\nif (__DEV__) {\n TagRightIcon.displayName = \"TagRightIcon\"\n}\n\nconst TagCloseIcon: React.FC<IconProps> = (props) => (\n <Icon verticalAlign=\"inherit\" viewBox=\"0 0 512 512\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z\"\n />\n </Icon>\n)\n\nif (__DEV__) {\n TagCloseIcon.displayName = \"TagCloseIcon\"\n}\n\nexport interface TagCloseButtonProps\n extends Omit<HTMLChakraProps<\"button\">, \"disabled\"> {\n isDisabled?: boolean\n}\n\n/**\n * TagCloseButton is used to close \"remove\" the tag\n * @see Docs https://chakra-ui.com/tag\n */\nexport const TagCloseButton: React.FC<TagCloseButtonProps> = (props) => {\n const { isDisabled, children, ...rest } = props\n\n const styles = useStyles()\n\n const btnStyles: SystemStyleObject = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n outline: \"0\",\n ...styles.closeButton,\n }\n\n return (\n <chakra.button\n {...rest}\n type=\"button\"\n aria-label=\"close\"\n disabled={isDisabled}\n __css={btnStyles}\n >\n {children || <TagCloseIcon />}\n </chakra.button>\n )\n}\n\nif (__DEV__) {\n TagCloseButton.displayName = \"TagCloseButton\"\n}\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ArrowForwardIcon = createIcon({\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\",\n displayName: \"ArrowForwardIcon\",\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronLeftIcon = createIcon({\n d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\",\n displayName: \"ChevronLeftIcon\",\n})\n","import { useBreakpointValue } from \"@chakra-ui/media-query\"\nimport {\n chakra,\n forwardRef,\n keyframes,\n omitThemingProps,\n ThemingProps,\n useStyleConfig,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { usePrevious } from \"@chakra-ui/hooks\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface SkeletonOptions {\n /**\n * The color at the animation start\n */\n startColor?: string\n /**\n * The color at the animation end\n */\n endColor?: string\n /**\n * If `true`, it'll render its children with a nice fade transition\n */\n isLoaded?: boolean\n /**\n * The animation speed in seconds\n * @default\n * 0.8\n */\n speed?: number\n /**\n * The fadeIn duration in seconds\n *\n * @default\n * 0.4\n */\n fadeDuration?: number\n}\n\nconst StyledSkeleton = chakra(\"div\", {\n baseStyle: {\n boxShadow: \"none\",\n backgroundClip: \"padding-box\",\n cursor: \"default\",\n color: \"transparent\",\n pointerEvents: \"none\",\n userSelect: \"none\",\n \"&::before, &::after, *\": {\n visibility: \"hidden\",\n },\n },\n})\n\nexport type ISkeleton = SkeletonOptions\n\nexport interface SkeletonProps\n extends HTMLChakraProps<\"div\">,\n SkeletonOptions,\n ThemingProps<\"Skeleton\"> {}\n\nconst fade = keyframes({\n from: { opacity: 0 },\n to: { opacity: 1 },\n})\n\nconst useIsFirstRender = () => {\n const isFirstRender = React.useRef(true)\n\n React.useEffect(() => {\n isFirstRender.current = false\n }, [])\n\n return isFirstRender.current\n}\n\nexport const Skeleton = forwardRef<SkeletonProps, \"div\">((props, ref) => {\n const styles = useStyleConfig(\"Skeleton\", props)\n const isFirstRender = useIsFirstRender()\n\n const {\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n className,\n ...rest\n } = omitThemingProps(props)\n\n const wasPreviouslyLoaded = usePrevious(isLoaded)\n\n const _className = cx(\"chakra-skeleton\", className)\n\n if (isLoaded) {\n const animation =\n isFirstRender || wasPreviouslyLoaded ? \"none\" : `${fade} ${fadeDuration}s`\n\n return (\n <chakra.div\n ref={ref}\n className={_className}\n __css={{ animation }}\n {...rest}\n />\n )\n }\n\n return (\n <StyledSkeleton ref={ref} className={_className} {...rest} __css={styles} />\n )\n})\n\nSkeleton.defaultProps = {\n fadeDuration: 0.4,\n speed: 0.8,\n}\n\nif (__DEV__) {\n Skeleton.displayName = \"Skeleton\"\n}\n\nfunction range(count: number) {\n return Array(count)\n .fill(1)\n .map((_, index) => index + 1)\n}\n\nexport interface SkeletonTextProps extends SkeletonProps {\n spacing?: SkeletonProps[\"margin\"]\n skeletonHeight?: SkeletonProps[\"height\"]\n startColor?: SkeletonProps[\"startColor\"]\n endColor?: SkeletonProps[\"endColor\"]\n isLoaded?: SkeletonProps[\"isLoaded\"]\n}\n\nconst defaultNoOfLines = 3\n\nexport const SkeletonText: React.FC<SkeletonTextProps> = (props) => {\n const {\n noOfLines = defaultNoOfLines,\n spacing = \"0.5rem\",\n skeletonHeight = \"0.5rem\",\n className,\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n children,\n ...rest\n } = props\n\n const noOfLinesValue =\n useBreakpointValue(\n typeof noOfLines === \"number\" ? [noOfLines] : noOfLines,\n ) || defaultNoOfLines\n const numbers = range(noOfLinesValue)\n\n const getWidth = (index: number) => {\n if (noOfLinesValue > 1) {\n return index === numbers.length ? \"80%\" : \"100%\"\n }\n return \"100%\"\n }\n\n const _className = cx(\"chakra-skeleton__group\", className)\n\n return (\n <chakra.div className={_className} {...rest}>\n {numbers.map((number, index) => {\n if (isLoaded && index > 0) {\n // skip other lines\n return null\n }\n\n const sizeProps = isLoaded\n ? null\n : {\n mb: number === numbers.length ? \"0\" : spacing,\n width: getWidth(number),\n height: skeletonHeight,\n }\n\n return (\n <Skeleton\n key={numbers.length.toString() + number}\n startColor={startColor}\n endColor={endColor}\n isLoaded={isLoaded}\n fadeDuration={fadeDuration}\n speed={speed}\n {...sizeProps}\n >\n {\n // allows animating the children\n index === 0 ? children : undefined\n }\n </Skeleton>\n )\n })}\n </chakra.div>\n )\n}\n\nif (__DEV__) {\n SkeletonText.displayName = \"SkeletonText\"\n}\n\nexport const SkeletonCircle: React.FC<SkeletonProps> = ({\n size = \"2rem\",\n ...rest\n}) => <Skeleton borderRadius=\"full\" boxSize={size} {...rest} />\n\nif (__DEV__) {\n SkeletonCircle.displayName = \"SkeletonCircle\"\n}\n","import { useRef, useEffect } from \"react\"\n\nexport function usePrevious<T>(value: T) {\n const ref = useRef<T | undefined>()\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current as T\n}\n","import { Box, Divider, Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Results } from \"../../components/Results\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { getSearchPath } from \"../../util/url\";\nimport { PageControls } from \"./components/PageControls\";\nimport { ShowingDetails } from \"./components/ShowingDetails\";\nimport { LIMIT, SearchQueryParam } from \"./constants\";\n\nconst toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const SearchResults: FunctionComponent = () => {\n const queryParams = useQueryParams();\n\n const searchQuery = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languageQuery = queryParams.get(\n QUERY_PARAMS.LANGUAGE\n ) as Language | null;\n\n const searchAPI = useCatalogSearch({\n defaultQuery: searchQuery,\n defaultLanguage: languageQuery,\n });\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const { push } = useHistory();\n\n const { results, displayable, loading, pageLimit } = useCatalogResults({\n query: searchQuery,\n offset,\n limit: LIMIT,\n language: languageQuery,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n query: (params.q ?? searchQuery) as string,\n language: languageQuery,\n offset: params.offset ?? offset,\n });\n };\n\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (!loading && results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, results, pageLimit, offset]);\n\n useEffect(() => {\n // Reflect changes to queryParam to search input (specifically for tag clicks)\n if (searchQuery !== searchAPI.query) {\n searchAPI.setQuery(searchQuery);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery]);\n\n return (\n <Page\n meta={{\n title: searchQuery || \"Search\",\n description: searchQuery\n ? `${results.length} results for ${searchQuery} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Flex direction=\"column\" maxW=\"100vw\">\n <Box p={4}>\n <CatalogSearch {...searchAPI} />\n </Box>\n <Divider />\n <Box p={4}>\n <Flex align=\"center\" justify=\"space-between\" pb={4} wrap=\"wrap\">\n <ShowingDetails\n count={results.length}\n filtered={!!searchQuery}\n limit={LIMIT}\n offset={offset}\n />\n </Flex>\n <Results\n language={languageQuery ?? undefined}\n results={displayable}\n skeleton={{ loading, noOfItems: LIMIT }}\n />\n <PageControls\n getPageUrl={getUrl}\n limit={LIMIT}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Flex>\n </Page>\n );\n};\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[7],{232:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),r=a(241),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=a(112),s=a(1),o=function(e){var t=e.children,a=e.meta,o=e.pageName,l=Object(i.b)(c[o]);Object(n.useEffect)((function(){l()}),[l]);var u=a.suffix,d=void 0===u||u,j=a.title,b=a.description,f=d?"".concat(j," - Construct Hub"):j;return Object(s.jsxs)(s.Fragment,{children:[Object(s.jsxs)(r.a,{children:[!1,Object(s.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(s.jsx)("meta",{charSet:"utf-8"}),Object(s.jsx)("title",{children:f}),Object(s.jsx)("meta",{content:f,property:"og:title"}),Object(s.jsx)("meta",{content:f,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:b,name:"description"}),Object(s.jsx)("meta",{content:b,property:"og:description"}),Object(s.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},248:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(18),i=a(190),s=a(298),o=a(1),l=["sources"],u=Object(c.a)((function(e,t){var a=e.sources,c=Object(r.a)(e,l);return Object(o.jsxs)(i.a,{as:"picture",children:[null===a||void 0===a?void 0:a.map((function(e,t){return Object(o.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(o.jsx)(s.a,Object(n.a)({ref:t},c))]})}));u.displayName="Picture"},260:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(299),i=a(56),s=a(68),o=a(1),l=["children","language","value","label","zIndex"],u=function(e){var t=e.children,a=e.language,u=e.value,d=e.label,j=void 0===d?u:d,b=e.zIndex,f=Object(r.a)(e,l);return Object(o.jsx)(s.a,{"aria-label":"Tag: ".concat(j),to:Object(i.c)({query:"".concat(u),language:a}),zIndex:b,children:Object(o.jsx)(c.a,Object(n.a)(Object(n.a)({_hover:{textDecoration:"underline"}},f),{},{children:Object(o.jsx)(c.b,{children:t})}))})}},272:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(76),r=Object(n.a)({d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",displayName:"ChevronRightIcon"})},294:function(e,t,a){"use strict";a.d(t,"a",(function(){return _}));var n=a(0),r=a(4),c=a(19),i=a(6),s=a(229),o=a(216),l=a(195),u=a(205),d=a(190),j=a(207),b=a(200),f=a(24),O=a(25),h=a(56),m=a(120),p=a(260),g=a(119),x=a(145),v=a(113),w=a(37),y=Object(w.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),k=a(1),S=function(e){var t=e.children;return Object(k.jsx)(v.a,{h:64,p:0,w:"100%",children:Object(k.jsx)(x.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},L=function(e){var t=e.children;return e.isLink?Object(k.jsx)(o.a,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":y.container,children:Object(k.jsx)(S,{children:t})}):Object(k.jsx)(S,{children:t})},C=a(578),I=function(){return Object(k.jsxs)(k.Fragment,{children:[Object(k.jsxs)(s.a,{p:4,spacing:4,children:[Object(k.jsx)(C.a,{h:5,w:"50%"}),Object(k.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(k.jsx)(C.a,{h:5,w:10}),Object(k.jsx)(C.a,{h:5,w:10}),Object(k.jsx)(C.a,{h:5,w:10})]}),Object(k.jsx)(C.a,{h:3,w:"75%"}),Object(k.jsx)(C.a,{h:3,w:"50%"})]}),Object(k.jsxs)(d.a,{children:[Object(k.jsx)(j.a,{}),Object(k.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(k.jsx)(C.a,{h:5,w:"25%"}),Object(k.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(k.jsx)(C.a,{h:5,w:10}),Object(k.jsx)(C.a,{h:5,w:10}),Object(k.jsx)(C.a,{h:5,w:10}),Object(k.jsx)(C.a,{h:5,w:10})]})]})]})]})},N=function(e){var t,a,n,x=e.language,v=e.pkg;if(!v)return Object(k.jsx)(L,{children:Object(k.jsx)(I,{})});var w=(null===(t=v.metadata)||void 0===t?void 0:t.date)?Object(k.jsx)(g.a,{date:new Date(v.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,S=null!==(a=v.author)&&void 0!==a?a:{},C=null!==(n=v.languages)&&void 0!==n?n:{},N=Object.keys(C),E=function(e){return Object(h.a)(Object(i.a)({name:v.name,version:v.version,language:x},e))},z="string"===typeof S?S:S.name;return Object(k.jsxs)(L,{isLink:!0,children:[Object(k.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(k.jsx)(o.b,{as:f.b,to:E(),children:Object(k.jsxs)(l.a,{color:"blue.800","data-testid":y.name,fontWeight:"semibold",isTruncated:!0,children:[v.name,Object(k.jsx)(l.a,{as:"span",color:"blue.500","data-testid":y.version,fontSize:"xs",ml:2,children:v.version})]})}),Object(k.jsx)(o.a,{as:u.a,"data-testid":y.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[v.name.startsWith("@aws-cdk/")?Object(k.jsx)(p.a,{label:"official",language:x,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(c.a)(v.keywords.filter(Boolean).slice(0,3).map((function(e){return Object(k.jsx)(p.a,{language:x,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(k.jsx)(l.a,{"data-testid":y.description,fontSize:"sm",noOfLines:2,children:v.description})]}),Object(k.jsxs)(d.a,{children:[Object(k.jsx)(j.a,{}),Object(k.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(k.jsx)(l.a,{"data-testid":y.date,fontSize:"sm",isTruncated:!0,children:w}),Object(k.jsx)(b.a,{as:f.b,color:"blue.500","data-testid":y.author,fontSize:"sm",to:Object(h.c)({query:z}),children:z}),Object(k.jsx)(o.a,{align:"center",as:s.a,"data-testid":y.languages,direction:"row",children:Object.entries(O.c).sort((function(e,t){var a=Object(r.a)(e,1)[0],n=Object(r.a)(t,1)[0];return O.a.indexOf(a)-O.a.indexOf(n)})).map((function(e){var t=Object(r.a)(e,2),a=t[0],n=t[1],c=a,i=c===O.d.TypeScript||N.includes(c),s=c===O.d.TypeScript||O.e.has(c);if(!i)return null;var o=n.name,l=n.icon,u=Object(k.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(k.jsx)(m.a,{language:c,children:s?Object(k.jsx)(f.b,{"aria-label":"View package docs for ".concat(c),to:E({language:c}),children:u}):u},c)}))})]})]})]})},E=a(206),z=function(e){var t=e.children;return Object(k.jsx)(E.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},P=function(e){for(var t=e.noOfItems,a=[],n=0;n<t;n+=1)a.push(Object(k.jsx)(N,{},n));return Object(k.jsx)(z,{children:a})},T=Object(n.memo)(P),F=function(e){var t=e.language,a=e.results,n=e.skeleton;return(null===n||void 0===n?void 0:n.loading)?Object(k.jsx)(T,{noOfItems:n.noOfItems}):Object(k.jsx)(z,{children:a.map((function(e,a){return Object(k.jsx)(N,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},_=Object(n.memo)(F)},298:function(e,t,a){"use strict";a.d(t,"a",(function(){return b}));var n=a(18),r=a(23),c=a(28),i=a(8),s=a(0),o=a(4),l=a(142);function u(){return u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},u.apply(this,arguments)}function d(e,t){if(null==e)return{};var a,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)a=c[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}var j=s.forwardRef((function(e,t){var a=e.htmlWidth,n=e.htmlHeight,r=e.alt,c=d(e,["htmlWidth","htmlHeight","alt"]);return s.createElement("img",u({width:a,height:n,ref:t,alt:r},c))})),b=Object(n.a)((function(e,t){var a=e.fallbackSrc,n=e.fallback,i=e.src,b=e.srcSet,f=e.align,O=e.fit,h=e.loading,m=e.ignoreFallback,p=e.crossOrigin,g=d(e,["fallbackSrc","fallback","src","srcSet","align","fit","loading","ignoreFallback","crossOrigin"]),x=null!=h||m||void 0===a&&void 0===n,v=function(e){var t=e.loading,a=e.src,n=e.srcSet,r=e.onLoad,c=e.onError,i=e.crossOrigin,u=e.sizes,d=e.ignoreFallback,j=Object(s.useState)("pending"),b=Object(o.a)(j,2),f=b[0],O=b[1];Object(s.useEffect)((function(){O(a?"loading":"pending")}),[a]);var h=Object(s.useRef)(),m=Object(s.useCallback)((function(){if(a){p();var e=new Image;e.src=a,i&&(e.crossOrigin=i),n&&(e.srcset=n),u&&(e.sizes=u),t&&(e.loading=t),e.onload=function(e){p(),O("loaded"),null==r||r(e)},e.onerror=function(e){p(),O("failed"),null==c||c(e)},h.current=e}}),[a,i,n,u,r,c,t]),p=function(){h.current&&(h.current.onload=null,h.current.onerror=null,h.current=null)};return Object(l.a)((function(){if(!d)return"loading"===f&&m(),function(){p()}}),[f,m,d]),d?"loaded":f}(u({},e,{ignoreFallback:x})),w=u({ref:t,objectFit:O,objectPosition:f},x?g:Object(c.g)(g,["onError","onLoad"]));return"loaded"!==v?n||s.createElement(r.a.img,u({as:j,className:"chakra-image__placeholder",src:a},w)):s.createElement(r.a.img,u({as:j,src:i,srcSet:b,crossOrigin:p,loading:h,className:"chakra-image"},w))}));i.a&&(b.displayName="Image")},299:function(e,t,a){"use strict";a.d(t,"a",(function(){return j})),a.d(t,"b",(function(){return b}));var n=a(103),r=a(18),c=a(66),i=a(44),s=a(75),o=a(23),l=a(8),u=a(0);function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},d.apply(this,arguments)}var j=Object(r.a)((function(e,t){var a=Object(c.a)("Tag",e),n=Object(i.b)(e),r=d({display:"inline-flex",verticalAlign:"top",alignItems:"center",maxWidth:"100%"},a.container);return u.createElement(s.b,{value:a},u.createElement(o.a.span,d({ref:t},n,{__css:r})))}));l.a&&(j.displayName="Tag");var b=Object(r.a)((function(e,t){var a=Object(s.d)();return u.createElement(o.a.span,d({ref:t,isTruncated:!0},e,{__css:a.label}))}));l.a&&(b.displayName="TagLabel");var f=Object(r.a)((function(e,t){return u.createElement(n.a,d({ref:t,verticalAlign:"top",marginEnd:"0.5rem"},e))}));l.a&&(f.displayName="TagLeftIcon");var O=Object(r.a)((function(e,t){return u.createElement(n.a,d({ref:t,verticalAlign:"top",marginStart:"0.5rem"},e))}));l.a&&(O.displayName="TagRightIcon");var h=function(e){return u.createElement(n.a,d({verticalAlign:"inherit",viewBox:"0 0 512 512"},e),u.createElement("path",{fill:"currentColor",d:"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z"}))};l.a&&(h.displayName="TagCloseIcon");l.a},300:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(76),r=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},301:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(76),r=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},578:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(75);var n=a(8);a(28),a(111);a(226);var r=a(0);var c=a(23),i=a(60),s=a(18),o=a(66),l=a(44);var u=a(17);function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},d.apply(this,arguments)}function j(e,t){if(null==e)return{};var a,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)a=c[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}var b=Object(c.a)("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),f=Object(i.b)({from:{opacity:0},to:{opacity:1}}),O=Object(s.a)((function(e,t){var a=Object(o.b)("Skeleton",e),n=function(){var e=r.useRef(!0);return r.useEffect((function(){e.current=!1}),[]),e.current}(),i=Object(l.b)(e),s=i.isLoaded,O=i.fadeDuration,h=i.className,m=j(i,["startColor","endColor","isLoaded","fadeDuration","speed","className"]),p=function(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){t.current=e}),[e]),t.current}(s),g=Object(u.d)("chakra-skeleton",h);if(s){var x=n||p?"none":f+" "+O+"s";return r.createElement(c.a.div,d({ref:t,className:g,__css:{animation:x}},m))}return r.createElement(b,d({ref:t,className:g},m,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a},596:function(e,t,a){"use strict";a.r(t),a.d(t,"Home",(function(){return E})),a.d(t,"default",(function(){return E}));var n=a(6),r=a(4),c=a(190),i=a(229),s=a(211),o=a(578),l=a(0),u=a(116),d=a(232),j=a(248),b=a(294),f=a(117),O=a(118),h=a(300),m=a(301),p=a(272),g=a(145),x=a(149),v=a(205),w=a(203),y=a(37),k=Object(y.a)("home",["headings","results","nextPageBtn","nextIcon","prevIcon"]),S=a(1),L={borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",mx:2,h:10,w:10,variant:"outline"},C={color:"blue.500",h:5,w:5},I=function(e){var t=e.offset,a=e.pageLimit,r=e.setOffset,c=t===a,i=0===t,s=function(){r(t+1)};return Object(S.jsxs)(g.a,{alignItems:"center",pt:6,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(S.jsx)(g.b,{colStart:2,justifySelf:"center",children:Object(S.jsx)(x.a,{colorScheme:"blue","data-testid":k.nextPageBtn,disabled:c,onClick:s,rightIcon:Object(S.jsx)(h.a,{color:"white"}),children:"Next Page"})}),Object(S.jsx)(g.b,{colStart:3,justifySelf:"end",children:Object(S.jsxs)(v.a,{align:"center",justify:"center",py:4,children:[Object(S.jsx)(w.a,Object(n.a)({"aria-label":"Previous Page","data-testid":k.prevIcon,disabled:i,icon:Object(S.jsx)(m.a,Object(n.a)({},C)),onClick:function(){r(t-1)}},L)),Object(S.jsx)(w.a,Object(n.a)({"aria-label":"Next Page","data-testid":k.nextIcon,disabled:c,icon:Object(S.jsx)(p.a,Object(n.a)({},C)),onClick:s},L))]})})]})},N={optimal:[{media:"(max-width:1024px)",srcSet:"/assets/hive@50.webp"},{media:"(min-width:1024px)",srcSet:"/assets/hive@100.webp"},{media:"(min-width:1024px)",srcSet:"/assets/hive@100.png"}],fallback:"/assets/hive@50.png"},E=function(){var e=Object(O.a)(),t=Object(l.useState)(0),a=Object(r.a)(t,2),h=a[0],m=a[1],p=Object(f.a)({offset:h,limit:20,query:"",language:null}),g=p.results,x=p.displayable,v=p.loading,w=p.pageLimit;return Object(S.jsx)(d.a,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.",suffix:!1},pageName:"home",children:Object(S.jsxs)(c.a,{position:"relative",children:[Object(S.jsx)(j.a,{alt:"",h:"540px",position:"absolute",sources:N.optimal,src:N.fallback,top:"0",w:"100%",zIndex:"hide"}),Object(S.jsxs)(i.a,{align:"stretch",direction:"column",justify:"center",m:"0 auto",maxW:"container.lg",p:[10,15,20],spacing:8,children:[Object(S.jsxs)(i.a,{color:"blue.800","data-testid":k.headings,spacing:4,textAlign:"center",children:[Object(S.jsx)(s.a,{size:"2xl",children:"Find reusable components for your cloud applications"}),Object(S.jsx)(s.a,{as:"h3",size:"md",children:"AWS CDK | CDK for Terraform | CDK For Kubernetes"}),Object(S.jsxs)(s.a,{as:"h4",mb:8,size:"sm",children:["Search from"," ",g.length?Object(S.jsx)(c.a,{as:"span",color:"blue.500",children:g.length}):Object(S.jsx)(o.a,{display:"inline-block",h:3,w:8})," ","construct libraries"]})]}),Object(S.jsx)(u.a,Object(n.a)({},e))]}),Object(S.jsxs)(c.a,{p:4,pb:8,children:[Object(S.jsx)(b.a,{results:x,skeleton:{loading:v,noOfItems:20}}),Object(S.jsx)(I,{offset:h,pageLimit:w,setOffset:m})]})]})})}}}]);
2
- //# sourceMappingURL=7.c53ed1ae.chunk.js.map