construct-hub 0.2.1 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.jsii +2 -2
  2. package/lib/backend/transliterator/transliterator.bundle/Dockerfile +7 -3
  3. package/lib/backend/transliterator/transliterator.bundle/index.js +495 -238
  4. package/lib/construct-hub.js +1 -1
  5. package/lib/package-sources/code-artifact.js +1 -1
  6. package/lib/package-sources/npmjs.js +1 -1
  7. package/lib/spdx-license.js +1 -1
  8. package/package.json +9 -9
  9. package/website/asset-manifest.json +38 -34
  10. package/website/assets/aws-cdk.png +0 -0
  11. package/website/assets/kubernetes.png +0 -0
  12. package/website/assets/terraform.png +0 -0
  13. package/website/index.html +1 -1
  14. package/website/service-worker.js +1 -1
  15. package/website/service-worker.js.map +1 -1
  16. package/website/static/js/{0.ff9d42f8.chunk.js → 0.074504b3.chunk.js} +2 -2
  17. package/website/static/js/{0.ff9d42f8.chunk.js.map → 0.074504b3.chunk.js.map} +1 -1
  18. package/website/static/js/1.272635ed.chunk.js +2 -0
  19. package/website/static/js/{1.bd0a2241.chunk.js.map → 1.272635ed.chunk.js.map} +1 -1
  20. package/website/static/js/10.d664efc4.chunk.js +2 -0
  21. package/website/static/js/10.d664efc4.chunk.js.map +1 -0
  22. package/website/static/js/11.6f7f0c4b.chunk.js +2 -0
  23. package/website/static/js/{10.32615aa0.chunk.js.map → 11.6f7f0c4b.chunk.js.map} +1 -1
  24. package/website/static/js/12.c21a676e.chunk.js +2 -0
  25. package/website/static/js/12.c21a676e.chunk.js.map +1 -0
  26. package/website/static/js/{11.051d89fc.chunk.js → 13.8635b63a.chunk.js} +2 -2
  27. package/website/static/js/{11.051d89fc.chunk.js.map → 13.8635b63a.chunk.js.map} +1 -1
  28. package/website/static/js/{12.e96b82dd.chunk.js → 14.86414212.chunk.js} +3 -3
  29. package/website/static/js/{12.e96b82dd.chunk.js.LICENSE.txt → 14.86414212.chunk.js.LICENSE.txt} +0 -0
  30. package/website/static/js/{12.e96b82dd.chunk.js.map → 14.86414212.chunk.js.map} +1 -1
  31. package/website/static/js/{13.fb054c47.chunk.js → 15.78ca2283.chunk.js} +2 -2
  32. package/website/static/js/{13.fb054c47.chunk.js.map → 15.78ca2283.chunk.js.map} +1 -1
  33. package/website/static/js/4.53a8d553.chunk.js +3 -0
  34. package/website/static/js/{4.7cd92fab.chunk.js.LICENSE.txt → 4.53a8d553.chunk.js.LICENSE.txt} +0 -0
  35. package/website/static/js/4.53a8d553.chunk.js.map +1 -0
  36. package/website/static/js/5.5d827820.chunk.js +3 -0
  37. package/website/static/js/{5.0da0a8ef.chunk.js.LICENSE.txt → 5.5d827820.chunk.js.LICENSE.txt} +0 -0
  38. package/website/static/js/{5.0da0a8ef.chunk.js.map → 5.5d827820.chunk.js.map} +1 -1
  39. package/website/static/js/6.f37a117e.chunk.js +2 -0
  40. package/website/static/js/{6.c0e3f99c.chunk.js.map → 6.f37a117e.chunk.js.map} +1 -1
  41. package/website/static/js/{7.11632168.chunk.js → 7.a4739ebc.chunk.js} +2 -2
  42. package/website/static/js/{7.11632168.chunk.js.map → 7.a4739ebc.chunk.js.map} +1 -1
  43. package/website/static/js/{8.8af79a83.chunk.js → 8.b0c4d0d8.chunk.js} +2 -2
  44. package/website/static/js/{8.8af79a83.chunk.js.map → 8.b0c4d0d8.chunk.js.map} +1 -1
  45. package/website/static/js/9.dcbf33c2.chunk.js +2 -0
  46. package/website/static/js/9.dcbf33c2.chunk.js.map +1 -0
  47. package/website/static/js/main.e289a3fc.chunk.js +2 -0
  48. package/website/static/js/main.e289a3fc.chunk.js.map +1 -0
  49. package/website/static/js/runtime-main.fa5c7ad1.js +2 -0
  50. package/website/static/js/runtime-main.fa5c7ad1.js.map +1 -0
  51. package/website/static/js/1.bd0a2241.chunk.js +0 -2
  52. package/website/static/js/10.32615aa0.chunk.js +0 -2
  53. package/website/static/js/4.7cd92fab.chunk.js +0 -3
  54. package/website/static/js/4.7cd92fab.chunk.js.map +0 -1
  55. package/website/static/js/5.0da0a8ef.chunk.js +0 -3
  56. package/website/static/js/6.c0e3f99c.chunk.js +0 -2
  57. package/website/static/js/9.2b21526e.chunk.js +0 -2
  58. package/website/static/js/9.2b21526e.chunk.js.map +0 -1
  59. package/website/static/js/main.f1390607.chunk.js +0 -2
  60. package/website/static/js/main.f1390607.chunk.js.map +0 -1
  61. package/website/static/js/runtime-main.2f83ac68.js +0 -2
  62. package/website/static/js/runtime-main.2f83ac68.js.map +0 -1
@@ -1,2 +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":"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","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