construct-hub 0.2.1 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/.jsii +2 -2
  2. package/lib/backend/transliterator/transliterator.bundle/Dockerfile +7 -3
  3. package/lib/backend/transliterator/transliterator.bundle/index.js +495 -238
  4. package/lib/construct-hub.js +1 -1
  5. package/lib/package-sources/code-artifact.js +1 -1
  6. package/lib/package-sources/npmjs.js +1 -1
  7. package/lib/spdx-license.js +1 -1
  8. package/package.json +9 -9
  9. package/website/asset-manifest.json +38 -34
  10. package/website/assets/aws-cdk.png +0 -0
  11. package/website/assets/kubernetes.png +0 -0
  12. package/website/assets/terraform.png +0 -0
  13. package/website/index.html +1 -1
  14. package/website/service-worker.js +1 -1
  15. package/website/service-worker.js.map +1 -1
  16. package/website/static/js/{0.ff9d42f8.chunk.js → 0.074504b3.chunk.js} +2 -2
  17. package/website/static/js/{0.ff9d42f8.chunk.js.map → 0.074504b3.chunk.js.map} +1 -1
  18. package/website/static/js/1.272635ed.chunk.js +2 -0
  19. package/website/static/js/{1.bd0a2241.chunk.js.map → 1.272635ed.chunk.js.map} +1 -1
  20. package/website/static/js/10.d664efc4.chunk.js +2 -0
  21. package/website/static/js/10.d664efc4.chunk.js.map +1 -0
  22. package/website/static/js/11.6f7f0c4b.chunk.js +2 -0
  23. package/website/static/js/{10.32615aa0.chunk.js.map → 11.6f7f0c4b.chunk.js.map} +1 -1
  24. package/website/static/js/12.c21a676e.chunk.js +2 -0
  25. package/website/static/js/12.c21a676e.chunk.js.map +1 -0
  26. package/website/static/js/{11.051d89fc.chunk.js → 13.8635b63a.chunk.js} +2 -2
  27. package/website/static/js/{11.051d89fc.chunk.js.map → 13.8635b63a.chunk.js.map} +1 -1
  28. package/website/static/js/{12.e96b82dd.chunk.js → 14.86414212.chunk.js} +3 -3
  29. package/website/static/js/{12.e96b82dd.chunk.js.LICENSE.txt → 14.86414212.chunk.js.LICENSE.txt} +0 -0
  30. package/website/static/js/{12.e96b82dd.chunk.js.map → 14.86414212.chunk.js.map} +1 -1
  31. package/website/static/js/{13.fb054c47.chunk.js → 15.78ca2283.chunk.js} +2 -2
  32. package/website/static/js/{13.fb054c47.chunk.js.map → 15.78ca2283.chunk.js.map} +1 -1
  33. package/website/static/js/4.53a8d553.chunk.js +3 -0
  34. package/website/static/js/{4.7cd92fab.chunk.js.LICENSE.txt → 4.53a8d553.chunk.js.LICENSE.txt} +0 -0
  35. package/website/static/js/4.53a8d553.chunk.js.map +1 -0
  36. package/website/static/js/5.5d827820.chunk.js +3 -0
  37. package/website/static/js/{5.0da0a8ef.chunk.js.LICENSE.txt → 5.5d827820.chunk.js.LICENSE.txt} +0 -0
  38. package/website/static/js/{5.0da0a8ef.chunk.js.map → 5.5d827820.chunk.js.map} +1 -1
  39. package/website/static/js/6.f37a117e.chunk.js +2 -0
  40. package/website/static/js/{6.c0e3f99c.chunk.js.map → 6.f37a117e.chunk.js.map} +1 -1
  41. package/website/static/js/{7.11632168.chunk.js → 7.a4739ebc.chunk.js} +2 -2
  42. package/website/static/js/{7.11632168.chunk.js.map → 7.a4739ebc.chunk.js.map} +1 -1
  43. package/website/static/js/{8.8af79a83.chunk.js → 8.b0c4d0d8.chunk.js} +2 -2
  44. package/website/static/js/{8.8af79a83.chunk.js.map → 8.b0c4d0d8.chunk.js.map} +1 -1
  45. package/website/static/js/9.dcbf33c2.chunk.js +2 -0
  46. package/website/static/js/9.dcbf33c2.chunk.js.map +1 -0
  47. package/website/static/js/main.e289a3fc.chunk.js +2 -0
  48. package/website/static/js/main.e289a3fc.chunk.js.map +1 -0
  49. package/website/static/js/runtime-main.fa5c7ad1.js +2 -0
  50. package/website/static/js/runtime-main.fa5c7ad1.js.map +1 -0
  51. package/website/static/js/1.bd0a2241.chunk.js +0 -2
  52. package/website/static/js/10.32615aa0.chunk.js +0 -2
  53. package/website/static/js/4.7cd92fab.chunk.js +0 -3
  54. package/website/static/js/4.7cd92fab.chunk.js.map +0 -1
  55. package/website/static/js/5.0da0a8ef.chunk.js +0 -3
  56. package/website/static/js/6.c0e3f99c.chunk.js +0 -2
  57. package/website/static/js/9.2b21526e.chunk.js +0 -2
  58. package/website/static/js/9.2b21526e.chunk.js.map +0 -1
  59. package/website/static/js/main.f1390607.chunk.js +0 -2
  60. package/website/static/js/main.f1390607.chunk.js.map +0 -1
  61. package/website/static/js/runtime-main.2f83ac68.js +0 -2
  62. package/website/static/js/runtime-main.2f83ac68.js.map +0 -1
@@ -1,2 +1,2 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[7],{228:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),r=a(239),c={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=a(109),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]})}},251:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(21),i=a(184),s=a(337),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"},252:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(215),r=a(54),c=a(1),i=function(e){var t=e.children,a=e.language;return r.e.has(a)?Object(c.jsx)(c.Fragment,{children:t}):Object(c.jsx)(n.a,{hasArrow:!0,label:"Documentation support for ".concat(r.b[a]," is coming soon!"),placement:"top-start",children:Object(c.jsx)("span",{children:t})})}},253:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(568),i=a(108),s=a(80),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})}))})}},254:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(21),i=a(184),s=a(582),o=a(1),l=["date","format"],u=Object(c.a)((function(e,t){var a=e.date,c=e.format,u=Object(r.a)(e,l);return Object(o.jsx)(i.a,Object(n.a)(Object(n.a)({as:"time",dateTime:a.toISOString(),ref:t},u),{},{children:Object(s.a)(a,c)}))}));u.displayName="Time"},285:function(e,t,a){"use strict";a.d(t,"a",(function(){return A}));var n=a(0),r=a(4),c=a(17),i=a(6),s=a(221),o=a(21),l=a(25),u=a(20);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(o.a)((function(e,t){var a=e.isExternal,r=e.target,c=e.rel,i=e.className,s=j(e,["isExternal","target","rel","className"]);return n.createElement(l.a.a,d({},s,{ref:t,className:Object(u.d)("chakra-linkbox__overlay",i),rel:a?"noopener noreferrer":c,target:a?"_blank":r,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),f=Object(o.a)((function(e,t){var a=e.className,r=j(e,["className"]);return n.createElement(l.a.div,d({ref:t,position:"relative"},r,{className:Object(u.d)("chakra-linkbox",a),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))})),O=a(189),h=a(199),m=a(184),p=a(201),x=a(194),g=a(29),v=a(54),w=a(108),y=a(252),k=a(253),S=a(254),I=a(141),N=a(112),C=a(57),L=Object(C.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),z=a(1),P=function(e){var t=e.children;return Object(z.jsx)(N.a,{h:64,p:0,w:"100%",children:Object(z.jsx)(I.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},_=function(e){var t=e.children;return e.isLink?Object(z.jsx)(f,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":L.container,children:Object(z.jsx)(P,{children:t})}):Object(z.jsx)(P,{children:t})},E=a(564),F=function(){return Object(z.jsxs)(z.Fragment,{children:[Object(z.jsxs)(s.a,{p:4,spacing:4,children:[Object(z.jsx)(E.a,{h:5,w:"50%"}),Object(z.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10})]}),Object(z.jsx)(E.a,{h:3,w:"75%"}),Object(z.jsx)(E.a,{h:3,w:"50%"})]}),Object(z.jsxs)(m.a,{children:[Object(z.jsx)(p.a,{}),Object(z.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(z.jsx)(E.a,{h:5,w:"25%"}),Object(z.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10})]})]})]})]})},D=function(e){var t,a,n,o=e.language,l=e.pkg;if(!l)return Object(z.jsx)(_,{children:Object(z.jsx)(F,{})});var u=(null===(t=l.metadata)||void 0===t?void 0:t.date)?Object(z.jsx)(S.a,{date:new Date(l.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,d=null!==(a=l.author)&&void 0!==a?a:{},j=null!==(n=l.languages)&&void 0!==n?n:{},I=Object.keys(j),N=function(e){return Object(w.a)(Object(i.a)({name:l.name,version:l.version,language:o},e))},C="string"===typeof d?d:d.name;return Object(z.jsxs)(_,{isLink:!0,children:[Object(z.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(z.jsx)(b,{as:g.b,to:N(),children:Object(z.jsxs)(O.a,{color:"blue.800","data-testid":L.name,fontWeight:"semibold",isTruncated:!0,children:[l.name,Object(z.jsx)(O.a,{as:"span",color:"blue.500","data-testid":L.version,fontSize:"xs",ml:2,children:l.version})]})}),Object(z.jsx)(f,{as:h.a,"data-testid":L.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[l.name.startsWith("@aws-cdk/")?Object(z.jsx)(k.a,{label:"official",language:o,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(c.a)(l.keywords.filter(Boolean).slice(0,3).map((function(e){return Object(z.jsx)(k.a,{language:o,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(z.jsx)(O.a,{"data-testid":L.description,fontSize:"sm",noOfLines:2,children:l.description})]}),Object(z.jsxs)(m.a,{children:[Object(z.jsx)(p.a,{}),Object(z.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(z.jsx)(O.a,{"data-testid":L.date,fontSize:"sm",isTruncated:!0,children:u}),Object(z.jsx)(x.a,{as:g.b,color:"blue.500","data-testid":L.author,fontSize:"sm",to:Object(w.c)({query:C}),children:C}),Object(z.jsx)(f,{align:"center",as:s.a,"data-testid":L.languages,direction:"row",children:Object.entries(v.c).sort((function(e,t){var a=Object(r.a)(e,1)[0],n=Object(r.a)(t,1)[0];return v.a.indexOf(a)-v.a.indexOf(n)})).map((function(e){var t=Object(r.a)(e,2),a=t[0],n=t[1],c=a,i=c===v.d.TypeScript||I.includes(c),s=c===v.d.TypeScript||v.e.has(c);if(!i)return null;var o=n.name,l=n.icon,u=Object(z.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(z.jsx)(y.a,{language:c,children:s?Object(z.jsx)(g.b,{"aria-label":"View package docs for ".concat(c),to:N({language:c}),children:u}):u},c)}))})]})]})]})},T=a(200),H=function(e){var t=e.children;return Object(z.jsx)(T.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},W=function(e){for(var t=e.noOfItems,a=[],n=0;n<t;n+=1)a.push(Object(z.jsx)(D,{},n));return Object(z.jsx)(H,{children:a})},K=Object(n.memo)(W),R=function(e){var t=e.language,a=e.results,n=e.skeleton;return(null===n||void 0===n?void 0:n.loading)?Object(z.jsx)(K,{noOfItems:n.noOfItems}):Object(z.jsx)(H,{children:a.map((function(e,a){return Object(z.jsx)(D,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},A=Object(n.memo)(R)},337:function(e,t,a){"use strict";a.d(t,"a",(function(){return b}));var n=a(21),r=a(25),c=a(27),i=a(8),s=a(0),o=a(4),l=a(138);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.align,f=e.fit,O=e.loading,h=e.ignoreFallback,m=e.crossOrigin,p=d(e,["fallbackSrc","fallback","src","align","fit","loading","ignoreFallback","crossOrigin"]),x=null!=O||h,g=function(e){var t=e.src,a=e.srcSet,n=e.onLoad,r=e.onError,c=e.crossOrigin,i=e.sizes,u=e.ignoreFallback,d=Object(s.useState)("pending"),j=Object(o.a)(d,2),b=j[0],f=j[1];Object(s.useEffect)((function(){f(t?"loading":"pending")}),[t]);var O=Object(s.useRef)(),h=Object(s.useCallback)((function(){if(t){m();var e=new Image;e.src=t,c&&(e.crossOrigin=c),a&&(e.srcset=a),i&&(e.sizes=i),e.onload=function(e){m(),f("loaded"),null==n||n(e)},e.onerror=function(e){m(),f("failed"),null==r||r(e)},O.current=e}}),[t,c,a,i,n,r]),m=function(){O.current&&(O.current.onload=null,O.current.onerror=null,O.current=null)};return Object(l.a)((function(){if(!u)return"loading"===b&&h(),function(){m()}}),[b,h,u]),u?"loaded":b}(u({},e,{ignoreFallback:x})),v=u({ref:t,objectFit:f,objectPosition:b},x?p:Object(c.g)(p,["onError","onLoad"]));return"loaded"!==g?n||s.createElement(r.a.img,u({as:j,className:"chakra-image__placeholder",src:a},v)):s.createElement(r.a.img,u({as:j,src:i,crossOrigin:m,loading:O,className:"chakra-image"},v))}));i.a&&(b.displayName="Image")},340:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(73),r=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},341:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(73),r=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},564:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(72);var n=a(8);a(27),a(107);a(218);var r=a(0);var c=a(25),i=a(59),s=a(21),o=a(66),l=a(43);var u=a(20);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),x=Object(u.d)("chakra-skeleton",h);if(s){var g=n||p?"none":f+" "+O+"s";return r.createElement(c.a.div,d({ref:t,className:x,__css:{animation:g}},m))}return r.createElement(b,d({ref:t,className:x},m,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a},586:function(e,t,a){"use strict";a.r(t),a.d(t,"Home",(function(){return z})),a.d(t,"default",(function(){return z}));var n=a(6),r=a(4),c=a(184),i=a(221),s=a(205),o=a(564),l=a(0),u=a(116),d=a(228),j=a(251),b=a(285),f=a(117),O=a(118),h=a(340),m=a(341),p=a(569),x=a(141),g=a(145),v=a(199),w=a(197),y=a(57),k=Object(y.a)("home",["headings","results","nextPageBtn","nextIcon","prevIcon"]),S=a(1),I={borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",mx:2,h:10,w:10,variant:"outline"},N={color:"blue.500",h:5,w:5},C=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)(x.a,{alignItems:"center",pt:6,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(S.jsx)(x.b,{colStart:2,justifySelf:"center",children:Object(S.jsx)(g.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)(x.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)({},N)),onClick:function(){r(t-1)}},I)),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)({},N)),onClick:s},I))]})})]})},L={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"},z=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}),x=p.results,g=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:L.optimal,src:L.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"," ",x.length?Object(S.jsx)(c.a,{as:"span",color:"blue.500",children:x.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:g,skeleton:{loading:v,noOfItems:20}}),Object(S.jsx)(C,{offset:h,pageLimit:w,setOffset:m})]})]})})}}}]);
2
- //# sourceMappingURL=7.11632168.chunk.js.map
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[7],{224:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),r=a(233),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(109),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]})}},240:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(21),i=a(184),s=a(287),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"},252:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(215),r=a(54),c=a(1),i=function(e){var t=e.children,a=e.language;return r.e.has(a)?Object(c.jsx)(c.Fragment,{children:t}):Object(c.jsx)(n.a,{hasArrow:!0,label:"Documentation support for ".concat(r.b[a]," is coming soon!"),placement:"top-start",children:Object(c.jsx)("span",{children:t})})}},253:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(570),i=a(110),s=a(80),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})}))})}},254:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(21),i=a(184),s=a(582),o=a(1),l=["date","format"],u=Object(c.a)((function(e,t){var a=e.date,c=e.format,u=Object(r.a)(e,l);return Object(o.jsx)(i.a,Object(n.a)(Object(n.a)({as:"time",dateTime:a.toISOString(),ref:t},u),{},{children:Object(s.a)(a,c)}))}));u.displayName="Time"},285:function(e,t,a){"use strict";a.d(t,"a",(function(){return A}));var n=a(0),r=a(4),c=a(17),i=a(6),s=a(221),o=a(21),l=a(25),u=a(20);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(o.a)((function(e,t){var a=e.isExternal,r=e.target,c=e.rel,i=e.className,s=j(e,["isExternal","target","rel","className"]);return n.createElement(l.a.a,d({},s,{ref:t,className:Object(u.d)("chakra-linkbox__overlay",i),rel:a?"noopener noreferrer":c,target:a?"_blank":r,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),f=Object(o.a)((function(e,t){var a=e.className,r=j(e,["className"]);return n.createElement(l.a.div,d({ref:t,position:"relative"},r,{className:Object(u.d)("chakra-linkbox",a),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))})),O=a(189),h=a(199),m=a(184),p=a(201),x=a(194),g=a(29),v=a(54),w=a(110),y=a(252),k=a(253),S=a(254),I=a(141),N=a(111),C=a(57),L=Object(C.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),z=a(1),P=function(e){var t=e.children;return Object(z.jsx)(N.a,{h:64,p:0,w:"100%",children:Object(z.jsx)(I.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},_=function(e){var t=e.children;return e.isLink?Object(z.jsx)(f,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":L.container,children:Object(z.jsx)(P,{children:t})}):Object(z.jsx)(P,{children:t})},E=a(566),F=function(){return Object(z.jsxs)(z.Fragment,{children:[Object(z.jsxs)(s.a,{p:4,spacing:4,children:[Object(z.jsx)(E.a,{h:5,w:"50%"}),Object(z.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10})]}),Object(z.jsx)(E.a,{h:3,w:"75%"}),Object(z.jsx)(E.a,{h:3,w:"50%"})]}),Object(z.jsxs)(m.a,{children:[Object(z.jsx)(p.a,{}),Object(z.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(z.jsx)(E.a,{h:5,w:"25%"}),Object(z.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10}),Object(z.jsx)(E.a,{h:5,w:10})]})]})]})]})},D=function(e){var t,a,n,o=e.language,l=e.pkg;if(!l)return Object(z.jsx)(_,{children:Object(z.jsx)(F,{})});var u=(null===(t=l.metadata)||void 0===t?void 0:t.date)?Object(z.jsx)(S.a,{date:new Date(l.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,d=null!==(a=l.author)&&void 0!==a?a:{},j=null!==(n=l.languages)&&void 0!==n?n:{},I=Object.keys(j),N=function(e){return Object(w.a)(Object(i.a)({name:l.name,version:l.version,language:o},e))},C="string"===typeof d?d:d.name;return Object(z.jsxs)(_,{isLink:!0,children:[Object(z.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(z.jsx)(b,{as:g.b,to:N(),children:Object(z.jsxs)(O.a,{color:"blue.800","data-testid":L.name,fontWeight:"semibold",isTruncated:!0,children:[l.name,Object(z.jsx)(O.a,{as:"span",color:"blue.500","data-testid":L.version,fontSize:"xs",ml:2,children:l.version})]})}),Object(z.jsx)(f,{as:h.a,"data-testid":L.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[l.name.startsWith("@aws-cdk/")?Object(z.jsx)(k.a,{label:"official",language:o,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(c.a)(l.keywords.filter(Boolean).slice(0,3).map((function(e){return Object(z.jsx)(k.a,{language:o,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(z.jsx)(O.a,{"data-testid":L.description,fontSize:"sm",noOfLines:2,children:l.description})]}),Object(z.jsxs)(m.a,{children:[Object(z.jsx)(p.a,{}),Object(z.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(z.jsx)(O.a,{"data-testid":L.date,fontSize:"sm",isTruncated:!0,children:u}),Object(z.jsx)(x.a,{as:g.b,color:"blue.500","data-testid":L.author,fontSize:"sm",to:Object(w.c)({query:C}),children:C}),Object(z.jsx)(f,{align:"center",as:s.a,"data-testid":L.languages,direction:"row",children:Object.entries(v.c).sort((function(e,t){var a=Object(r.a)(e,1)[0],n=Object(r.a)(t,1)[0];return v.a.indexOf(a)-v.a.indexOf(n)})).map((function(e){var t=Object(r.a)(e,2),a=t[0],n=t[1],c=a,i=c===v.d.TypeScript||I.includes(c),s=c===v.d.TypeScript||v.e.has(c);if(!i)return null;var o=n.name,l=n.icon,u=Object(z.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(z.jsx)(y.a,{language:c,children:s?Object(z.jsx)(g.b,{"aria-label":"View package docs for ".concat(c),to:N({language:c}),children:u}):u},c)}))})]})]})]})},T=a(200),H=function(e){var t=e.children;return Object(z.jsx)(T.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},W=function(e){for(var t=e.noOfItems,a=[],n=0;n<t;n+=1)a.push(Object(z.jsx)(D,{},n));return Object(z.jsx)(H,{children:a})},K=Object(n.memo)(W),R=function(e){var t=e.language,a=e.results,n=e.skeleton;return(null===n||void 0===n?void 0:n.loading)?Object(z.jsx)(K,{noOfItems:n.noOfItems}):Object(z.jsx)(H,{children:a.map((function(e,a){return Object(z.jsx)(D,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},A=Object(n.memo)(R)},287:function(e,t,a){"use strict";a.d(t,"a",(function(){return b}));var n=a(21),r=a(25),c=a(27),i=a(8),s=a(0),o=a(4),l=a(138);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.align,f=e.fit,O=e.loading,h=e.ignoreFallback,m=e.crossOrigin,p=d(e,["fallbackSrc","fallback","src","align","fit","loading","ignoreFallback","crossOrigin"]),x=null!=O||h,g=function(e){var t=e.src,a=e.srcSet,n=e.onLoad,r=e.onError,c=e.crossOrigin,i=e.sizes,u=e.ignoreFallback,d=Object(s.useState)("pending"),j=Object(o.a)(d,2),b=j[0],f=j[1];Object(s.useEffect)((function(){f(t?"loading":"pending")}),[t]);var O=Object(s.useRef)(),h=Object(s.useCallback)((function(){if(t){m();var e=new Image;e.src=t,c&&(e.crossOrigin=c),a&&(e.srcset=a),i&&(e.sizes=i),e.onload=function(e){m(),f("loaded"),null==n||n(e)},e.onerror=function(e){m(),f("failed"),null==r||r(e)},O.current=e}}),[t,c,a,i,n,r]),m=function(){O.current&&(O.current.onload=null,O.current.onerror=null,O.current=null)};return Object(l.a)((function(){if(!u)return"loading"===b&&h(),function(){m()}}),[b,h,u]),u?"loaded":b}(u({},e,{ignoreFallback:x})),v=u({ref:t,objectFit:f,objectPosition:b},x?p:Object(c.g)(p,["onError","onLoad"]));return"loaded"!==g?n||s.createElement(r.a.img,u({as:j,className:"chakra-image__placeholder",src:a},v)):s.createElement(r.a.img,u({as:j,src:i,crossOrigin:m,loading:O,className:"chakra-image"},v))}));i.a&&(b.displayName="Image")},340:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(73),r=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},341:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(73),r=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},566:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(72);var n=a(8);a(27),a(108);a(218);var r=a(0);var c=a(25),i=a(59),s=a(21),o=a(66),l=a(43);var u=a(20);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),x=Object(u.d)("chakra-skeleton",h);if(s){var g=n||p?"none":f+" "+O+"s";return r.createElement(c.a.div,d({ref:t,className:x,__css:{animation:g}},m))}return r.createElement(b,d({ref:t,className:x},m,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a},587:function(e,t,a){"use strict";a.r(t),a.d(t,"Home",(function(){return z})),a.d(t,"default",(function(){return z}));var n=a(6),r=a(4),c=a(184),i=a(221),s=a(205),o=a(566),l=a(0),u=a(117),d=a(224),j=a(240),b=a(285),f=a(118),O=a(119),h=a(340),m=a(341),p=a(571),x=a(141),g=a(145),v=a(199),w=a(197),y=a(57),k=Object(y.a)("home",["headings","results","nextPageBtn","nextIcon","prevIcon"]),S=a(1),I={borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",mx:2,h:10,w:10,variant:"outline"},N={color:"blue.500",h:5,w:5},C=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)(x.a,{alignItems:"center",pt:6,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(S.jsx)(x.b,{colStart:2,justifySelf:"center",children:Object(S.jsx)(g.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)(x.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)({},N)),onClick:function(){r(t-1)}},I)),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)({},N)),onClick:s},I))]})})]})},L={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"},z=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}),x=p.results,g=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:L.optimal,src:L.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"," ",x.length?Object(S.jsx)(c.a,{as:"span",color:"blue.500",children:x.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:g,skeleton:{loading:v,noOfItems:20}}),Object(S.jsx)(C,{offset:h,pageLimit:w,setOffset:m})]})]})})}}}]);
2
+ //# sourceMappingURL=7.a4739ebc.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageTag/PackageTag.tsx","components/Time/Time.tsx","../../../src/link-box.tsx","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","../../../src/image.tsx","../../../src/use-image.ts","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","../../../src/skeleton.tsx","../../../src/use-previous.ts","views/Home/testIds.ts","views/Home/HomePageControls.tsx","views/Home/Home.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","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","PackageTag","value","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","Time","date","formatString","format","boxProps","dateTime","toISOString","LinkOverlay","className","cx","rel","isExternal","target","__css","position","cursor","display","top","left","width","height","LinkBox","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","fontSize","author","languages","targets","Object","keys","getUrl","params","getPackagePath","version","authorName","maxH","maxW","Link","color","fontWeight","isTruncated","ml","Flex","tags","flexWrap","startsWith","mr","variant","keywords","filter","Boolean","slice","tag","noOfLines","Stack","entries","LANGUAGE_RENDER_MAP","sort","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","opacity","ResultsGrid","columns","base","sm","md","lg","xl","ResultsSkeletonComponent","noOfItems","skeletons","i","push","ResultsSkeleton","memo","ResultsComponent","results","skeleton","loading","Results","NativeImage","alt","Image","crossOrigin","shouldIgnore","status","ignoreFallback","useState","setStatus","src","imageRef","useRef","load","useCallback","flush","img","onLoad","error","onError","sizes","useSafeLayoutEffect","useImage","shared","objectFit","objectPosition","rest","omit","fallbackSrc","ArrowForwardIcon","createIcon","d","ChevronLeftIcon","StyledSkeleton","chakra","baseStyle","boxShadow","backgroundClip","pointerEvents","userSelect","visibility","fade","keyframes","from","Skeleton","styles","useStyleConfig","isFirstRender","React","useIsFirstRender","omitThemingProps","wasPreviouslyLoaded","usePrevious","_className","animation","fadeDuration","speed","iconBtnProps","borderRadius","borderColor","colorScheme","mx","iconProps","HomePageControls","offset","pageLimit","setOffset","nextDisabled","prevDisabled","getNextPage","alignItems","pt","colStart","justifySelf","nextPageBtn","disabled","onClick","rightIcon","ArrowForward","justify","prevIcon","ChevronLeft","nextIcon","ChevronRight","optimal","fallback","Home","searchAPI","useCatalogSearch","useCatalogResults","limit","displayable","m","headings","textAlign","size","mb","length","CatalogSearch","pb"],"mappings":"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","file":"static/js/7.11632168.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 { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\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 { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { chakra, forwardRef, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { cx } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface LinkOverlayProps extends HTMLChakraProps<\"a\"> {\n /**\n * If `true`, the link will open in new tab\n */\n isExternal?: boolean\n}\n\nexport const LinkOverlay = forwardRef<LinkOverlayProps, \"a\">((props, ref) => {\n const { isExternal, target, rel, className, ...rest } = props\n return (\n <chakra.a\n {...rest}\n ref={ref}\n className={cx(\"chakra-linkbox__overlay\", className)}\n rel={isExternal ? \"noopener noreferrer\" : rel}\n target={isExternal ? \"_blank\" : target}\n __css={{\n position: \"static\",\n \"&::before\": {\n content: \"''\",\n cursor: \"inherit\",\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 0,\n width: \"100%\",\n height: \"100%\",\n },\n }}\n />\n )\n})\n\nexport interface LinkBoxProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * `LinkBox` is used to wrap content areas within a link while ensuring semantic html\n *\n * @see Docs https://chakra-ui.com/docs/navigation/link-overlay\n * @see Resources https://www.sarasoueidan.com/blog/nested-links\n */\nexport const LinkBox = forwardRef<LinkBoxProps, \"div\">((props, ref) => {\n const { className, ...rest } = props\n\n return (\n <chakra.div\n ref={ref}\n position=\"relative\"\n {...rest}\n className={cx(\"chakra-linkbox\", className)}\n __css={{\n /* Elevate the links and abbreviations up */\n \"a[href]:not(.chakra-linkbox__overlay), abbr[title]\": {\n position: \"relative\",\n zIndex: 1,\n },\n }}\n />\n )\n})\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 {\n chakra,\n PropsOf,\n SystemProps,\n forwardRef,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { omit, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\nimport { useImage, UseImageProps } from \"./use-image\"\n\ninterface NativeImageOptions {\n /**\n * The native HTML `width` attribute to the passed to the `img`\n */\n htmlWidth?: string | number\n /**\n * The native HTML `height` attribute to the passed to the `img`\n */\n htmlHeight?: string | number\n}\n\ninterface NativeImageProps extends PropsOf<\"img\">, NativeImageOptions {}\n\nconst NativeImage = React.forwardRef(\n (props: NativeImageProps, ref: React.Ref<any>) => {\n const { htmlWidth, htmlHeight, alt, ...rest } = props\n return (\n <img\n width={htmlWidth}\n height={htmlHeight}\n ref={ref}\n alt={alt}\n {...rest}\n />\n )\n },\n)\n\ninterface ImageOptions extends NativeImageOptions {\n /**\n * Fallback image `src` to show if image is loading or image fails.\n *\n * Note 🚨: We recommend you use a local image\n */\n fallbackSrc?: string\n /**\n * Fallback element to show if image is loading or image fails.\n * @type React.ReactElement\n */\n fallback?: React.ReactElement\n /**\n * Defines loading strategy\n */\n loading?: \"eager\" | \"lazy\"\n /**\n * How the image to fit within its bounds.\n * It maps to css `object-fit` property.\n * @type SystemProps[\"objectFit\"]\n */\n fit?: SystemProps[\"objectFit\"]\n /**\n * How to align the image within its bounds.\n * It maps to css `object-position` property.\n * @type SystemProps[\"objectPosition\"]\n */\n align?: SystemProps[\"objectPosition\"]\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n}\n\nexport interface ImageProps\n extends UseImageProps,\n Omit<HTMLChakraProps<\"img\">, keyof UseImageProps>,\n ImageOptions {}\n\n/**\n * React component that renders an image with support\n * for fallbacks\n *\n * @see Docs https://chakra-ui.com/image\n */\nexport const Image = forwardRef<ImageProps, \"img\">((props, ref) => {\n const {\n fallbackSrc,\n fallback,\n src,\n align,\n fit,\n loading,\n ignoreFallback,\n crossOrigin,\n ...rest\n } = props\n\n /**\n * Defer to native `img` tag if `loading` prop is passed\n * @see https://github.com/chakra-ui/chakra-ui/issues/1027\n */\n const shouldIgnore = loading != null || ignoreFallback\n\n const status = useImage({\n ...props,\n ignoreFallback: shouldIgnore,\n })\n\n const shared = {\n ref,\n objectFit: fit,\n objectPosition: align,\n ...(shouldIgnore ? rest : omit(rest, [\"onError\", \"onLoad\"])),\n }\n\n if (status !== \"loaded\") {\n /**\n * If user passed a custom fallback component,\n * let's render it here.\n */\n if (fallback) return fallback\n\n return (\n <chakra.img\n as={NativeImage}\n className=\"chakra-image__placeholder\"\n src={fallbackSrc}\n {...shared}\n />\n )\n }\n\n return (\n <chakra.img\n as={NativeImage}\n src={src}\n crossOrigin={crossOrigin}\n loading={loading}\n className=\"chakra-image\"\n {...shared}\n />\n )\n})\n\nexport interface ImgProps extends HTMLChakraProps<\"img\">, NativeImageOptions {}\n\n/**\n * Fallback component for most SSR users who want to use the native `img` with\n * support for chakra props\n */\nexport const Img = forwardRef<ImgProps, \"img\">((props, ref) => (\n <chakra.img ref={ref} as={NativeImage} className=\"chakra-image\" {...props} />\n))\n\nif (__DEV__) {\n Image.displayName = \"Image\"\n}\n","import { useSafeLayoutEffect } from \"@chakra-ui/hooks\"\nimport {\n ImgHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\"\n\nexport interface UseImageProps {\n /**\n * The image `src` attribute\n */\n src?: string\n /**\n * The image `srcset` attribute\n */\n srcSet?: string\n /**\n * The image `sizes` attribute\n */\n sizes?: string\n /**\n * A callback for when the image `src` has been loaded\n */\n onLoad?(event: React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * A callback for when there was an error loading the image `src`\n */\n onError?(error: string | React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n /**\n * The key used to set the crossOrigin on the HTMLImageElement into which the image will be loaded.\n * This tells the browser to request cross-origin access when trying to download the image data.\n */\n crossOrigin?: ImgHTMLAttributes<any>[\"crossOrigin\"]\n}\n\ntype Status = \"loading\" | \"failed\" | \"pending\" | \"loaded\"\n\ntype ImageEvent = React.SyntheticEvent<HTMLImageElement, Event>\n\n/**\n * React hook that loads an image in the browser,\n * and let's us know the `status` so we can show image\n * fallback if it is still `pending`\n *\n * @returns the status of the image loading progress\n *\n * @example\n *\n * ```jsx\n * function App(){\n * const status = useImage({ src: \"image.png\" })\n * return status === \"loaded\" ? <img src=\"image.png\" /> : <Placeholder />\n * }\n * ```\n */\nexport function useImage(props: UseImageProps) {\n const {\n src,\n srcSet,\n onLoad,\n onError,\n crossOrigin,\n sizes,\n ignoreFallback,\n } = props\n\n const [status, setStatus] = useState<Status>(\"pending\")\n\n useEffect(() => {\n setStatus(src ? \"loading\" : \"pending\")\n }, [src])\n\n const imageRef = useRef<HTMLImageElement | null>()\n\n const load = useCallback(() => {\n if (!src) return\n\n flush()\n\n const img = new Image()\n\n img.src = src\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin\n }\n\n if (srcSet) {\n img.srcset = srcSet\n }\n\n if (sizes) {\n img.sizes = sizes\n }\n\n img.onload = (event) => {\n flush()\n setStatus(\"loaded\")\n onLoad?.((event as unknown) as ImageEvent)\n }\n img.onerror = (error) => {\n flush()\n setStatus(\"failed\")\n onError?.(error as any)\n }\n\n imageRef.current = img\n }, [src, crossOrigin, srcSet, sizes, onLoad, onError])\n\n const flush = () => {\n if (imageRef.current) {\n imageRef.current.onload = null\n imageRef.current.onerror = null\n imageRef.current = null\n }\n }\n\n useSafeLayoutEffect(() => {\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's bail out.\n */\n if (ignoreFallback) return undefined\n\n if (status === \"loading\") {\n load()\n }\n return () => {\n flush()\n }\n }, [status, load, ignoreFallback])\n\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's just return 'loaded'\n */\n return ignoreFallback ? \"loaded\" : status\n}\n\nexport type UseImageReturn = ReturnType<typeof useImage>\n","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 { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"home\", [\n \"headings\",\n \"results\",\n \"nextPageBtn\",\n \"nextIcon\",\n \"prevIcon\",\n] as const);\n\nexport default testIds;\n","import {\n ArrowForwardIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"@chakra-ui/icons\";\nimport { Grid, GridItem, Button, Flex, IconButton } from \"@chakra-ui/react\";\nimport type { Dispatch, FunctionComponent, SetStateAction } from \"react\";\nimport testIds from \"./testIds\";\n\nconst iconBtnProps = {\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n};\n\nconst iconProps = {\n color: \"blue.500\",\n h: 5,\n w: 5,\n};\n\nexport interface HomePageControlsProps {\n offset: number;\n pageLimit: number;\n setOffset: Dispatch<SetStateAction<number>>;\n}\n\nexport const HomePageControls: FunctionComponent<HomePageControlsProps> = ({\n offset,\n pageLimit,\n setOffset,\n}) => {\n const nextDisabled = offset === pageLimit;\n const prevDisabled = offset === 0;\n\n const getNextPage = () => {\n setOffset(offset + 1);\n };\n\n const getPrevPage = () => {\n setOffset(offset - 1);\n };\n\n return (\n <Grid\n alignItems=\"center\"\n pt={6}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <Button\n colorScheme=\"blue\"\n data-testid={testIds.nextPageBtn}\n disabled={nextDisabled}\n onClick={getNextPage}\n rightIcon={<ArrowForwardIcon color=\"white\" />}\n >\n Next Page\n </Button>\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <IconButton\n aria-label=\"Previous Page\"\n data-testid={testIds.prevIcon}\n disabled={prevDisabled}\n icon={<ChevronLeftIcon {...iconProps} />}\n onClick={getPrevPage}\n {...iconBtnProps}\n />\n <IconButton\n aria-label=\"Next Page\"\n data-testid={testIds.nextIcon}\n disabled={nextDisabled}\n icon={<ChevronRightIcon {...iconProps} />}\n onClick={getNextPage}\n {...iconBtnProps}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Box, Stack, Heading, Skeleton } from \"@chakra-ui/react\";\nimport { FunctionComponent, useState } from \"react\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Picture } from \"../../components/Picture\";\nimport { Results } from \"../../components/Results\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { HomePageControls } from \"./HomePageControls\";\nimport testIds from \"./testIds\";\n\nconst sources = {\n optimal: [\n { media: \"(max-width:1024px)\", srcSet: \"/assets/hive@50.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/hive@100.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/hive@100.png\" },\n ],\n fallback: \"/assets/hive@50.png\",\n};\n\nexport const Home: FunctionComponent = () => {\n const searchAPI = useCatalogSearch();\n const [offset, setOffset] = useState(0);\n\n const { results, displayable, loading, pageLimit } = useCatalogResults({\n offset,\n limit: 20,\n query: \"\",\n language: null,\n });\n\n return (\n <Page\n meta={{\n title: \"Construct Hub\",\n description:\n \"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.\",\n suffix: false,\n }}\n pageName=\"home\"\n >\n <Box position=\"relative\">\n <Picture\n alt={\"\"}\n h=\"540px\"\n position=\"absolute\"\n sources={sources.optimal}\n src={sources.fallback}\n top=\"0\"\n w=\"100%\"\n zIndex=\"hide\"\n />\n {/* Hero Section */}\n <Stack\n align=\"stretch\"\n direction=\"column\"\n justify=\"center\"\n m=\"0 auto\"\n maxW=\"container.lg\"\n p={[10, 15, 20]}\n spacing={8}\n >\n <Stack\n color=\"blue.800\"\n data-testid={testIds.headings}\n spacing={4}\n textAlign=\"center\"\n >\n <Heading size=\"2xl\">\n Find reusable components for your cloud applications\n </Heading>\n <Heading as=\"h3\" size=\"md\">\n AWS CDK | CDK for Terraform | CDK For Kubernetes\n </Heading>\n <Heading as=\"h4\" mb={8} size=\"sm\">\n Search from{\" \"}\n {!results.length ? (\n <Skeleton display=\"inline-block\" h={3} w={8} />\n ) : (\n <Box as=\"span\" color=\"blue.500\">\n {results.length}\n </Box>\n )}{\" \"}\n construct libraries\n </Heading>\n </Stack>\n <CatalogSearch {...searchAPI} />\n </Stack>\n\n {/* TBD: Trending Libraries in favor of catalog results */}\n <Box p={4} pb={8}>\n <Results\n results={displayable}\n skeleton={{ loading, noOfItems: 20 }}\n />\n <HomePageControls\n offset={offset}\n pageLimit={pageLimit}\n setOffset={setOffset}\n />\n </Box>\n </Box>\n </Page>\n );\n};\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageTag/PackageTag.tsx","components/Time/Time.tsx","../../../src/link-box.tsx","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","../../../src/image.tsx","../../../src/use-image.ts","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","../../../src/skeleton.tsx","../../../src/use-previous.ts","views/Home/testIds.ts","views/Home/HomePageControls.tsx","views/Home/Home.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","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","PackageTag","value","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","Time","date","formatString","format","boxProps","dateTime","toISOString","LinkOverlay","className","cx","rel","isExternal","target","__css","position","cursor","display","top","left","width","height","LinkBox","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","fontSize","author","languages","targets","Object","keys","getUrl","params","getPackagePath","version","authorName","maxH","maxW","Link","color","fontWeight","isTruncated","ml","Flex","tags","flexWrap","startsWith","mr","variant","keywords","filter","Boolean","slice","tag","noOfLines","Stack","entries","LANGUAGE_RENDER_MAP","sort","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","opacity","ResultsGrid","columns","base","sm","md","lg","xl","ResultsSkeletonComponent","noOfItems","skeletons","i","push","ResultsSkeleton","memo","ResultsComponent","results","skeleton","loading","Results","NativeImage","alt","Image","crossOrigin","shouldIgnore","status","ignoreFallback","useState","setStatus","src","imageRef","useRef","load","useCallback","flush","img","onLoad","error","onError","sizes","useSafeLayoutEffect","useImage","shared","objectFit","objectPosition","rest","omit","fallbackSrc","ArrowForwardIcon","createIcon","d","ChevronLeftIcon","StyledSkeleton","chakra","baseStyle","boxShadow","backgroundClip","pointerEvents","userSelect","visibility","fade","keyframes","from","Skeleton","styles","useStyleConfig","isFirstRender","React","useIsFirstRender","omitThemingProps","wasPreviouslyLoaded","usePrevious","_className","animation","fadeDuration","speed","iconBtnProps","borderRadius","borderColor","colorScheme","mx","iconProps","HomePageControls","offset","pageLimit","setOffset","nextDisabled","prevDisabled","getNextPage","alignItems","pt","colStart","justifySelf","nextPageBtn","disabled","onClick","rightIcon","ArrowForward","justify","prevIcon","ChevronLeft","nextIcon","ChevronRight","optimal","fallback","Home","searchAPI","useCatalogSearch","useCatalogResults","limit","displayable","m","headings","textAlign","size","mb","length","CatalogSearch","pb"],"mappings":"0LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,qICvCMe,EAAUC,aACrB,WAAwBC,GAAxB,IAAGC,EAAH,EAAGA,QAAYC,EAAf,wBACE,eAAC,IAAD,CAAKC,GAAG,UAAR,iBACGF,QADH,IACGA,OADH,EACGA,EAASG,KAAI,SAACC,EAAQC,GAAT,OACZ,wBAAkBC,MAAOF,EAAOE,MAAOC,OAAQH,EAAOG,QAAzCF,MAEf,cAAC,IAAD,aAAON,IAAKA,GAASE,UAK3BJ,EAAQW,YAAc,W,+FCVTC,EACX,SAAC,GAA4B,IAA1B3B,EAAyB,EAAzBA,SAAU4B,EAAe,EAAfA,SAGX,OAFoBC,IAAyBC,IAAIF,GAGxC,mCAAG5B,IAIV,cAAC,IAAD,CACE+B,UAAQ,EACRC,MAAK,oCAA+BC,IAAkBL,GAAjD,oBACLM,UAAU,YAHZ,SAKE,+BAAOlC,Q,0KCbFmC,EAAiD,SAAC,GAOxD,IANLnC,EAMI,EANJA,SACA4B,EAKI,EALJA,SACAQ,EAII,EAJJA,MAII,IAHJJ,aAGI,MAHII,EAGJ,EAFJC,EAEI,EAFJA,OACGC,EACC,iBACJ,OACE,cAACC,EAAA,EAAD,CACE,4BAAoBP,GACpBQ,GAAIC,YAAc,CAAEC,MAAM,GAAD,OAAKN,GAASR,aACvCS,OAAQA,EAHV,SAKE,cAAC,IAAD,yBACEM,OAAQ,CACNC,eAAgB,cAEdN,GAJN,aAME,cAAC,IAAD,UAAWtC,W,2ICvBN6C,EAAO7B,aAClB,WAA8CC,GAAS,IAApD6B,EAAmD,EAAnDA,KAAcC,EAAqC,EAA7CC,OAAyBC,EAAoB,iBACpD,OACE,cAAC,IAAD,yBAAK7B,GAAG,OAAO8B,SAAUJ,EAAKK,cAAelC,IAAKA,GAASgC,GAA3D,aACGD,YAAOF,EAAMC,SAMtBF,EAAKnB,YAAc,Q,2dCTZ,IAAM0B,EAAcpC,aAAkC,cAC3D,IAAM,EAAN,EAAM,aAAN,EAAM,SAAN,EAAM,IAA2BqC,EAAjC,EAAiCA,UAAjC,iDACA,OACE,gBAAC,IAAD,UAEEpC,IAFF,EAGEoC,UAAWC,YAAG,0BAHhB,GAIEC,IAAKC,EAAa,sBAJpB,EAKEC,OAAQD,EAAa,SALvB,EAMEE,MAAO,CACLC,SADK,SAEL,YAAa,CACX/C,QADW,KAEXgD,OAFW,UAGXC,QAHW,QAIXF,SAJW,WAKXG,IALW,EAMXC,KANW,EAOX1B,OAPW,EAQX2B,MARW,OASXC,OAAQ,eAeLC,EAAUlD,aAAgC,cAC/C,IAAEqC,EAAR,EAAQA,UAAR,qBAEA,OACE,gBAAC,IAAD,OACEpC,IADF,EAEE0C,SAAS,YAFX,GAIEN,UAAWC,YAAG,iBAJhB,GAKEI,MAAO,CAEL,qDAAsD,CACpDC,SADoD,WAEpDtB,OAAQ,U,2HC9CH8B,EAXCC,YAAc,cAAe,CAC3C,YACA,OACA,UACA,OACA,cACA,OACA,SACA,c,OCLIC,EAAmC,SAAC,GAAD,IAAGrE,EAAH,EAAGA,SAAH,OACvC,cAACsE,EAAA,EAAD,CAAMC,EAAG,GAAIC,EAAG,EAAGC,EAAE,OAArB,SACE,cAAC,IAAD,CACErD,GAAG,UACHmD,EAAE,OACFG,SAAS,SACTC,gBAAgB,MAChBC,aAAa,UALf,SAOG5E,OAKM6E,EAAgE,SAAC,GAGvE,IAFL7E,EAEI,EAFJA,SAGA,OADI,EADJ8E,OAGE,cAACZ,EAAD,CACEvB,OAAQ,CACN,iBAAkB,CAChBoC,GAAI,YAGR,cAAaZ,EAAQa,UANvB,SAQE,cAAC,EAAD,UAAgBhF,MAGlB,cAAC,EAAD,UAAgBA,K,SChCPiF,EAAyC,kBACpD,qCACE,eAAC,IAAD,CAAOT,EAAG,EAAGU,QAAS,EAAtB,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAE,QAClB,eAAC,IAAD,CAAOU,MAAM,SAASC,UAAU,MAAMF,QAAS,EAA/C,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,QAErB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAE,QAClB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAE,WAEpB,eAAC,IAAD,WACE,cAAC,IAAD,IACA,eAAC,IAAD,CAAOY,GAAI,EAAGC,GAAI,EAAGJ,QAAS,EAA9B,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAE,QAClB,eAAC,IAAD,CAAOU,MAAM,SAASC,UAAU,MAAMF,QAAS,EAA/C,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,kBCehBc,EAAmD,SAAC,GAG1D,IAAD,MAFMC,EAEN,EAFJ5D,SACA6D,EACI,EADJA,IAEA,IAAKA,EACH,OACE,cAAC,EAAD,UACE,cAAC,EAAD,MAKN,IAAMC,GAAc,UAAAD,EAAIE,gBAAJ,eAAc7C,MAChC,cAACD,EAAA,EAAD,CACEC,KAAM,IAAI8C,KAAKH,EAAIE,SAAS7C,MAC5B+C,SAAS,KACT7C,OAAO,kBAEP,KAEE8C,EAAM,UAAGL,EAAIK,cAAP,QAAiB,GACvBC,EAAS,UAAGN,EAAIM,iBAAP,QAAoB,GAC7BC,EAAUC,OAAOC,KAAKH,GAEtBI,EAAS,SAACC,GAAD,OACbC,YAAe,aACb9G,KAAMkG,EAAIlG,KACV+G,QAASb,EAAIa,QACb1E,SAAU4D,GACPY,KAGDG,EAA+B,kBAAXT,EAAsBA,EAASA,EAAOvG,KAEhE,OACE,eAAC,EAAD,CAAsBuF,QAAM,EAA5B,UACE,eAAC,IAAD,CAAO0B,KAAK,OAAOC,KAAK,OAAO/B,SAAS,SAASF,EAAG,EAAGU,QAAS,EAAhE,UAEE,cAAC9B,EAAD,CAAahC,GAAIsF,IAAMlE,GAAI2D,IAA3B,SACE,eAAC,IAAD,CACEQ,MAAM,WACN,cAAaxC,EAAQ5E,KACrBqH,WAAW,WACXC,aAAW,EAJb,UAMGpB,EAAIlG,KAEL,cAAC,IAAD,CACE6B,GAAG,OACHuF,MAAM,WACN,cAAaxC,EAAQmC,QACrBT,SAAS,KACTiB,GAAI,EALN,SAOGrB,EAAIa,eAMX,cAACpC,EAAD,CACE9C,GAAI2F,IACJ,cAAa5C,EAAQ6C,KACrBC,SAAS,OACTT,KAAM,EACN9B,SAAS,SALX,UAQIe,EAAIlG,KAAK2H,WAAW,aAClB,cAAC/E,EAAA,EAAD,CAEEH,MAAM,WACNJ,SAAU4D,EACV2B,GAAI,EACJ/E,MAAM,WACNgF,QAAQ,WANV,qBACM,YASJ,MAnBR,mBAoBO3B,EAAI4B,SACJC,OAAOC,SACPC,MAAM,EAAG,GACTnG,KAAI,SAACoG,GACJ,OACE,cAACtF,EAAA,EAAD,CAEEP,SAAU4D,EACV2B,GAAI,EACJ/E,MAAK,WAAMqF,EAAN,KACLpF,OAAO,eALT,SAOGoF,GANIA,UAYjB,cAAC,IAAD,CAAM,cAAatD,EAAQ3D,YAAaqF,SAAS,KAAK6B,UAAW,EAAjE,SACGjC,EAAIjF,iBAKT,eAAC,IAAD,WACE,cAAC,IAAD,IACA,eAAC,IAAD,CAAOiG,KAAK,OAAO/B,SAAS,SAASW,GAAI,EAAGC,GAAI,EAAGJ,QAAS,EAA5D,UACE,cAAC,IAAD,CAAM,cAAaf,EAAQrB,KAAM+C,SAAS,KAAKgB,aAAW,EAA1D,SACGnB,IAGH,cAAC,IAAD,CACEtE,GAAIsF,IACJC,MAAM,WACN,cAAaxC,EAAQ2B,OACrBD,SAAS,KACTrD,GAAIC,YAAc,CAAEC,MAAO6D,IAL7B,SAOGA,IAIH,cAACrC,EAAD,CACEiB,MAAM,SACN/D,GAAIuG,IACJ,cAAaxD,EAAQ4B,UACrBX,UAAU,MAJZ,SAMGa,OAAO2B,QAAQC,KAEbC,MACC,kBAAE/D,EAAF,oBAAUgE,EAAV,2BACEC,IAAUC,QAAQlE,GAClBiE,IAAUC,QAAQF,MAErB1G,KAAI,YAAmB,IAAD,mBAAhB6G,EAAgB,KAAVC,EAAU,KACfvG,EAAWsG,EAEXE,EACJxG,IAAayG,IAASC,YACtBtC,EAAQuC,SAAS3G,GAEb4G,EACJ5G,IAAayG,IAASC,YAEtBzG,IAAyBC,IAAIF,GAE/B,IAAKwG,EAAsB,OAAO,KAElC,IAAQ7I,EAAqB4I,EAArB5I,KAAYkJ,EAASN,EAAfO,KAERA,EACJ,cAACD,EAAD,CACE,gCAAwBlJ,GACxBgF,EAAG,EACHoE,QAASH,EAA4B,EAAI,GACzC/D,EAAG,IAIP,OACE,cAAC9C,EAAA,EAAD,CAAuCC,SAAUA,EAAjD,SACG4G,EACC,cAAC,IAAD,CACE,6CAAqC5G,GACrCY,GAAI2D,EAAO,CAAEvE,aAFf,SAIG8G,IAGHA,GATyB9G,kB,SCpMlCgH,EAAiC,SAAC,GAAD,IAAG5I,EAAH,EAAGA,SAAH,OAC5C,cAAC,IAAD,CACE6I,QAAS,CACPC,KAAM,EACNC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJ,MAAO,GAEThE,QAAS,EATX,SAWGlF,KCPCmJ,EAAoE,SAAC,GAKzE,IAHK,IADLC,EACI,EADJA,UAEMC,EAAY,GAETC,EAAI,EAAGA,EAAIF,EAAWE,GAAK,EAClCD,EAAUE,KAAK,cAAC,EAAD,GAAkBD,IAGnC,OAAO,cAAC,EAAD,UAAcD,KAGVG,EAAkBC,eAC7BN,GCLIO,EAAoD,SAAC,GAIpD,IAHL9H,EAGI,EAHJA,SACA+H,EAEI,EAFJA,QACAC,EACI,EADJA,SAEA,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAUC,SACL,cAACL,EAAD,CAAiBJ,UAAWQ,EAASR,YAI5C,cAAC,EAAD,UACGO,EAAQtI,KAAI,SAACoE,EAAKlE,GAAN,OACX,cAAC,EAAD,CAAwCK,SAAUA,EAAU6D,IAAKA,GAAjE,UAAqBA,EAAIlG,KAAzB,YAAiCgC,UAM5BuI,EAAUL,eAAKC,I,mdCV5B,IAAMK,EAAc,cAClB,cACE,IAAM,EAAN,EAAM,YAAN,EAAM,WAAyBC,EAA/B,EAA+BA,IAA/B,wCACA,OACE,yBACEhG,MADF,EAEEC,OAFF,EAGEhD,IAHF,EAIE+I,IAAKA,GALT,OAyDSC,EAAQjJ,aAA8B,cACjD,IAAM,EAAN,EAAM,cAAN,EAAM,WAAN,EAAM,MAAN,EAAM,QAAN,EAAM,MAAN,EAAM,UAAN,EAAM,eAQJkJ,EARF,EAQEA,YARF,+FAgBMC,EAAeN,SAArB,EAEMO,EC1CD,SAAkBjJ,GACvB,IAAM,EAAN,EAAM,MAAN,EAAM,SAAN,EAAM,SAAN,EAAM,UAAN,EAAM,cAAN,EAAM,MAOJkJ,EAPF,EAOEA,eAGF,EAA4BC,mBAA5B,8BAAM,EAAN,KAAM,EAAN,KAEAjK,qBAAU,WACRkK,EAAUC,EAAM,UAAhBD,aACC,CAFHlK,IAIA,IAAMoK,EAAWC,mBAEXC,EAAOC,uBAAY,WACvB,MAEAC,IAEA,IAAMC,EAAM,IAAZ,MAEAA,QAEA,IACEA,iBAGF,IACEA,YAGF,IACEA,WAGFA,SAAcxL,YACZuL,IACAN,YACAQ,eAEFD,UAAeE,YACbH,IACAN,YACAU,eAGFR,eACC,CAACD,EAAKN,EAAazI,EAAQyJ,EAAOH,EAjCrC,IAmCMF,EAAQ,WACRJ,EAAJ,UACEA,sBACAA,uBACAA,iBAuBJ,OAnBAU,aAAoB,WAKlB,MAKA,MAHA,YAAIf,GACFO,IAEK,WACLE,OAED,CAACT,EAAQO,EAbZQ,IAmBOd,EAAiB,SAAxB,EDvCee,CAAS,EAAD,MAErBf,eAAgBF,KAGZkB,EAAS,EAAH,CACVpK,MACAqK,UAFU,EAGVC,eAAgBpG,GACZgF,EAAeqB,EAAOC,YAAKD,EAAM,CAAC,UAJxC,YAOA,iBAAIpB,EAKF,GAGE,gBAAC,IAAD,OACEhJ,GADF,EAEEiC,UAFF,4BAGEmH,IAAKkB,GAJT,IAWA,gBAAC,IAAD,OACEtK,GADF,EAEEoJ,IAFF,EAGEN,YAHF,EAIEL,QAJF,EAKExG,UAAU,gBANd,OAsBE,EAAJ,IACE4G,wB,iCE3JF,8CAEa0B,EAAmBC,YAAW,CACzCC,EADyC,4DAEzCnK,YAAa,sB,iCCJf,8CAEaoK,EAAkBF,YAAW,CACxCC,EADwC,gDAExCnK,YAAa,qB,sgBCsCf,IAAMqK,EAAiBC,YAAO,MAAO,CACnCC,UAAW,CACTC,UADS,OAETC,eAFS,cAGTvI,OAHS,UAIT+C,MAJS,cAKTyF,cALS,OAMTC,WANS,OAOT,yBAA0B,CACxBC,WAAY,aAYZC,EAAOC,YAAU,CACrBC,KAAM,CAAE9D,QAAS,GACjBnG,GAAI,CAAEmG,QAAS,KAaJ+D,EAAW1L,aAAiC,cACvD,IAAM2L,EAASC,YAAe,WAA9B,GACMC,EAZiB,WACvB,IAAMA,EAAgBC,UAAtB,GAMA,OAJAA,aAAgB,WACdD,eADFC,IAIOD,EAAP,QAKsBE,GAEtB,EAQIC,YARJ,GAAM,EAAN,EAAM,WAAN,EAAM,aAMJ3J,EANF,EAMEA,UANF,+EAUM4J,EC1FD,YACL,IAAMhM,EAAMyJ,mBAMZ,OAJArK,qBAAU,WACRY,cACC,CAFHZ,IAIOY,EAAP,QDmF4BiM,CAA5B,GAEMC,EAAa7J,YAAG,kBAAtB,GAEA,KAAc,CACZ,IAAM8J,EACJP,YAAmDN,EAAnDM,MADF,IAGA,OACE,gBAAC,IAAD,OACE5L,IADF,EAEEoC,UAFF,EAGEK,MAAO,CAAE0J,cAJb,IAUF,OACE,qBAAgBnM,IAAhB,EAA0BoC,UAAW8J,GAArC,GAA2DzJ,MAAOiJ,QAItED,eAAwB,CACtBW,aADsB,GAEtBC,MAAO,IAGL,EAAJ,IACEZ,0BAsFE,EAAJ,EASI,EAAJ,G,+SE9MevI,EARCC,YAAc,OAAQ,CACpC,WACA,UACA,cACA,WACA,a,OCEImJ,EAAe,CACnBC,aAAc,KACdC,YAAa,WACbC,YAAa,OACbC,GAAI,EACJpJ,EAAG,GACHE,EAAG,GACH2C,QAAS,WAGLwG,EAAY,CAChBjH,MAAO,WACPpC,EAAG,EACHE,EAAG,GASQoJ,EAA6D,SAAC,GAIpE,IAHLC,EAGI,EAHJA,OACAC,EAEI,EAFJA,UACAC,EACI,EADJA,UAEMC,EAAeH,IAAWC,EAC1BG,EAA0B,IAAXJ,EAEfK,EAAc,WAClBH,EAAUF,EAAS,IAOrB,OACE,eAAC,IAAD,CACEM,WAAW,SACXC,GAAI,EACJ1J,gBAAgB,iBAChBC,aAAa,MAJf,UAME,cAAC,IAAD,CAAU0J,SAAU,EAAGC,YAAY,SAAnC,SACE,cAAC,IAAD,CACEb,YAAY,OACZ,cAAavJ,EAAQqK,YACrBC,SAAUR,EACVS,QAASP,EACTQ,UAAW,cAACC,EAAA,EAAD,CAAkBjI,MAAM,UALrC,yBAUF,cAAC,IAAD,CAAU2H,SAAU,EAAGC,YAAY,MAAnC,SACE,eAAC,IAAD,CAAMpJ,MAAM,SAAS0J,QAAQ,SAASvJ,GAAI,EAA1C,UACE,cAAC,IAAD,aACE,aAAW,gBACX,cAAanB,EAAQ2K,SACrBL,SAAUP,EACVxF,KAAM,cAACqG,EAAA,EAAD,eAAqBnB,IAC3Bc,QA7BU,WAClBV,EAAUF,EAAS,KA6BPP,IAEN,cAAC,IAAD,aACE,aAAW,YACX,cAAapJ,EAAQ6K,SACrBP,SAAUR,EACVvF,KAAM,cAACuG,EAAA,EAAD,eAAsBrB,IAC5Bc,QAASP,GACLZ,aCtEVrM,EAAU,CACdgO,QAAS,CACP,CAAE1N,MAAO,qBAAsBC,OAAQ,wBACvC,CAAED,MAAO,qBAAsBC,OAAQ,yBACvC,CAAED,MAAO,qBAAsBC,OAAQ,yBAEzC0N,SAAU,uBAGCC,EAA0B,WACrC,IAAMC,EAAYC,cAClB,EAA4BhF,mBAAS,GAArC,mBAAOwD,EAAP,KAAeE,EAAf,KAEA,EAAqDuB,YAAkB,CACrEzB,SACA0B,MAAO,GACP9M,MAAO,GACPd,SAAU,OAJJ+H,EAAR,EAAQA,QAAS8F,EAAjB,EAAiBA,YAAa5F,EAA9B,EAA8BA,QAASkE,EAAvC,EAAuCA,UAOvC,OACE,cAAChO,EAAA,EAAD,CACEE,KAAM,CACJM,MAAO,gBACPC,YACE,0IACFF,QAAQ,GAEVJ,SAAS,OAPX,SASE,eAAC,IAAD,CAAKyD,SAAS,WAAd,UACE,cAAC5C,EAAA,EAAD,CACEiJ,IAAK,GACLzF,EAAE,QACFZ,SAAS,WACTzC,QAASA,EAAQgO,QACjB1E,IAAKtJ,EAAQiO,SACbrL,IAAI,IACJW,EAAE,OACFpC,OAAO,SAGT,eAAC,IAAD,CACE8C,MAAM,UACNC,UAAU,SACVyJ,QAAQ,SACRa,EAAE,SACFjJ,KAAK,eACLjC,EAAG,CAAC,GAAI,GAAI,IACZU,QAAS,EAPX,UASE,eAAC,IAAD,CACEyB,MAAM,WACN,cAAaxC,EAAQwL,SACrBzK,QAAS,EACT0K,UAAU,SAJZ,UAME,cAAC,IAAD,CAASC,KAAK,MAAd,kEAGA,cAAC,IAAD,CAASzO,GAAG,KAAKyO,KAAK,KAAtB,8DAGA,eAAC,IAAD,CAASzO,GAAG,KAAK0O,GAAI,EAAGD,KAAK,KAA7B,wBACc,IACVlG,EAAQoG,OAGR,cAAC,IAAD,CAAK3O,GAAG,OAAOuF,MAAM,WAArB,SACGgD,EAAQoG,SAHX,cAAC,IAAD,CAAUlM,QAAQ,eAAeU,EAAG,EAAGE,EAAG,IAKzC,IARL,4BAYF,cAACuL,EAAA,EAAD,eAAmBX,OAIrB,eAAC,IAAD,CAAK7K,EAAG,EAAGyL,GAAI,EAAf,UACE,cAACnG,EAAA,EAAD,CACEH,QAAS8F,EACT7F,SAAU,CAAEC,UAAST,UAAW,MAElC,cAAC,EAAD,CACE0E,OAAQA,EACRC,UAAWA,EACXC,UAAWA","file":"static/js/7.a4739ebc.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 { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\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 { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { chakra, forwardRef, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { cx } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface LinkOverlayProps extends HTMLChakraProps<\"a\"> {\n /**\n * If `true`, the link will open in new tab\n */\n isExternal?: boolean\n}\n\nexport const LinkOverlay = forwardRef<LinkOverlayProps, \"a\">((props, ref) => {\n const { isExternal, target, rel, className, ...rest } = props\n return (\n <chakra.a\n {...rest}\n ref={ref}\n className={cx(\"chakra-linkbox__overlay\", className)}\n rel={isExternal ? \"noopener noreferrer\" : rel}\n target={isExternal ? \"_blank\" : target}\n __css={{\n position: \"static\",\n \"&::before\": {\n content: \"''\",\n cursor: \"inherit\",\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 0,\n width: \"100%\",\n height: \"100%\",\n },\n }}\n />\n )\n})\n\nexport interface LinkBoxProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * `LinkBox` is used to wrap content areas within a link while ensuring semantic html\n *\n * @see Docs https://chakra-ui.com/docs/navigation/link-overlay\n * @see Resources https://www.sarasoueidan.com/blog/nested-links\n */\nexport const LinkBox = forwardRef<LinkBoxProps, \"div\">((props, ref) => {\n const { className, ...rest } = props\n\n return (\n <chakra.div\n ref={ref}\n position=\"relative\"\n {...rest}\n className={cx(\"chakra-linkbox\", className)}\n __css={{\n /* Elevate the links and abbreviations up */\n \"a[href]:not(.chakra-linkbox__overlay), abbr[title]\": {\n position: \"relative\",\n zIndex: 1,\n },\n }}\n />\n )\n})\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 {\n chakra,\n PropsOf,\n SystemProps,\n forwardRef,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { omit, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\nimport { useImage, UseImageProps } from \"./use-image\"\n\ninterface NativeImageOptions {\n /**\n * The native HTML `width` attribute to the passed to the `img`\n */\n htmlWidth?: string | number\n /**\n * The native HTML `height` attribute to the passed to the `img`\n */\n htmlHeight?: string | number\n}\n\ninterface NativeImageProps extends PropsOf<\"img\">, NativeImageOptions {}\n\nconst NativeImage = React.forwardRef(\n (props: NativeImageProps, ref: React.Ref<any>) => {\n const { htmlWidth, htmlHeight, alt, ...rest } = props\n return (\n <img\n width={htmlWidth}\n height={htmlHeight}\n ref={ref}\n alt={alt}\n {...rest}\n />\n )\n },\n)\n\ninterface ImageOptions extends NativeImageOptions {\n /**\n * Fallback image `src` to show if image is loading or image fails.\n *\n * Note 🚨: We recommend you use a local image\n */\n fallbackSrc?: string\n /**\n * Fallback element to show if image is loading or image fails.\n * @type React.ReactElement\n */\n fallback?: React.ReactElement\n /**\n * Defines loading strategy\n */\n loading?: \"eager\" | \"lazy\"\n /**\n * How the image to fit within its bounds.\n * It maps to css `object-fit` property.\n * @type SystemProps[\"objectFit\"]\n */\n fit?: SystemProps[\"objectFit\"]\n /**\n * How to align the image within its bounds.\n * It maps to css `object-position` property.\n * @type SystemProps[\"objectPosition\"]\n */\n align?: SystemProps[\"objectPosition\"]\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n}\n\nexport interface ImageProps\n extends UseImageProps,\n Omit<HTMLChakraProps<\"img\">, keyof UseImageProps>,\n ImageOptions {}\n\n/**\n * React component that renders an image with support\n * for fallbacks\n *\n * @see Docs https://chakra-ui.com/image\n */\nexport const Image = forwardRef<ImageProps, \"img\">((props, ref) => {\n const {\n fallbackSrc,\n fallback,\n src,\n align,\n fit,\n loading,\n ignoreFallback,\n crossOrigin,\n ...rest\n } = props\n\n /**\n * Defer to native `img` tag if `loading` prop is passed\n * @see https://github.com/chakra-ui/chakra-ui/issues/1027\n */\n const shouldIgnore = loading != null || ignoreFallback\n\n const status = useImage({\n ...props,\n ignoreFallback: shouldIgnore,\n })\n\n const shared = {\n ref,\n objectFit: fit,\n objectPosition: align,\n ...(shouldIgnore ? rest : omit(rest, [\"onError\", \"onLoad\"])),\n }\n\n if (status !== \"loaded\") {\n /**\n * If user passed a custom fallback component,\n * let's render it here.\n */\n if (fallback) return fallback\n\n return (\n <chakra.img\n as={NativeImage}\n className=\"chakra-image__placeholder\"\n src={fallbackSrc}\n {...shared}\n />\n )\n }\n\n return (\n <chakra.img\n as={NativeImage}\n src={src}\n crossOrigin={crossOrigin}\n loading={loading}\n className=\"chakra-image\"\n {...shared}\n />\n )\n})\n\nexport interface ImgProps extends HTMLChakraProps<\"img\">, NativeImageOptions {}\n\n/**\n * Fallback component for most SSR users who want to use the native `img` with\n * support for chakra props\n */\nexport const Img = forwardRef<ImgProps, \"img\">((props, ref) => (\n <chakra.img ref={ref} as={NativeImage} className=\"chakra-image\" {...props} />\n))\n\nif (__DEV__) {\n Image.displayName = \"Image\"\n}\n","import { useSafeLayoutEffect } from \"@chakra-ui/hooks\"\nimport {\n ImgHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\"\n\nexport interface UseImageProps {\n /**\n * The image `src` attribute\n */\n src?: string\n /**\n * The image `srcset` attribute\n */\n srcSet?: string\n /**\n * The image `sizes` attribute\n */\n sizes?: string\n /**\n * A callback for when the image `src` has been loaded\n */\n onLoad?(event: React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * A callback for when there was an error loading the image `src`\n */\n onError?(error: string | React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n /**\n * The key used to set the crossOrigin on the HTMLImageElement into which the image will be loaded.\n * This tells the browser to request cross-origin access when trying to download the image data.\n */\n crossOrigin?: ImgHTMLAttributes<any>[\"crossOrigin\"]\n}\n\ntype Status = \"loading\" | \"failed\" | \"pending\" | \"loaded\"\n\ntype ImageEvent = React.SyntheticEvent<HTMLImageElement, Event>\n\n/**\n * React hook that loads an image in the browser,\n * and let's us know the `status` so we can show image\n * fallback if it is still `pending`\n *\n * @returns the status of the image loading progress\n *\n * @example\n *\n * ```jsx\n * function App(){\n * const status = useImage({ src: \"image.png\" })\n * return status === \"loaded\" ? <img src=\"image.png\" /> : <Placeholder />\n * }\n * ```\n */\nexport function useImage(props: UseImageProps) {\n const {\n src,\n srcSet,\n onLoad,\n onError,\n crossOrigin,\n sizes,\n ignoreFallback,\n } = props\n\n const [status, setStatus] = useState<Status>(\"pending\")\n\n useEffect(() => {\n setStatus(src ? \"loading\" : \"pending\")\n }, [src])\n\n const imageRef = useRef<HTMLImageElement | null>()\n\n const load = useCallback(() => {\n if (!src) return\n\n flush()\n\n const img = new Image()\n\n img.src = src\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin\n }\n\n if (srcSet) {\n img.srcset = srcSet\n }\n\n if (sizes) {\n img.sizes = sizes\n }\n\n img.onload = (event) => {\n flush()\n setStatus(\"loaded\")\n onLoad?.((event as unknown) as ImageEvent)\n }\n img.onerror = (error) => {\n flush()\n setStatus(\"failed\")\n onError?.(error as any)\n }\n\n imageRef.current = img\n }, [src, crossOrigin, srcSet, sizes, onLoad, onError])\n\n const flush = () => {\n if (imageRef.current) {\n imageRef.current.onload = null\n imageRef.current.onerror = null\n imageRef.current = null\n }\n }\n\n useSafeLayoutEffect(() => {\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's bail out.\n */\n if (ignoreFallback) return undefined\n\n if (status === \"loading\") {\n load()\n }\n return () => {\n flush()\n }\n }, [status, load, ignoreFallback])\n\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's just return 'loaded'\n */\n return ignoreFallback ? \"loaded\" : status\n}\n\nexport type UseImageReturn = ReturnType<typeof useImage>\n","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 { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"home\", [\n \"headings\",\n \"results\",\n \"nextPageBtn\",\n \"nextIcon\",\n \"prevIcon\",\n] as const);\n\nexport default testIds;\n","import {\n ArrowForwardIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"@chakra-ui/icons\";\nimport { Grid, GridItem, Button, Flex, IconButton } from \"@chakra-ui/react\";\nimport type { Dispatch, FunctionComponent, SetStateAction } from \"react\";\nimport testIds from \"./testIds\";\n\nconst iconBtnProps = {\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n};\n\nconst iconProps = {\n color: \"blue.500\",\n h: 5,\n w: 5,\n};\n\nexport interface HomePageControlsProps {\n offset: number;\n pageLimit: number;\n setOffset: Dispatch<SetStateAction<number>>;\n}\n\nexport const HomePageControls: FunctionComponent<HomePageControlsProps> = ({\n offset,\n pageLimit,\n setOffset,\n}) => {\n const nextDisabled = offset === pageLimit;\n const prevDisabled = offset === 0;\n\n const getNextPage = () => {\n setOffset(offset + 1);\n };\n\n const getPrevPage = () => {\n setOffset(offset - 1);\n };\n\n return (\n <Grid\n alignItems=\"center\"\n pt={6}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <Button\n colorScheme=\"blue\"\n data-testid={testIds.nextPageBtn}\n disabled={nextDisabled}\n onClick={getNextPage}\n rightIcon={<ArrowForwardIcon color=\"white\" />}\n >\n Next Page\n </Button>\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <IconButton\n aria-label=\"Previous Page\"\n data-testid={testIds.prevIcon}\n disabled={prevDisabled}\n icon={<ChevronLeftIcon {...iconProps} />}\n onClick={getPrevPage}\n {...iconBtnProps}\n />\n <IconButton\n aria-label=\"Next Page\"\n data-testid={testIds.nextIcon}\n disabled={nextDisabled}\n icon={<ChevronRightIcon {...iconProps} />}\n onClick={getNextPage}\n {...iconBtnProps}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Box, Stack, Heading, Skeleton } from \"@chakra-ui/react\";\nimport { FunctionComponent, useState } from \"react\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Picture } from \"../../components/Picture\";\nimport { Results } from \"../../components/Results\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { HomePageControls } from \"./HomePageControls\";\nimport testIds from \"./testIds\";\n\nconst sources = {\n optimal: [\n { media: \"(max-width:1024px)\", srcSet: \"/assets/hive@50.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/hive@100.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/hive@100.png\" },\n ],\n fallback: \"/assets/hive@50.png\",\n};\n\nexport const Home: FunctionComponent = () => {\n const searchAPI = useCatalogSearch();\n const [offset, setOffset] = useState(0);\n\n const { results, displayable, loading, pageLimit } = useCatalogResults({\n offset,\n limit: 20,\n query: \"\",\n language: null,\n });\n\n return (\n <Page\n meta={{\n title: \"Construct Hub\",\n description:\n \"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.\",\n suffix: false,\n }}\n pageName=\"home\"\n >\n <Box position=\"relative\">\n <Picture\n alt={\"\"}\n h=\"540px\"\n position=\"absolute\"\n sources={sources.optimal}\n src={sources.fallback}\n top=\"0\"\n w=\"100%\"\n zIndex=\"hide\"\n />\n {/* Hero Section */}\n <Stack\n align=\"stretch\"\n direction=\"column\"\n justify=\"center\"\n m=\"0 auto\"\n maxW=\"container.lg\"\n p={[10, 15, 20]}\n spacing={8}\n >\n <Stack\n color=\"blue.800\"\n data-testid={testIds.headings}\n spacing={4}\n textAlign=\"center\"\n >\n <Heading size=\"2xl\">\n Find reusable components for your cloud applications\n </Heading>\n <Heading as=\"h3\" size=\"md\">\n AWS CDK | CDK for Terraform | CDK For Kubernetes\n </Heading>\n <Heading as=\"h4\" mb={8} size=\"sm\">\n Search from{\" \"}\n {!results.length ? (\n <Skeleton display=\"inline-block\" h={3} w={8} />\n ) : (\n <Box as=\"span\" color=\"blue.500\">\n {results.length}\n </Box>\n )}{\" \"}\n construct libraries\n </Heading>\n </Stack>\n <CatalogSearch {...searchAPI} />\n </Stack>\n\n {/* TBD: Trending Libraries in favor of catalog results */}\n <Box p={4} pb={8}>\n <Results\n results={displayable}\n skeleton={{ loading, noOfItems: 20 }}\n />\n <HomePageControls\n offset={offset}\n pageLimit={pageLimit}\n setOffset={setOffset}\n />\n </Box>\n </Box>\n </Page>\n );\n};\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[8],{228:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),c=a(239),r={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=a(109),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 j=a.suffix,u=void 0===j||j,d=a.title,b=a.description,f=u?"".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]})}},252:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(215),c=a(54),r=a(1),i=function(e){var t=e.children,a=e.language;return c.e.has(a)?Object(r.jsx)(r.Fragment,{children:t}):Object(r.jsx)(n.a,{hasArrow:!0,label:"Documentation support for ".concat(c.b[a]," is coming soon!"),placement:"top-start",children:Object(r.jsx)("span",{children:t})})}},253:function(e,t,a){"use strict";a.d(t,"a",(function(){return j}));var n=a(6),c=a(22),r=a(568),i=a(108),s=a(80),o=a(1),l=["children","language","value","label","zIndex"],j=function(e){var t=e.children,a=e.language,j=e.value,u=e.label,d=void 0===u?j:u,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(j),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})}))})}},254:function(e,t,a){"use strict";a.d(t,"a",(function(){return j}));var n=a(6),c=a(22),r=a(21),i=a(184),s=a(582),o=a(1),l=["date","format"],j=Object(r.a)((function(e,t){var a=e.date,r=e.format,j=Object(c.a)(e,l);return Object(o.jsx)(i.a,Object(n.a)(Object(n.a)({as:"time",dateTime:a.toISOString(),ref:t},j),{},{children:Object(s.a)(a,r)}))}));j.displayName="Time"},285:function(e,t,a){"use strict";a.d(t,"a",(function(){return H}));var n=a(0),c=a(4),r=a(17),i=a(6),s=a(221),o=a(21),l=a(25),j=a(20);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,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(o.a)((function(e,t){var a=e.isExternal,c=e.target,r=e.rel,i=e.className,s=d(e,["isExternal","target","rel","className"]);return n.createElement(l.a.a,u({},s,{ref:t,className:Object(j.d)("chakra-linkbox__overlay",i),rel:a?"noopener noreferrer":r,target:a?"_blank":c,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),f=Object(o.a)((function(e,t){var a=e.className,c=d(e,["className"]);return n.createElement(l.a.div,u({ref:t,position:"relative"},c,{className:Object(j.d)("chakra-linkbox",a),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))})),O=a(189),h=a(199),x=a(184),m=a(201),g=a(194),p=a(29),v=a(54),y=a(108),w=a(252),S=a(253),k=a(254),L=a(141),N=a(112),P=a(57),I=Object(P.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),E=a(1),_=function(e){var t=e.children;return Object(E.jsx)(N.a,{h:64,p:0,w:"100%",children:Object(E.jsx)(L.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},z=function(e){var t=e.children;return e.isLink?Object(E.jsx)(f,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":I.container,children:Object(E.jsx)(_,{children:t})}):Object(E.jsx)(_,{children:t})},C=a(564),U=function(){return Object(E.jsxs)(E.Fragment,{children:[Object(E.jsxs)(s.a,{p:4,spacing:4,children:[Object(E.jsx)(C.a,{h:5,w:"50%"}),Object(E.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10})]}),Object(E.jsx)(C.a,{h:3,w:"75%"}),Object(E.jsx)(C.a,{h:3,w:"50%"})]}),Object(E.jsxs)(x.a,{children:[Object(E.jsx)(m.a,{}),Object(E.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(E.jsx)(C.a,{h:5,w:"25%"}),Object(E.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10})]})]})]})]})},T=function(e){var t,a,n,o=e.language,l=e.pkg;if(!l)return Object(E.jsx)(z,{children:Object(E.jsx)(U,{})});var j=(null===(t=l.metadata)||void 0===t?void 0:t.date)?Object(E.jsx)(k.a,{date:new Date(l.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,u=null!==(a=l.author)&&void 0!==a?a:{},d=null!==(n=l.languages)&&void 0!==n?n:{},L=Object.keys(d),N=function(e){return Object(y.a)(Object(i.a)({name:l.name,version:l.version,language:o},e))},P="string"===typeof u?u:u.name;return Object(E.jsxs)(z,{isLink:!0,children:[Object(E.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(E.jsx)(b,{as:p.b,to:N(),children:Object(E.jsxs)(O.a,{color:"blue.800","data-testid":I.name,fontWeight:"semibold",isTruncated:!0,children:[l.name,Object(E.jsx)(O.a,{as:"span",color:"blue.500","data-testid":I.version,fontSize:"xs",ml:2,children:l.version})]})}),Object(E.jsx)(f,{as:h.a,"data-testid":I.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[l.name.startsWith("@aws-cdk/")?Object(E.jsx)(S.a,{label:"official",language:o,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(r.a)(l.keywords.filter(Boolean).slice(0,3).map((function(e){return Object(E.jsx)(S.a,{language:o,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(E.jsx)(O.a,{"data-testid":I.description,fontSize:"sm",noOfLines:2,children:l.description})]}),Object(E.jsxs)(x.a,{children:[Object(E.jsx)(m.a,{}),Object(E.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(E.jsx)(O.a,{"data-testid":I.date,fontSize:"sm",isTruncated:!0,children:j}),Object(E.jsx)(g.a,{as:p.b,color:"blue.500","data-testid":I.author,fontSize:"sm",to:Object(y.c)({query:P}),children:P}),Object(E.jsx)(f,{align:"center",as:s.a,"data-testid":I.languages,direction:"row",children:Object.entries(v.c).sort((function(e,t){var a=Object(c.a)(e,1)[0],n=Object(c.a)(t,1)[0];return v.a.indexOf(a)-v.a.indexOf(n)})).map((function(e){var t=Object(c.a)(e,2),a=t[0],n=t[1],r=a,i=r===v.d.TypeScript||L.includes(r),s=r===v.d.TypeScript||v.e.has(r);if(!i)return null;var o=n.name,l=n.icon,j=Object(E.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(E.jsx)(w.a,{language:r,children:s?Object(E.jsx)(p.b,{"aria-label":"View package docs for ".concat(r),to:N({language:r}),children:j}):j},r)}))})]})]})]})},D=a(200),R=function(e){var t=e.children;return Object(E.jsx)(D.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},q=function(e){for(var t=e.noOfItems,a=[],n=0;n<t;n+=1)a.push(Object(E.jsx)(T,{},n));return Object(E.jsx)(R,{children:a})},F=Object(n.memo)(q),A=function(e){var t=e.language,a=e.results,n=e.skeleton;return(null===n||void 0===n?void 0:n.loading)?Object(E.jsx)(F,{noOfItems:n.noOfItems}):Object(E.jsx)(R,{children:a.map((function(e,a){return Object(E.jsx)(T,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},H=Object(n.memo)(A)},340:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(73),c=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},341:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(73),c=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},564:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(72);var n=a(8);a(27),a(107);a(218);var c=a(0);var r=a(25),i=a(59),s=a(21),o=a(66),l=a(43);var j=a(20);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,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,h=i.className,x=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),g=Object(j.d)("chakra-skeleton",h);if(s){var p=n||m?"none":f+" "+O+"s";return c.createElement(r.a.div,u({ref:t,className:g,__css:{animation:p}},x))}return c.createElement(b,u({ref:t,className:g},x,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a},584:function(e,t,a){"use strict";a.r(t),a.d(t,"SearchResults",(function(){return T})),a.d(t,"default",(function(){return T}));var n=a(6),c=a(199),r=a(184),i=a(201),s=a(0),o=a(18),l=a(116),j=a(228),u=a(285),d=a(13),b=a(117),f=a(118),O=a(113),h=a(108),x=a(341),m=a(569),g=a(141),p=a(197),v=a(29),y=a(1),w=function(e){var t=e.icon,a=e.offset,c=e.getPageUrl,r={"aria-label":"Page ".concat(a," link"),borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",icon:Object(y.jsx)(t,{color:"blue.500",h:5,w:5}),mx:2,h:10,w:10,variant:"outline"};return void 0!==a?Object(y.jsx)(p.a,Object(n.a)(Object(n.a)({},r),{},{as:v.b,to:c({offset:a})})):Object(y.jsx)(p.a,Object(n.a)(Object(n.a)({},r),{},{disabled:!0}))},S=a(4),k=a(216),L=a(189),N=function(e){var t=e.pageLimit,a=e.offset,n=e.getPageUrl,r=Object(s.useState)((a+1).toString()),i=Object(S.a)(r,2),l=i[0],j=i[1],u=Object(o.g)().push;Object(s.useEffect)((function(){j((a+1).toString())}),[a]);return Object(y.jsxs)(c.a,{align:"center",as:"form",mx:2,onSubmit:function(e){e.preventDefault(),u(n({offset:parseInt(l)-1}))},children:[Object(y.jsx)(k.a,{colorScheme:"blue",h:10,max:t+1,min:1,name:"page",onChange:function(e){e.preventDefault(),j(e.target.value)},p:0,textAlign:"center",type:"number",value:l,w:10}),Object(y.jsxs)(L.a,{ml:2,w:"max-content",children:["of ",t+1]})]})},P=a(340),I=a(145),E={children:"Next Page",colorScheme:"blue",rightIcon:Object(y.jsx)(P.a,{color:"white"})},_=function(e){var t=e.nextPageUrl;return t?Object(y.jsx)(I.a,Object(n.a)(Object(n.a)({},E),{},{as:v.b,to:t})):Object(y.jsx)(I.a,Object(n.a)(Object(n.a)({},E),{},{disabled:!0}))},z=function(e){var t=e.offset,a=e.pageLimit,n=e.getPageUrl,r=t<a?t+1:void 0,i=t>0?t-1:void 0;return Object(y.jsxs)(g.a,{alignItems:"center",pt:4,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(y.jsx)(g.b,{colStart:2,justifySelf:"center",children:Object(y.jsx)(_,{nextPageUrl:r?n({offset:r}):void 0})}),Object(y.jsx)(g.b,{colStart:3,justifySelf:"end",children:Object(y.jsxs)(c.a,{align:"center",justify:"center",py:4,children:[Object(y.jsx)(N,{getPageUrl:n,offset:t,pageLimit:a}),Object(y.jsx)(w,{getPageUrl:n,icon:x.a,offset:i}),Object(y.jsx)(w,{getPageUrl:n,icon:m.a,offset:r})]})})]})},C=function(e){var t=e.children;return Object(y.jsx)(L.a,{as:"em",color:"blue.500",fontWeight:"bold",children:t})},U=function(e){var t=e.limit,a=e.offset,n=e.count,c=e.filtered,r=t*a,i=r+t;return Object(y.jsxs)(L.a,{children:["Displaying"," ",Object(y.jsxs)(C,{children:[n?r+1:n," - ",i>n?n:i]})," ","of ",Object(y.jsx)(C,{children:n})," ",c?"search results":"constructs","."]})},T=function(){var e,t,a=Object(O.a)(),x=decodeURIComponent(null!==(e=a.get(d.b.SEARCH_QUERY))&&void 0!==e?e:""),m=a.get(d.b.LANGUAGE),g=Object(f.a)({defaultQuery:x,defaultLanguage:m}),p=function(e){var t=parseInt(e);return"NaN"==="".concat(t)?0:t}(null!==(t=a.get(d.b.OFFSET))&&void 0!==t?t:"0"),v=Object(o.g)().push,w=Object(b.a)({query:x,offset:p,limit:25,language:m}),S=w.results,k=w.displayable,L=w.loading,N=w.pageLimit,P=function(e){var t,a;return Object(h.c)({query:null!==(t=e.q)&&void 0!==t?t:x,language:m,offset:null!==(a=e.offset)&&void 0!==a?a:p})};return Object(s.useEffect)((function(){!L&&S.length&&(p<0||p>N)&&v(P(p<0?{offset:0}:{offset:N}))}),[L,S,N,p]),Object(s.useEffect)((function(){x!==g.query&&g.setQuery(x)}),[x]),Object(y.jsx)(j.a,{meta:{title:x||"Search",description:x?"".concat(S.length," results for ").concat(x," at Construct Hub"):"Search reusable components for your cloud application"},pageName:"search",children:Object(y.jsxs)(c.a,{direction:"column",maxW:"100vw",children:[Object(y.jsx)(r.a,{p:4,children:Object(y.jsx)(l.a,Object(n.a)({},g))}),Object(y.jsx)(i.a,{}),Object(y.jsxs)(r.a,{p:4,children:[Object(y.jsx)(r.a,{pb:4,children:Object(y.jsx)(U,{count:S.length,filtered:!!x,limit:25,offset:p})}),Object(y.jsx)(u.a,{language:null!==m&&void 0!==m?m:void 0,results:k,skeleton:{loading:L,noOfItems:25}}),Object(y.jsx)(z,{getPageUrl:P,limit:25,offset:p,pageLimit:N})]})]})})}}}]);
2
- //# sourceMappingURL=8.8af79a83.chunk.js.map
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[8],{224:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),c=a(233),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(109),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 j=a.suffix,u=void 0===j||j,d=a.title,b=a.description,f=u?"".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]})}},252:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(215),c=a(54),r=a(1),i=function(e){var t=e.children,a=e.language;return c.e.has(a)?Object(r.jsx)(r.Fragment,{children:t}):Object(r.jsx)(n.a,{hasArrow:!0,label:"Documentation support for ".concat(c.b[a]," is coming soon!"),placement:"top-start",children:Object(r.jsx)("span",{children:t})})}},253:function(e,t,a){"use strict";a.d(t,"a",(function(){return j}));var n=a(6),c=a(22),r=a(570),i=a(110),s=a(80),o=a(1),l=["children","language","value","label","zIndex"],j=function(e){var t=e.children,a=e.language,j=e.value,u=e.label,d=void 0===u?j:u,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(j),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})}))})}},254:function(e,t,a){"use strict";a.d(t,"a",(function(){return j}));var n=a(6),c=a(22),r=a(21),i=a(184),s=a(582),o=a(1),l=["date","format"],j=Object(r.a)((function(e,t){var a=e.date,r=e.format,j=Object(c.a)(e,l);return Object(o.jsx)(i.a,Object(n.a)(Object(n.a)({as:"time",dateTime:a.toISOString(),ref:t},j),{},{children:Object(s.a)(a,r)}))}));j.displayName="Time"},285:function(e,t,a){"use strict";a.d(t,"a",(function(){return H}));var n=a(0),c=a(4),r=a(17),i=a(6),s=a(221),o=a(21),l=a(25),j=a(20);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,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(o.a)((function(e,t){var a=e.isExternal,c=e.target,r=e.rel,i=e.className,s=d(e,["isExternal","target","rel","className"]);return n.createElement(l.a.a,u({},s,{ref:t,className:Object(j.d)("chakra-linkbox__overlay",i),rel:a?"noopener noreferrer":r,target:a?"_blank":c,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),f=Object(o.a)((function(e,t){var a=e.className,c=d(e,["className"]);return n.createElement(l.a.div,u({ref:t,position:"relative"},c,{className:Object(j.d)("chakra-linkbox",a),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))})),O=a(189),h=a(199),x=a(184),m=a(201),g=a(194),p=a(29),v=a(54),y=a(110),w=a(252),S=a(253),k=a(254),L=a(141),N=a(111),P=a(57),I=Object(P.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),E=a(1),_=function(e){var t=e.children;return Object(E.jsx)(N.a,{h:64,p:0,w:"100%",children:Object(E.jsx)(L.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},z=function(e){var t=e.children;return e.isLink?Object(E.jsx)(f,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":I.container,children:Object(E.jsx)(_,{children:t})}):Object(E.jsx)(_,{children:t})},C=a(566),U=function(){return Object(E.jsxs)(E.Fragment,{children:[Object(E.jsxs)(s.a,{p:4,spacing:4,children:[Object(E.jsx)(C.a,{h:5,w:"50%"}),Object(E.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10})]}),Object(E.jsx)(C.a,{h:3,w:"75%"}),Object(E.jsx)(C.a,{h:3,w:"50%"})]}),Object(E.jsxs)(x.a,{children:[Object(E.jsx)(m.a,{}),Object(E.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(E.jsx)(C.a,{h:5,w:"25%"}),Object(E.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10}),Object(E.jsx)(C.a,{h:5,w:10})]})]})]})]})},T=function(e){var t,a,n,o=e.language,l=e.pkg;if(!l)return Object(E.jsx)(z,{children:Object(E.jsx)(U,{})});var j=(null===(t=l.metadata)||void 0===t?void 0:t.date)?Object(E.jsx)(k.a,{date:new Date(l.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,u=null!==(a=l.author)&&void 0!==a?a:{},d=null!==(n=l.languages)&&void 0!==n?n:{},L=Object.keys(d),N=function(e){return Object(y.a)(Object(i.a)({name:l.name,version:l.version,language:o},e))},P="string"===typeof u?u:u.name;return Object(E.jsxs)(z,{isLink:!0,children:[Object(E.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(E.jsx)(b,{as:p.b,to:N(),children:Object(E.jsxs)(O.a,{color:"blue.800","data-testid":I.name,fontWeight:"semibold",isTruncated:!0,children:[l.name,Object(E.jsx)(O.a,{as:"span",color:"blue.500","data-testid":I.version,fontSize:"xs",ml:2,children:l.version})]})}),Object(E.jsx)(f,{as:h.a,"data-testid":I.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[l.name.startsWith("@aws-cdk/")?Object(E.jsx)(S.a,{label:"official",language:o,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(r.a)(l.keywords.filter(Boolean).slice(0,3).map((function(e){return Object(E.jsx)(S.a,{language:o,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(E.jsx)(O.a,{"data-testid":I.description,fontSize:"sm",noOfLines:2,children:l.description})]}),Object(E.jsxs)(x.a,{children:[Object(E.jsx)(m.a,{}),Object(E.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(E.jsx)(O.a,{"data-testid":I.date,fontSize:"sm",isTruncated:!0,children:j}),Object(E.jsx)(g.a,{as:p.b,color:"blue.500","data-testid":I.author,fontSize:"sm",to:Object(y.c)({query:P}),children:P}),Object(E.jsx)(f,{align:"center",as:s.a,"data-testid":I.languages,direction:"row",children:Object.entries(v.c).sort((function(e,t){var a=Object(c.a)(e,1)[0],n=Object(c.a)(t,1)[0];return v.a.indexOf(a)-v.a.indexOf(n)})).map((function(e){var t=Object(c.a)(e,2),a=t[0],n=t[1],r=a,i=r===v.d.TypeScript||L.includes(r),s=r===v.d.TypeScript||v.e.has(r);if(!i)return null;var o=n.name,l=n.icon,j=Object(E.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(E.jsx)(w.a,{language:r,children:s?Object(E.jsx)(p.b,{"aria-label":"View package docs for ".concat(r),to:N({language:r}),children:j}):j},r)}))})]})]})]})},D=a(200),R=function(e){var t=e.children;return Object(E.jsx)(D.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},q=function(e){for(var t=e.noOfItems,a=[],n=0;n<t;n+=1)a.push(Object(E.jsx)(T,{},n));return Object(E.jsx)(R,{children:a})},F=Object(n.memo)(q),A=function(e){var t=e.language,a=e.results,n=e.skeleton;return(null===n||void 0===n?void 0:n.loading)?Object(E.jsx)(F,{noOfItems:n.noOfItems}):Object(E.jsx)(R,{children:a.map((function(e,a){return Object(E.jsx)(T,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},H=Object(n.memo)(A)},340:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(73),c=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},341:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(73),c=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},566:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(72);var n=a(8);a(27),a(108);a(218);var c=a(0);var r=a(25),i=a(59),s=a(21),o=a(66),l=a(43);var j=a(20);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,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,h=i.className,x=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),g=Object(j.d)("chakra-skeleton",h);if(s){var p=n||m?"none":f+" "+O+"s";return c.createElement(r.a.div,u({ref:t,className:g,__css:{animation:p}},x))}return c.createElement(b,u({ref:t,className:g},x,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a},584:function(e,t,a){"use strict";a.r(t),a.d(t,"SearchResults",(function(){return T})),a.d(t,"default",(function(){return T}));var n=a(6),c=a(199),r=a(184),i=a(201),s=a(0),o=a(18),l=a(117),j=a(224),u=a(285),d=a(13),b=a(118),f=a(119),O=a(114),h=a(110),x=a(341),m=a(571),g=a(141),p=a(197),v=a(29),y=a(1),w=function(e){var t=e.icon,a=e.offset,c=e.getPageUrl,r={"aria-label":"Page ".concat(a," link"),borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",icon:Object(y.jsx)(t,{color:"blue.500",h:5,w:5}),mx:2,h:10,w:10,variant:"outline"};return void 0!==a?Object(y.jsx)(p.a,Object(n.a)(Object(n.a)({},r),{},{as:v.b,to:c({offset:a})})):Object(y.jsx)(p.a,Object(n.a)(Object(n.a)({},r),{},{disabled:!0}))},S=a(4),k=a(216),L=a(189),N=function(e){var t=e.pageLimit,a=e.offset,n=e.getPageUrl,r=Object(s.useState)((a+1).toString()),i=Object(S.a)(r,2),l=i[0],j=i[1],u=Object(o.g)().push;Object(s.useEffect)((function(){j((a+1).toString())}),[a]);return Object(y.jsxs)(c.a,{align:"center",as:"form",mx:2,onSubmit:function(e){e.preventDefault(),u(n({offset:parseInt(l)-1}))},children:[Object(y.jsx)(k.a,{colorScheme:"blue",h:10,max:t+1,min:1,name:"page",onChange:function(e){e.preventDefault(),j(e.target.value)},p:0,textAlign:"center",type:"number",value:l,w:10}),Object(y.jsxs)(L.a,{ml:2,w:"max-content",children:["of ",t+1]})]})},P=a(340),I=a(145),E={children:"Next Page",colorScheme:"blue",rightIcon:Object(y.jsx)(P.a,{color:"white"})},_=function(e){var t=e.nextPageUrl;return t?Object(y.jsx)(I.a,Object(n.a)(Object(n.a)({},E),{},{as:v.b,to:t})):Object(y.jsx)(I.a,Object(n.a)(Object(n.a)({},E),{},{disabled:!0}))},z=function(e){var t=e.offset,a=e.pageLimit,n=e.getPageUrl,r=t<a?t+1:void 0,i=t>0?t-1:void 0;return Object(y.jsxs)(g.a,{alignItems:"center",pt:4,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(y.jsx)(g.b,{colStart:2,justifySelf:"center",children:Object(y.jsx)(_,{nextPageUrl:r?n({offset:r}):void 0})}),Object(y.jsx)(g.b,{colStart:3,justifySelf:"end",children:Object(y.jsxs)(c.a,{align:"center",justify:"center",py:4,children:[Object(y.jsx)(N,{getPageUrl:n,offset:t,pageLimit:a}),Object(y.jsx)(w,{getPageUrl:n,icon:x.a,offset:i}),Object(y.jsx)(w,{getPageUrl:n,icon:m.a,offset:r})]})})]})},C=function(e){var t=e.children;return Object(y.jsx)(L.a,{as:"em",color:"blue.500",fontWeight:"bold",children:t})},U=function(e){var t=e.limit,a=e.offset,n=e.count,c=e.filtered,r=t*a,i=r+t;return Object(y.jsxs)(L.a,{children:["Displaying"," ",Object(y.jsxs)(C,{children:[n?r+1:n," - ",i>n?n:i]})," ","of ",Object(y.jsx)(C,{children:n})," ",c?"search results":"constructs","."]})},T=function(){var e,t,a=Object(O.a)(),x=decodeURIComponent(null!==(e=a.get(d.b.SEARCH_QUERY))&&void 0!==e?e:""),m=a.get(d.b.LANGUAGE),g=Object(f.a)({defaultQuery:x,defaultLanguage:m}),p=function(e){var t=parseInt(e);return"NaN"==="".concat(t)?0:t}(null!==(t=a.get(d.b.OFFSET))&&void 0!==t?t:"0"),v=Object(o.g)().push,w=Object(b.a)({query:x,offset:p,limit:25,language:m}),S=w.results,k=w.displayable,L=w.loading,N=w.pageLimit,P=function(e){var t,a;return Object(h.c)({query:null!==(t=e.q)&&void 0!==t?t:x,language:m,offset:null!==(a=e.offset)&&void 0!==a?a:p})};return Object(s.useEffect)((function(){!L&&S.length&&(p<0||p>N)&&v(P(p<0?{offset:0}:{offset:N}))}),[L,S,N,p]),Object(s.useEffect)((function(){x!==g.query&&g.setQuery(x)}),[x]),Object(y.jsx)(j.a,{meta:{title:x||"Search",description:x?"".concat(S.length," results for ").concat(x," at Construct Hub"):"Search reusable components for your cloud application"},pageName:"search",children:Object(y.jsxs)(c.a,{direction:"column",maxW:"100vw",children:[Object(y.jsx)(r.a,{p:4,children:Object(y.jsx)(l.a,Object(n.a)({},g))}),Object(y.jsx)(i.a,{}),Object(y.jsxs)(r.a,{p:4,children:[Object(y.jsx)(r.a,{pb:4,children:Object(y.jsx)(U,{count:S.length,filtered:!!x,limit:25,offset:p})}),Object(y.jsx)(u.a,{language:null!==m&&void 0!==m?m:void 0,results:k,skeleton:{loading:L,noOfItems:25}}),Object(y.jsx)(z,{getPageUrl:P,limit:25,offset:p,pageLimit:N})]})]})})}}}]);
2
+ //# sourceMappingURL=8.b0c4d0d8.chunk.js.map