construct-hub 0.3.159 → 0.3.160

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. package/.jsii +2 -2
  2. package/lib/construct-hub.js +1 -1
  3. package/lib/package-sources/code-artifact.js +1 -1
  4. package/lib/package-sources/npmjs.js +1 -1
  5. package/lib/package-tag/index.js +2 -2
  6. package/lib/s3/storage.js +1 -1
  7. package/lib/spdx-license.js +1 -1
  8. package/package.json +3 -3
  9. package/website/asset-manifest.json +16 -16
  10. package/website/index.html +1 -1
  11. package/website/static/js/{5.a4f881bb.chunk.js → 5.a110843d.chunk.js} +3 -3
  12. package/website/static/js/{5.a4f881bb.chunk.js.LICENSE.txt → 5.a110843d.chunk.js.LICENSE.txt} +0 -0
  13. package/website/static/js/{5.a4f881bb.chunk.js.map → 5.a110843d.chunk.js.map} +1 -1
  14. package/website/static/js/{6.18141b48.chunk.js → 6.8944c773.chunk.js} +2 -2
  15. package/website/static/js/{6.18141b48.chunk.js.map → 6.8944c773.chunk.js.map} +1 -1
  16. package/website/static/js/{7.63bdaf91.chunk.js → 7.80720b8b.chunk.js} +2 -2
  17. package/website/static/js/{7.63bdaf91.chunk.js.map → 7.80720b8b.chunk.js.map} +1 -1
  18. package/website/static/js/8.e4b13e68.chunk.js +2 -0
  19. package/website/static/js/8.e4b13e68.chunk.js.map +1 -0
  20. package/website/static/js/main.ded71e5d.chunk.js +2 -0
  21. package/website/static/js/main.ded71e5d.chunk.js.map +1 -0
  22. package/website/static/js/runtime-main.e4632d3a.js +2 -0
  23. package/website/static/js/{runtime-main.99def073.js.map → runtime-main.e4632d3a.js.map} +1 -1
  24. package/website/static/js/8.faf3cfee.chunk.js +0 -2
  25. package/website/static/js/8.faf3cfee.chunk.js.map +0 -1
  26. package/website/static/js/main.d24d1665.chunk.js +0 -2
  27. package/website/static/js/main.d24d1665.chunk.js.map +0 -1
  28. package/website/static/js/runtime-main.99def073.js +0 -2
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[8],{208:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(0),c=n(225),r={contribute:{event:{name:"Contribute Load"}},home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(34),o=n(2),s=(["default-src 'self' 'unsafe-inline' http://*.awsstatic.com;","connect-src 'self' https://*.shortbread.aws.dev http://*.shortbread.aws.dev http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;","frame-src http://aws.demdex.net http://dpm.demdex.net;","img-src 'self' https://* http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;","object-src 'none';","style-src 'self' 'unsafe-inline';"].join(" "),function(e){var t=e.children,n=e.meta,s=e.pageName,l=Object(i.e)(r[s]);Object(a.useEffect)((function(){l()}),[l]);var d=n.suffix,u=void 0===d||d,j=n.title,b=n.description,O=u?"".concat(j," - Construct Hub"):j;return Object(o.jsxs)(o.Fragment,{children:[Object(o.jsxs)(c.a,{children:[!1,Object(o.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(o.jsx)("meta",{charSet:"utf-8"}),Object(o.jsx)("title",{children:O}),Object(o.jsx)("meta",{content:O,property:"og:title"}),Object(o.jsx)("meta",{content:O,name:"twitter:title"}),Object(o.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(o.jsx)("meta",{content:b,name:"description"}),Object(o.jsx)("meta",{content:b,property:"og:description"}),Object(o.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})})},218:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return o}));var a=n(6),c=n(32),r=n(110),i=function(e){return!e||e.length<1?[]:e.reduce((function(e,t){return t.highlight?[].concat(Object(c.a)(e),[t.highlight]):e}),[])},o=function(e){for(var t=e.packageTags,n=e.keywords,i=new Array,o=new Set,s=0,l=[].concat(Object(c.a)(function(e){return(null!==e&&void 0!==e?e:[]).filter((function(e){var t;return Boolean(null===(t=e.keyword)||void 0===t?void 0:t.label)})).map((function(e){var t;return Object(a.a)(Object(a.a)({},e),{},{id:null===(t=e.keyword)||void 0===t?void 0:t.label})}))}(t)),Object(c.a)(function(e){return!e||e.length<1?[]:e.filter((function(e){return Boolean(e)&&!r.a.has(e)})).map((function(e){return{id:e,keyword:{label:e}}}))}(n)));s<l.length;s++){var d=l[s],u=d.keyword.label.toLowerCase();o.has(u)||(i.push(d),o.add(u))}return i}},224:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var a=n(0),c=n(22),r=function(){var e=Object(c.h)().search;return Object(a.useMemo)((function(){return new URLSearchParams(e)}),[e])}},231:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var a=n(89),c=function(e){var t=Object(a.b)().data;return(null!==t&&void 0!==t?t:{})[e]}},232:function(e,t,n){"use strict";n.d(t,"a",(function(){return b}));var a=n(18),c=n(0),r=n(22),i=n(108),o=n(15),s=n(224),l=i.d.TypeScript,d="preferred-language",u=function(e){return null!=e&&i.e.has(e)},j=function(e){if(u(e))return e;try{var t,n=null!==(t=localStorage.getItem(d))&&void 0!==t?t:"";if(u(n))return n}catch(a){}return l},b=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.updateUrl,n=e.updateSaved,i=Object(r.h)(),l=i.pathname,b=i.hash,O=Object(r.g)(),f=O.replace,h=Object(s.a)(),m=h.get(o.b.LANGUAGE),v=Object(c.useState)((function(){return j(m)})),g=Object(a.a)(v,2),p=g[0],x=g[1];Object(c.useEffect)((function(){u(m)&&m!==p&&x(m)}),[m]),Object(c.useEffect)((function(){m!==p&&t&&(h.set(o.b.LANGUAGE,p),f({pathname:l,hash:b,search:h.toString()}))}),[p,t]);var y=Object(c.useCallback)((function(e){if(x(e),n)try{localStorage.setItem(d,e)}catch(t){}}),[n]);return Object(c.useMemo)((function(){return[p,y]}),[p,y])}},242:function(e,t,n){"use strict";var a;n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return M})),function(e){e.Wide="wide"}(a||(a={}));var c=n(6),r=n(0),i=n(124),o=n(127),s=n(593),l=n(88),d=n(68),u=n(35),j=n(243),b=n(58),O=Object(b.a)("packageCard",["author","description","downloads","languages","published","title","version","comment","wideContainer"]),f=n(2),h=function(e){var t=e["data-testid"],n=e.tooltip,a=e.value;return Object(f.jsx)(o.a,{hasArrow:!0,isDisabled:!n,label:n,placement:"left",children:Object(f.jsx)(i.q,{"data-testid":t,fontSize:"xs",zIndex:1,children:a})})},m=function(){var e,t,n,a=z(),c=a.author,r=a.metadata.date,i=a.name,o=Object(l.b)().data,b=null===o||void 0===o||null===(e=o.packages)||void 0===e||null===(t=e[i])||void 0===t||null===(n=t.downloads)||void 0===n?void 0:n.npm,m="string"===typeof c?c:c.name,v=new Date(r);return Object(f.jsxs)(f.Fragment,{children:[void 0!==b&&Object(f.jsx)(h,{"data-testid":O.downloads,tooltip:"Download numbers are periodically sourced from the npm registry",value:"".concat(b.toLocaleString()," weekly downloads")}),Object(f.jsx)(h,{"data-testid":O.published,value:Object(f.jsx)(j.a,{date:v,fontSize:"xs",formattedDate:Object(s.a)(v,{addSuffix:!0})})}),Object(f.jsx)(h,{"data-testid":O.author,value:Object(f.jsxs)(f.Fragment,{children:["By"," ",Object(f.jsx)(u.a,{color:"blue.500",to:Object(d.c)({query:m}),children:m})]})})]})},v=n(18),g=n(28),p=n(34),x=n(232),y=n(112),w=function(e){var t=e.comment;return Object(f.jsxs)(i.q,{"data-testid":O.comment,fontSize:"md",lineHeight:"tall",noOfLines:4,children:[Object(f.jsxs)(i.q,{as:"span",color:"blue.500",fontWeight:"bold",children:["Editor's note:"," "]}),t]})},S=function(){var e=Object(x.a)(),t=Object(v.a)(e,1)[0],n=z(),a=n.dataEvent,c=n.description,r=n.comment,o=n.metadata.constructFramework,s=n.name,l=n.version,u=null===o||void 0===o?void 0:o.name,j=null===o||void 0===o?void 0:o.majorVersion;return Object(f.jsxs)(f.Fragment,{children:[Object(f.jsx)(i.l,{as:g.b,"data-event":a?Object(p.c)(a,"Package Card",s):void 0,to:Object(d.a)({name:s,version:l,language:t}),children:Object(f.jsxs)(i.f,{align:"center",children:[Object(f.jsx)(y.a,{majorVersion:j,mr:2,name:u}),Object(f.jsx)(i.i,{as:"h3",color:"blue.800","data-testid":O.title,fontSize:"md",fontWeight:"bold",wordBreak:"normal",children:s})]})}),r?Object(f.jsx)(w,{comment:r}):Object(f.jsx)(i.q,{color:"blue.800","data-testid":O.description,fontSize:"md",lineHeight:"tall",noOfLines:4,children:c||"No description available."})]})},k=n(218),C=n(244),T=function(){var e,t,n=(null!==(e=null===(t=z())||void 0===t?void 0:t.metadata)&&void 0!==e?e:{}).packageTags,a=void 0===n?[]:n,r=Object(k.a)(a),o=Object(v.a)(r,1)[0];return o?Object(f.jsx)(i.b,{fontSize:"xs",children:Object(f.jsx)(C.a,Object(c.a)({},o))}):null},F=n(108),P=n(246),D={sm:5,md:6,lg:8},R=function(e){var t=e.isRounded,n=void 0!==t&&t,a=e.languages,c=e.name,r=e.size,i=void 0===r?"md":r,o=e.version,s=Object.keys(null!==a&&void 0!==a?a:{});return Object(f.jsx)(f.Fragment,{children:Object.entries(F.c).sort((function(e,t){var n=Object(v.a)(e,1)[0],a=Object(v.a)(t,1)[0];return F.a.indexOf(n)-F.a.indexOf(a)})).map((function(e){var t=Object(v.a)(e,2),a=t[0],r=t[1],l=a,u=l===F.d.TypeScript||s.includes(l),j=l===F.d.TypeScript||F.e.has(l);if(!u)return null;var b=r.name,O=r.icon,h=Object(f.jsx)(O,{"aria-label":"Supports ".concat(b),borderRadius:n?"50%":0,h:D[i],opacity:j?1:.2,w:D[i]});return Object(f.jsx)(P.a,{language:l,children:j?Object(f.jsx)(g.b,{"aria-label":"View package docs for ".concat(l),to:Object(d.a)({name:c,version:o,language:l}),children:h}):h},l)}))})},I=function(){var e=z();return Object(f.jsx)(R,Object(c.a)(Object(c.a)({},e),{},{size:"sm"}))},A=n(245),E=function(){var e=z(),t=e.keywords,n=void 0===t?[]:t,a=e.metadata.packageTags,c=void 0===a?[]:a,r=Object(k.b)({packageTags:c,keywords:n});return Object(f.jsx)(f.Fragment,{children:r.slice(0,10).map((function(e){var t=e.id,n=e.keyword,a=(n=void 0===n?{}:n).label,c=n.color;return Object(f.jsx)(A.a,{value:t,variant:c,children:a},t)}))})},L=function(){return Object(f.jsx)(i.k,{_hover:{"> article":{bg:"gray.50"}},children:Object(f.jsxs)(i.g,{as:"article",bg:"white",border:"base",borderRadius:"sm",boxShadow:"base",color:"blue.800","data-testid":O.wideContainer,h:"full",minH:"12.5rem",templateColumns:{base:"1fr",lg:"1fr 14rem"},w:"full",children:[Object(f.jsxs)(i.f,{direction:"column",justify:"space-between",p:5,sx:{gap:"0.5rem"},children:[Object(f.jsx)(i.p,{spacing:3,children:Object(f.jsx)(S,{})}),Object(f.jsx)(i.f,{align:"center",sx:{gap:"0.5rem"},wrap:"wrap",children:Object(f.jsx)(E,{})})]}),Object(f.jsxs)(i.f,{align:{base:"end",lg:"initial"},borderLeft:{lg:"base"},borderTop:{base:"base",lg:"none"},direction:{base:"row",lg:"column"},justify:"space-between",p:5,sx:{gap:"0.5rem"},children:[Object(f.jsxs)(i.p,{spacing:1,children:[Object(f.jsx)(T,{}),Object(f.jsx)(i.p,{spacing:1,children:Object(f.jsx)(m,{})})]}),Object(f.jsx)(i.p,{"data-testid":O.languages,direction:"row",spacing:2,children:Object(f.jsx)(I,{})})]})]})})},q=Object(r.createContext)(null),z=function(){return Object(r.useContext)(q)},M=function(e){var t=e["data-event"],n=e.pkg,r=e.variant,i=void 0===r?a.Wide:r;return Object(f.jsx)(q.Provider,{value:Object(c.a)(Object(c.a)({},n),{},{dataEvent:t}),children:i===a.Wide&&Object(f.jsx)(L,{})})}},243:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(21),r=n(3),i=n(124),o=n(599),s=n(2),l=["date","format","formattedDate"],d=Object(r.e)((function(e,t){var n=e.date,r=e.format,d=e.formattedDate,u=Object(c.a)(e,l);return Object(s.jsx)(i.b,Object(a.a)(Object(a.a)({as:"time",dateTime:n.toISOString(),ref:t},u),{},{children:null!==d&&void 0!==d?d:Object(o.a)(n,null!==r&&void 0!==r?r:"")}))}));d.displayName="Time"},244:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(124),c=n(130),r=n(2),i=function(e){var t=e.label,n=e.color,i=e.icon;return Object(r.jsxs)(a.p,{align:"center",direction:"row",spacing:2,children:[Object(r.jsx)(c.a,{alt:"".concat(t," icon"),src:i,w:4}),Object(r.jsx)(a.q,{color:n,fontWeight:"bold",children:t})]})}},245:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(21),r=n(148),i=n(68),o=n(35),s=n(2),l=["children","value","label","zIndex"],d=function(e){var t=e.children,n=e.value,d=e.label,u=void 0===d?n:d,j=e.zIndex,b=Object(c.a)(e,l);return Object(s.jsx)(o.a,{"aria-label":"Tag: ".concat(u),to:Object(i.c)({keywords:[n]}),zIndex:j,children:Object(s.jsx)(r.a,Object(a.a)(Object(a.a)({_hover:{textDecoration:"underline"}},b),{},{children:Object(s.jsx)(r.b,{children:t})}))})}},246:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(127),c=n(108),r=n(2),i=function(e){var t=e.children,n=e.language,i=c.e.has(n),o=c.b[n],s=i?"Click to view documentation in ".concat(o):"Documentation support for ".concat(o," is coming soon!");return Object(r.jsx)(a.a,{hasArrow:!0,label:s,placement:"top-start",children:Object(r.jsx)("span",{children:t})})}},598:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return pe}));var a,c=n(124),r=n(208),i=n(137),o=n(32),s=n(10),l=n(6),d=n(18),u=n(0),j=n(43),b=n(86),O=n(152),f=n(34),h=n(51),m=(a={},Object(s.a)(a,h.a.NameAsc,"A-Z"),Object(s.a)(a,h.a.NameDesc,"Z-A"),Object(s.a)(a,h.a.PublishDateAsc,"Oldest first"),Object(s.a)(a,h.a.PublishDateDesc,"Newest first"),Object(s.a)(a,h.a.DownloadsDesc,"Most downloads"),Object(s.a)(a,h.a.DownloadsAsc,"Least downloads"),a),v=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return f.c.apply(void 0,["Search"].concat(t))},g={FILTERS:v("Filters"),RESULTS:v("Results"),SEARCH:v("Search"),SORT:v("Sort")},p=n(31),x=n(147),y=n(151),w=n(2),S=function(e){var t=e.name,n=e.hint,a=Object(x.a)({base:"auto",md:"right"});return Object(w.jsxs)(c.f,{align:"center",mb:1,children:[Object(w.jsx)(c.i,{as:"h4",size:"sm",w:"max-content",children:t}),n?Object(w.jsxs)(y.a,{colorScheme:"dark",placement:a,strategy:"fixed",children:[Object(w.jsx)(y.e,{children:Object(w.jsx)(c.f,{"aria-label":"Hint: ".concat(t),as:"button","data-event":Object(f.c)(g.FILTERS,t,"Popover"),ml:2,children:Object(w.jsx)(p.l,{h:3.5,w:3.5})})}),Object(w.jsxs)(y.d,{bg:"gray.700",borderRadius:"base",color:"white",fontSize:"sm",mx:{base:"1rem",md:"initial"},shadow:"whiteAlpha.300",children:[Object(w.jsx)(y.b,{bg:"gray.700"}),Object(w.jsx)(y.c,{children:Object(w.jsx)(c.q,{children:n})})]})]}):null]})},k=n(58),C=Object(k.a)("searchRedesign",["page","searchDetails","nextPage","prevPage","goToPage","sortButton","sortDropdown","sortItem","filtersPanel","cdkTypeFilter","cdkVersionFilter","filterItem","languagesFilter"]),T=function(e){var t=e["data-testid"],n=e.value,a=e.onValueChange,r=e.options,i=e.name,o=e.hint;return Object(w.jsxs)(c.p,{"data-testid":t,spacing:1,children:[Object(w.jsx)(S,{hint:o,name:i}),Object(w.jsx)(O.b,{onChange:a,value:n,children:Object(w.jsx)(c.p,{spacing:1,children:r.map((function(e){var t=e.display,n=e.value,a=Object(f.c)(g.FILTERS,i,"Filter",t);return Object(w.jsx)(O.a,{"data-event":a,value:n,children:Object(w.jsx)(c.q,{color:"gray.600","data-event":a,"data-testid":C.filterItem,"data-value":n,isTruncated:!0,children:t})},n)}))})})]})},F=n(15),P=n(96),D=n(224),R=function(e){var t=parseInt(e);return"NaN"==="".concat(t)?0:t},I=function(e){return e?decodeURIComponent(e).split(","):[]},A=Object(u.createContext)(void 0),E=function(){var e=Object(u.useContext)(A);if(!e)throw new Error("This hook must be called in a child of <SearchStateProvider />");return e},L=function(e){var t,n,a,c,r=e.children,i=Object(D.a)(),o=R(null!==(t=i.get(F.b.OFFSET))&&void 0!==t?t:"0"),s=decodeURIComponent(null!==(n=i.get(F.b.SEARCH_QUERY))&&void 0!==n?n:""),l=I(i.get(F.b.LANGUAGES)),d=i.get(F.b.TAGS),j=Object(u.useMemo)((function(){return I(d)}),[d]),b=i.get(F.b.KEYWORDS),O=Object(u.useMemo)((function(){return I(b)}),[b]),f=null!==(a=i.get(F.b.SORT))&&void 0!==a?a:void 0,h=null!==(c=i.get(F.b.CDK_TYPE))&&void 0!==c?c:void 0,m=i.get(F.b.CDK_MAJOR),v=m?R(m):void 0,g=Object(P.a)({defaultCdkMajor:v,defaultCdkType:h,defaultKeywords:O,defaultLanguages:l,defaultQuery:s,defaultSort:f,defaultTags:j});return Object(u.useEffect)((function(){s!==g.query&&g.setQuery(s)}),[s]),Object(u.useEffect)((function(){O.some((function(e){return!g.keywords.includes(e)}))&&g.setKeywords(O),j.some((function(e){return!g.tags.includes(e)}))&&g.setTags(j),h!==g.cdkType&&g.setCdkType(h),v!==g.cdkMajor&&g.setCdkMajor(v)}),[v,h,O,j]),Object(w.jsx)(A.Provider,{value:{limit:25,offset:o,query:s,searchAPI:g},children:r})},q=function(){var e,t=E().searchAPI,n=t.cdkType,a=t.setCdkType,c=t.cdkMajor,r=t.setCdkMajor,i=Object(b.b)(),O=Object(u.useMemo)((function(){var e=i.constructFrameworks,t=Object.entries(e).reduce((function(e,t){var n=Object(d.a)(t,2),a=n[0],c=n[1];return c.pkgCount<1?e:Object(l.a)(Object(l.a)({},e),{},Object(s.a)({},a,Object(l.a)({display:j.a[a],value:a},c)))}),{});return Object.keys(t).length?t:void 0}),[i]),f=Object(u.useMemo)((function(){var e;if(O&&n){var t=null===(e=O[n])||void 0===e?void 0:e.majorVersions;if(t)return Object(o.a)(t).sort((function(e,t){return e-t})).map((function(e){return{value:e.toString(),display:"".concat(j.a[n]," v").concat(e)}}))}}),[O,n]);if(!O)return null;return Object(w.jsxs)(w.Fragment,{children:[Object(w.jsx)(T,{"data-testid":C.cdkTypeFilter,hint:"Choose the right CDK for your IaC technology: AWS CDK for AWS CloudFormation, CDKtf for Terraform, or CDK8s for Kubernetes.",name:"CDK Type",onValueChange:function(e){var t=e;r(void 0),a(e?t:void 0)},options:[{display:"Any CDK Type",value:""}].concat(Object(o.a)(Object.values(O))),value:null!==n&&void 0!==n?n:""}),!!(f&&f.length>1)&&Object(w.jsx)(T,{"data-testid":C.cdkVersionFilter,hint:"Choose the major version of the CDK you're using to see only constructs that will work with that version.",name:"CDK Major Version",onValueChange:function(e){if(e){var t=parseInt(e,10);r(t)}else r(void 0)},options:[{display:"Any Major Version",value:""}].concat(Object(o.a)(f)),value:null!==(e=null===c||void 0===c?void 0:c.toString())&&void 0!==e?e:""})]})},z=n(125),M=n(127),K=n(11),U=n(48),W=n(126),V=function(e){var t=e.display,n=e.value,a=e.isDisabled,r=e.disabledHint,i=e.isChecked,o=e.onChange;return Object(w.jsx)(z.a,{isChecked:i,isDisabled:a,onChange:o,children:Object(w.jsx)(M.a,{hasArrow:!0,isDisabled:!a&&!r,label:r,placement:"right",children:Object(w.jsx)(c.q,{color:"gray.600","data-testid":C.filterItem,"data-value":n,isTruncated:!0,children:t})})},n)},N=function(e){var t=e["data-testid"],n=e.initialItemCount,a=e.hint,r=e.name,i=e.options,o=e.values,s=e.onValueChange,d=Object(K.g)(),j=Object(f.d)().trackCustomEvent,b=function(e){return function(){j(Object(f.b)({name:Object(f.c)(g.FILTERS,r,"Filter",e.display)})),s(e.value)}},O=i,h=[];n&&(O=i.slice(0,n),h=i.slice(n,i.length));var m=h.length>0;return Object(w.jsxs)(c.f,{"data-testid":t,direction:"column",children:[Object(w.jsx)(S,{hint:a,name:r}),Object(w.jsxs)(c.p,{mt:1,spacing:1,children:[O.map((function(e){return Object(u.createElement)(V,Object(l.a)(Object(l.a)({},e),{},{isChecked:o.includes(e.value),key:e.value,onChange:b(e)}))})),m&&Object(w.jsx)(U.a,{animateOpacity:!0,in:d.isOpen,unmountOnExit:!0,children:Object(w.jsx)(c.p,{spacing:1,children:h.map((function(e){return Object(u.createElement)(V,Object(l.a)(Object(l.a)({},e),{},{isChecked:o.includes(e.value),key:e.value,onChange:b(e)}))}))})})]}),m&&Object(w.jsx)(c.f,{align:"start",mt:1,children:Object(w.jsx)(W.a,{color:"gray.600","data-event":Object(f.c)(g.FILTERS,r,"Show More"),fontWeight:"normal",leftIcon:d.isOpen?Object(w.jsx)(p.f,{}):Object(w.jsx)(p.c,{}),onClick:d.onToggle,size:"sm",textAlign:"left",variant:"link",w:"auto",children:d.isOpen?"Show fewer options (".concat(O.length,")"):"Show more options (".concat(h.length,")")})})]})},H=function(){var e=E().searchAPI,t=e.keywords,n=e.setKeywords,a=Object(b.b)().keywords,c=Object(u.useMemo)((function(){var e=Object(o.a)(a.entries()).sort((function(e,t){return Object(d.a)(e,2)[1]<Object(d.a)(t,2)[1]?1:-1})).filter((function(e){var n=Object(d.a)(e,1)[0];return!t.includes(n)})).map((function(e){var t=Object(d.a)(e,1)[0];return{display:t,value:t}})).slice(0,25),n=t.filter((function(t){return!e.some((function(e){return e.value===t}))}));return[].concat(Object(o.a)(n.map((function(e){return{display:e,value:e}}))),Object(o.a)(e))}),[a,t]);return Object(w.jsx)(N,{"data-testid":C.languagesFilter,hint:"Focus the results by choosing one or more keywords reflecting the kind of construct you're looking for. Keywords are provided by construct authors.",initialItemCount:5,name:"Keywords",onValueChange:function(e){n(t.includes(e)?t.filter((function(t){return t!==e})):[].concat(Object(o.a)(t),[e]))},options:c,values:t})},B=n(108),G=Object.entries(B.b).map((function(e){var t=Object(d.a)(e,2),n=t[0],a=t[1];return Object(l.a)({display:a,value:n},B.e.has(n)?{isDisabled:!1}:{isDisabled:!0,disabledHint:"".concat(B.b[n]," support is coming soon!")})})).sort((function(e,t){return e.isDisabled>t.isDisabled?1:-1})),Q=function(){var e=E().searchAPI,t=e.languages,n=e.setLanguages;return Object(w.jsx)(N,{"data-testid":C.languagesFilter,hint:"Choose one or more languages. Results include constructs for use with at least one of the selected languages.",name:"Programming Language",onValueChange:function(e){var a=e;n(t.includes(a)?t.filter((function(e){return e!==a})):[].concat(Object(o.a)(t),[a]))},options:G,values:t})},_=n(231),J=function(){var e,t,n=(null!==(e=null===(t=Object(_.a)("packageTags"))||void 0===t?void 0:t.filter((function(e){return Boolean(e.searchFilter)})))&&void 0!==e?e:[]).reduce((function(e,t){var n,a,c=null===(n=t.searchFilter)||void 0===n?void 0:n.groupBy;return c?Object(l.a)(Object(l.a)({},e),{},Object(s.a)({},c,[].concat(Object(o.a)(null!==(a=e[c])&&void 0!==a?a:[]),[t]))):e}),{}),a=E().searchAPI,c=a.tags,r=a.setTags,i=function(e){r(c.includes(e)?c.filter((function(t){return t!==e})):[].concat(Object(o.a)(c),[e]))};return Object(w.jsx)(w.Fragment,{children:Object.entries(n).map((function(e){var t=Object(d.a)(e,2),n=t[0],a=t[1];return Object(w.jsx)(N,{name:n,onValueChange:i,options:a.map((function(e){return{display:e.searchFilter.display,value:e.id}})),values:c},n)}))})},Y="5.75rem",Z=function(){return Object(w.jsx)(i.a,{borderRadius:"none",boxShadow:"none","data-testid":C.filtersPanel,display:{base:"none",md:"flex"},maxH:"calc(100vh - ".concat(Y," - 1.25rem)"),maxW:"23rem",minW:"100%",overflow:"hidden auto",p:4,pos:"sticky",top:Y,zIndex:"docked",children:Object(w.jsxs)(c.p,{color:"blue.800",h:"max-content",spacing:4,top:4,children:[Object(w.jsx)(c.i,{as:"h3",size:"sm",children:"Filters"}),Object(w.jsx)(q,{}),Object(w.jsx)(Q,{}),Object(w.jsx)(J,{}),Object(w.jsx)(H,{})]})})},X=n(22),$=n(93),ee=n(242),te=Object(s.a)({},ee.b.Wide,(function(e){var t=e["data-event"],n=e.items;return Object(w.jsx)(c.p,{spacing:4,children:n.map((function(e){return Object(w.jsx)(ee.a,{"data-event":t,pkg:e,variant:ee.b.Wide},"".concat(e.name,"-").concat(e.version))}))})})),ne=Object(u.memo)((function(e){var t=e["data-event"],n=e.cardView,a=void 0===n?ee.b.Wide:n,r=e.items;if(e.loading||!r)return Object(w.jsx)(c.c,{children:Object(w.jsx)($.a,{size:"xl"})});var i=te[a];return Object(w.jsx)(i,{"data-event":t,items:r})}));ne.displayName="PackageList";var ae=n(69),ce=n(111),re=n(68),ie=n(28),oe=function(e){var t=e["data-event"],n=e["data-testid"],a=e.icon,c=e.offset,r=e.getPageUrl,i={"aria-label":"Page ".concat(c," link"),borderRadius:"md",borderColor:"blue.500",colorScheme:"blue","data-event":t,"data-testid":n,icon:Object(w.jsx)(a,{color:"blue.500",h:5,w:5}),mx:2,h:10,w:10,variant:"outline"};return void 0!==c?Object(w.jsx)(W.b,Object(l.a)(Object(l.a)({},i),{},{as:ie.b,to:r({offset:c})})):Object(w.jsx)(W.b,Object(l.a)(Object(l.a)({},i),{},{disabled:!0}))},se=n(129),le=function(e){var t=e["data-event"],n=e["data-testid"],a=e.pageLimit,r=e.offset,i=e.getPageUrl,o=Object(f.d)().trackCustomEvent,s=Object(u.useState)((r+1).toString()),l=Object(d.a)(s,2),j=l[0],b=l[1],O=Object(X.g)().push;Object(u.useEffect)((function(){b((r+1).toString())}),[r]);return Object(w.jsxs)(c.f,{align:"center",as:"form",mx:2,onSubmit:function(e){e.preventDefault(),O(i({offset:parseInt(j)-1}))},children:[Object(w.jsx)(se.a,{colorScheme:"blue","data-testid":n,h:10,max:a+1,min:1,name:"page",onChange:function(e){e.preventDefault(),b(e.target.value)},onFocus:function(){t&&o(Object(f.b)({name:t}))},p:0,textAlign:"center",type:"number",value:j,w:10}),Object(w.jsxs)(c.q,{ml:2,w:"max-content",children:["of ",a+1]})]})},de=function(e){var t=e.offset,n=e.getPageUrl,a=e.pageLimit,r=t<a?t+1:void 0,i=t>0?t-1:void 0;return Object(w.jsxs)(c.p,{align:"center",direction:"row",justify:"space-between",maxW:"18rem",mx:"auto",spacing:4,w:"full",children:[Object(w.jsx)(oe,{"data-event":Object(f.c)(g.RESULTS,"Previous Page"),"data-testid":C.prevPage,getPageUrl:n,icon:p.d,offset:i}),Object(w.jsx)(le,{"data-event":Object(f.c)(g.RESULTS,"Go to Page"),"data-testid":C.goToPage,getPageUrl:n,offset:t,pageLimit:a}),Object(w.jsx)(oe,{"data-event":Object(f.c)(g.RESULTS,"Next Page"),"data-testid":C.nextPage,getPageUrl:n,icon:p.e,offset:r})]})},ue=function(e){var t=e.children;return Object(w.jsx)(c.q,{as:"strong",color:"gray.700",children:t})},je=function(e){var t=e.first,n=e.count,a=e.last;return!t&&a>=n?Object(w.jsxs)(w.Fragment,{children:[Object(w.jsx)(ue,{children:n})," of ",Object(w.jsx)(ue,{children:n})]}):Object(w.jsxs)(w.Fragment,{children:[Object(w.jsxs)(ue,{children:[n?t+1:n," - ",a>n?n:a]})," ","of ",Object(w.jsx)(ue,{children:n})]})},be=function(e){var t=e.limit,n=e.offset,a=e.count,r=e.filtered,i=e.query,o=t*n,s=o+t,l=a>0;return Object(w.jsxs)(c.q,{"data-testid":C.searchDetails,children:[l?Object(w.jsxs)(w.Fragment,{children:["Displaying ",Object(w.jsx)(je,{count:a,first:o,last:s})," ",r?"search results":"constructs"]}):Object(w.jsx)(w.Fragment,{children:r?"There were no search results":"No constructs found"}),i&&Object(w.jsxs)(w.Fragment,{children:[" for ",Object(w.jsx)(ue,{children:i})]}),".",!l&&r&&Object(w.jsx)(w.Fragment,{children:" Try a different term."})]})},Oe=n(133),fe=function(){var e=E().searchAPI,t=e.sort,n=e.setSort;return Object(w.jsx)(T,{hint:"Sets the order of search results",name:"Sorted By",onValueChange:function(e){n(e||void 0)},options:[{display:"Relevance",value:""}].concat(Object(o.a)(Object.entries(m).map((function(e){var t=Object(d.a)(e,2),n=t[0];return{display:t[1],value:n}})))),value:null!==t&&void 0!==t?t:""})},he=function(){var e=Object(K.g)();return Object(w.jsxs)(w.Fragment,{children:[Object(w.jsx)(W.a,{colorScheme:"blue",display:{md:"none"},onClick:e.onOpen,rightIcon:Object(w.jsx)(p.c,{}),variant:"link",children:"Sorting and Filters"}),Object(w.jsxs)(Oe.a,Object(l.a)(Object(l.a)({},e),{},{placement:"bottom",children:[Object(w.jsx)(Oe.f,{}),Object(w.jsxs)(Oe.d,{color:"blue.800",maxH:"full",children:[Object(w.jsx)(Oe.e,{borderBottom:"base",children:"Sorting and Filters"}),Object(w.jsx)(Oe.c,{}),Object(w.jsx)(Oe.b,{children:Object(w.jsxs)(c.p,{color:"blue.800",pb:4,spacing:4,children:[Object(w.jsx)(fe,{}),Object(w.jsx)(q,{}),Object(w.jsx)(Q,{}),Object(w.jsx)(J,{}),Object(w.jsx)(H,{})]})})]})]}))]})},me=n(128),ve=function(){var e=E().searchAPI,t=e.sort,n=e.setSort,a=t?m[t]:"Relevance";return Object(w.jsxs)(c.f,{align:"center",children:[Object(w.jsx)(c.q,{children:"Sorted by"}),Object(w.jsxs)(me.a,{children:[Object(w.jsx)(me.b,{as:W.a,color:"blue.500","data-event":Object(f.c)(g.SORT,"Menu"),"data-testid":C.sortButton,ml:2,pl:2,pr:2,py:1,rightIcon:Object(w.jsx)(p.c,{}),variant:"link",children:a}),Object(w.jsxs)(me.f,{"data-testid":C.sortDropdown,minW:"180",zIndex:"sticky",children:[Object(w.jsx)(me.e,{"data-event":Object(f.c)(g.SORT,"Option","Relevance"),"data-testid":C.sortItem,"data-value":"",onClick:function(){return n(void 0)},children:"Relevance"},"Relevance"),Object.entries(m).map((function(e){var t=Object(d.a)(e,2),a=t[0],c=t[1];return Object(w.jsx)(me.e,{"data-event":Object(f.c)(g.SORT,"Option",c),"data-testid":C.sortItem,"data-value":a,onClick:function(){return n(a)},children:c},a)}))]})]})]})},ge=function(){var e=Object(u.useRef)(!0),t=Object(X.g)().push,n=E(),a=n.query,i=n.searchAPI,o=n.offset,s=n.limit,l=i.keywords,d=i.languages,j=i.sort,b=i.cdkType,O=i.cdkMajor,f=i.onSearch,h=i.tags,m=Object(ce.a)({offset:o,limit:s,query:a,keywords:l,languages:d,cdkMajor:O,cdkType:b,sort:j,tags:h}),v=m.page,p=m.pageLimit,x=m.results,y=function(e){var t,n;return Object(re.c)({cdkMajor:O,cdkType:b,keywords:l,query:null!==(t=e.q)&&void 0!==t?t:a,languages:d,sort:j,offset:null!==(n=e.offset)&&void 0!==n?n:o,tags:h})};return Object(u.useEffect)((function(){x.length&&(o<0||o>p)&&t(y(o<0?{offset:0}:{offset:p}))}),[x,o,p]),Object(u.useEffect)((function(){e.current?e.current=!1:f({replace:!0})}),[j,l,d,b,O,h]),Object(u.useEffect)((function(){window.scrollTo(0,0)}),[v]),Object(w.jsx)(r.a,{meta:{title:a||"Search",description:a?"".concat(x.length," results for ").concat(a," at Construct Hub"):"Search reusable components for your cloud application"},pageName:"search",children:Object(w.jsxs)(c.p,{direction:"column",maxW:"100vw",pb:4,px:4,spacing:4,children:[Object(w.jsx)(ae.a,{bg:"white","data-event":g.SEARCH,onChange:i.onQueryChange,onSubmit:function(e){i.setSort(void 0),i.onSubmit(e)},value:i.query}),Object(w.jsxs)(c.p,{align:{base:"start",lg:"center"},direction:{base:"column-reverse",lg:"row"},justify:{base:"initial",lg:"space-between"},spacing:4,children:[Object(w.jsx)(be,{count:x.length,filtered:!!a,limit:s,offset:o,query:a}),Object(w.jsx)(c.b,{display:{base:"none",md:"initial"},children:Object(w.jsx)(ve,{})}),Object(w.jsx)(c.b,{display:{md:"none"},children:Object(w.jsx)(he,{})})]}),Object(w.jsx)(ne,{"data-event":g.RESULTS,items:v}),Object(w.jsx)(c.b,{w:"full",children:Object(w.jsx)(de,{getPageUrl:y,offset:o,pageLimit:p})})]})})},pe=function(){return Object(w.jsx)(L,{children:Object(w.jsx)(r.a,{meta:{title:"Search - Construct Hub",description:"Search Construct Libraries for AWS CDK, CDK8s, and CDKtf"},pageName:"search",children:Object(w.jsxs)(c.g,{"data-testid":C.page,gap:4,h:"full",maxW:"100%",px:{base:0,md:6},py:6,templateColumns:{base:"1fr",md:"auto 1fr"},templateRows:"1fr",children:[Object(w.jsx)(Z,{}),Object(w.jsx)(ge,{})]})})})}}}]);
2
+ //# sourceMappingURL=8.e4b13e68.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","util/package.ts","hooks/useQueryParams/useQueryParams.ts","hooks/useConfigValue/useConfigValue.ts","hooks/useLanguage/useLanguage.ts","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/EditorsNote.tsx","components/PackageCard/Heading.tsx","components/PackageCard/Highlight.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/Tags.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/Time/Time.tsx","components/Highlight/Highlight.tsx","components/PackageTag/PackageTag.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","views/Search/constants.ts","views/Search/FilterHeading.tsx","views/Search/testIds.ts","views/Search/RadioFilter.tsx","views/Search/util.ts","views/Search/SearchState.tsx","views/Search/CDKFilter.tsx","views/Search/CheckboxFilter.tsx","views/Search/KeywordsFilter.tsx","views/Search/LanguageFilter.tsx","views/Search/TagFilter.tsx","views/Search/FilterPanel.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","views/Search/ArrowButton.tsx","views/Search/GoToPage.tsx","views/Search/PageControls.tsx","views/Search/SearchDetails.tsx","views/Search/SortFilter.tsx","views/Search/SortAndFilterDrawer.tsx","views/Search/SortedBy.tsx","views/Search/SearchResults.tsx","views/Search/Search.tsx"],"names":["pageInfo","contribute","event","name","home","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","join","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","highlightsFrom","packageTags","length","reduce","accum","tag","highlight","tagObjectsFrom","keywords","tagObjects","Array","tagLabels","Set","filter","Boolean","keyword","label","map","id","mapPackageTags","KEYWORD_IGNORE_LIST","has","mapPackageKeywords","toLowerCase","push","add","useQueryParams","useLocation","useMemo","URLSearchParams","useConfigValue","key","data","useConfig","defaultLang","Language","TypeScript","LOCAL_KEY","isValidLang","lang","TEMP_SUPPORTED_LANGUAGES","getInitialLang","langFromParams","storedLang","localStorage","getItem","useLanguage","options","updateUrl","updateSaved","pathname","hash","useHistory","replace","params","get","QUERY_PARAMS","LANGUAGE","useState","language","setLanguage","set","toString","update","useCallback","val","setItem","PackageCardType","testIds","createTestIds","Detail","dataTestid","tooltip","value","hasArrow","isDisabled","placement","fontSize","zIndex","Details","usePackageCard","author","date","metadata","useStats","downloads","packages","npm","authorName","publishDate","Date","undefined","toLocaleString","published","Time","formattedDate","formatDistanceToNowStrict","addSuffix","NavLink","color","to","getSearchPath","query","EditorsNote","comment","lineHeight","noOfLines","as","fontWeight","Heading","currentLanguage","dataEvent","constructFramework","version","cdkType","cdkVersion","majorVersion","Link","eventName","getPackagePath","align","CDKType","mr","wordBreak","Highlight","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","indexOf","info","isSupportedByLibrary","includes","isSupportedByConstructHub","Icon","icon","borderRadius","h","opacity","w","LanguageSupportTooltip","Languages","pkg","Tags","tags","slice","PackageTag","variant","WideCard","_hover","bg","border","boxShadow","wideContainer","minH","templateColumns","base","direction","justify","p","sx","gap","spacing","wrap","borderLeft","borderTop","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","forwardRef","ref","formatString","format","boxProps","dateTime","toISOString","displayName","alt","src","tagProps","textDecoration","isSupported","langName","LANGUAGE_NAME_MAP","message","SORT_RENDER_MAP","CatalogSearchSort","NameAsc","NameDesc","PublishDateAsc","PublishDateDesc","DownloadsDesc","DownloadsAsc","searchEvent","e","SEARCH_ANALYTICS","FILTERS","RESULTS","SEARCH","SORT","FilterHeading","hint","useBreakpointValue","mb","colorScheme","strategy","ml","mx","shadow","RadioFilter","checkedValue","onValueChange","onChange","display","filterItem","isTruncated","toNum","result","parseInt","parseQueryArray","queryString","decodeURIComponent","split","SearchStateContext","useSearchState","state","Error","SearchStateProvider","queryParams","offset","OFFSET","SEARCH_QUERY","tagQuery","TAGS","keywordQuery","KEYWORDS","CDK_TYPE","cdkMajorParam","CDK_MAJOR","cdkMajor","searchAPI","useCatalogSearch","defaultCdkMajor","defaultCdkType","defaultKeywords","defaultLanguages","defaultQuery","defaultSort","defaultTags","setQuery","some","k","setKeywords","t","setTags","setCdkType","setCdkMajor","limit","CDKFilter","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","opts","pkgCount","CDKTYPE_NAME_MAP","majorsOptions","majorVersions","a","b","cdkTypeFilter","type","cdk","values","cdkVersionFilter","major","majorNum","CheckboxItem","disabledHint","isChecked","CheckboxFilter","initialItemCount","checkedValues","collapse","useDisclosure","trackCustomEvent","useAnalytics","getOnChange","item","clickEvent","alwaysShow","showWhenExpanded","isExpandible","mt","animateOpacity","in","isOpen","unmountOnExit","leftIcon","onClick","onToggle","textAlign","KeywordsFilter","keywordMap","keywordOptions","baseOptions","keywordsNotInOptions","opt","languagesFilter","languageOptions","l1","l2","LanguageFilter","setLanguages","l","TagFilter","tagFilterGroups","searchFilter","groupName","groupBy","onTagsChange","tagItems","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxH","maxW","minW","overflow","pos","top","listViews","items","PackageList","memo","cardView","loading","View","ArrowButton","getPageUrl","props","borderColor","disabled","GoToPage","pageLimit","inputValue","setInputValue","onSubmit","preventDefault","max","min","target","onFocus","PageControls","nextOffset","prevOffset","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","Em","Count","first","count","last","SearchDetails","filtered","hasResults","searchDetails","SortFilter","setSort","newSort","SortAndFilterDrawer","drawer","onOpen","rightIcon","borderBottom","pb","SortedBy","selected","Button","sortButton","pl","pr","py","sortDropdown","sortItem","SearchResults","isFirstRender","useRef","onSearch","useCatalogResults","results","getUrl","q","current","window","scrollTo","px","SearchBar","onQueryChange","Search","templateRows"],"mappings":"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","file":"static/js/8.e4b13e68.chunk.js","sourcesContent":["export const pageInfo = {\n contribute: {\n event: {\n name: \"Contribute Load\",\n },\n },\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\n// Should be the same as the \"real\" CSP, except most things come from HTTP\n// instead of HTTPS (because it is protocol-relative, and the dev site is\n// served over plain HTTP).\nconst csp = [\n \"default-src 'self' 'unsafe-inline' http://*.awsstatic.com;\",\n \"connect-src 'self' https://*.shortbread.aws.dev http://*.shortbread.aws.dev http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"frame-src http://aws.demdex.net http://dpm.demdex.net;\",\n \"img-src 'self' https://* http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"object-src 'none';\",\n \"style-src 'self' 'unsafe-inline';\",\n].join(\" \");\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 content={csp} httpEquiv=\"Content-Security-Policy\" />\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 { PackageHighlight, PackageTagConfig } from \"../api/config\";\nimport { KEYWORD_IGNORE_LIST } from \"../constants/keywords\";\n\nexport interface TagObject extends PackageTagConfig {}\n\n/**\n * Reduces package tags to only return highlight tags\n */\nexport const highlightsFrom = (packageTags?: PackageTagConfig[]) => {\n if (!packageTags || packageTags.length < 1) return [];\n\n return packageTags.reduce(\n (accum: PackageHighlight[], tag: PackageTagConfig): PackageHighlight[] => {\n if (tag.highlight) {\n return [...accum, tag.highlight];\n }\n\n return accum;\n },\n []\n );\n};\n\n/**\n * Maps packageTags to an array of TagObjects, which can be rendered by the PackageTags Component\n */\nexport const mapPackageTags = (\n packageTags?: PackageTagConfig[]\n): TagObject[] => {\n return (packageTags ?? [])\n .filter((tag) => {\n return Boolean(tag.keyword?.label);\n })\n .map((tag) => ({\n ...tag,\n id: tag.keyword?.label!,\n }));\n};\n\n/**\n * Maps keywords to an array of TagObjects, which can be rendered by the PackageTags component\n */\nexport const mapPackageKeywords = (keywords?: string[]): TagObject[] => {\n if (!keywords || keywords.length < 1) return [];\n\n return keywords\n .filter((label) => Boolean(label) && !KEYWORD_IGNORE_LIST.has(label))\n .map((label) => ({\n id: label,\n keyword: {\n label,\n },\n }));\n};\n\n/**\n * Maps packageTags and keywords to a list of TagObjects, using mapPackageTags and mapPackageKeywords\n */\nexport const tagObjectsFrom = ({\n packageTags,\n keywords,\n}: {\n packageTags?: PackageTagConfig[];\n keywords?: string[];\n}): TagObject[] => {\n const tagObjects = new Array<TagObject>();\n const tagLabels = new Set<string>();\n\n for (const tag of [\n ...mapPackageTags(packageTags),\n ...mapPackageKeywords(keywords),\n ]) {\n const label = tag.keyword!.label.toLowerCase();\n if (!tagLabels.has(label)) {\n tagObjects.push(tag);\n tagLabels.add(label);\n }\n }\n\n return tagObjects;\n};\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import type { Config } from \"../../api/config\";\nimport { useConfig } from \"../../contexts/Config\";\n\nexport const useConfigValue = <T extends keyof Config>(key: T) => {\n const { data } = useConfig();\n return (data ?? {})[key];\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"downloads\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"comment\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text, Tooltip } from \"@chakra-ui/react\";\nimport { formatDistanceToNowStrict } from \"date-fns\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { useStats } from \"../../contexts/Stats\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n\n tooltip?: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n tooltip,\n value,\n}) => (\n <Tooltip hasArrow isDisabled={!tooltip} label={tooltip} placement=\"left\">\n {/* zIndex required to allow tooltip to display due to card link overlay */}\n <Text data-testid={dataTestid} fontSize=\"xs\" zIndex={1}>\n {value}\n </Text>\n </Tooltip>\n);\n\nexport const Details: FunctionComponent = () => {\n const {\n author,\n metadata: { date },\n name,\n } = usePackageCard();\n\n const { data } = useStats();\n const downloads: number | undefined = data?.packages?.[name]?.downloads?.npm;\n\n const authorName = typeof author === \"string\" ? author : author.name;\n const publishDate = new Date(date);\n\n return (\n <>\n {downloads !== undefined && (\n <Detail\n data-testid={testIds.downloads}\n tooltip=\"Download numbers are periodically sourced from the npm registry\"\n value={`${downloads.toLocaleString()} weekly downloads`}\n />\n )}\n <Detail\n data-testid={testIds.published}\n value={\n <Time\n date={publishDate}\n fontSize=\"xs\"\n formattedDate={formatDistanceToNowStrict(publishDate, {\n addSuffix: true,\n })}\n />\n }\n />\n <Detail\n data-testid={testIds.author}\n value={\n <>\n By{\" \"}\n <NavLink\n color=\"blue.500\"\n to={getSearchPath({\n query: authorName,\n })}\n >\n {authorName}\n </NavLink>\n </>\n }\n />\n </>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport const EditorsNote: FunctionComponent<{ comment?: string }> = ({\n comment,\n}) => {\n return (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text as=\"span\" color=\"blue.500\" fontWeight=\"bold\">\n Editor&apos;s note:{\" \"}\n </Text>\n {comment}\n </Text>\n );\n};\n","import {\n Flex,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { CDKTypeBadge } from \"../CDKType\";\nimport { EditorsNote } from \"./EditorsNote\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const {\n dataEvent,\n description,\n comment,\n metadata: { constructFramework },\n name,\n version,\n } = usePackageCard();\n\n const cdkType = constructFramework?.name;\n const cdkVersion = constructFramework?.majorVersion;\n\n return (\n <>\n <LinkOverlay\n as={Link}\n data-event={\n dataEvent ? eventName(dataEvent, \"Package Card\", name) : undefined\n }\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <Flex align=\"center\">\n <CDKTypeBadge majorVersion={cdkVersion} mr={2} name={cdkType} />\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"normal\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\n {comment ? (\n <EditorsNote comment={comment} />\n ) : (\n <Text\n color=\"blue.800\"\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n )}\n </>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { highlightsFrom } from \"../../util/package\";\nimport { Highlight as HighlightComponent } from \"../Highlight\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Highlight: FunctionComponent = () => {\n const { packageTags = [] } = usePackageCard()?.metadata ?? {};\n const [highlight] = highlightsFrom(packageTags);\n\n if (!highlight) return null;\n\n return (\n <Box fontSize=\"xs\">\n <HighlightComponent {...highlight} />\n </Box>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages?: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\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 || 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 borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\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={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { FunctionComponent } from \"react\";\nimport { tagObjectsFrom } from \"../../util/package\";\nimport { PackageTag } from \"../PackageTag\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Tags: FunctionComponent = () => {\n const {\n keywords = [],\n metadata: { packageTags = [] },\n } = usePackageCard();\n\n const tags = tagObjectsFrom({\n packageTags,\n keywords,\n });\n\n return (\n <>\n {tags.slice(0, 10).map(({ id, keyword: { label, color } = {} }) => (\n <PackageTag key={id} value={id} variant={color}>\n {label}\n </PackageTag>\n ))}\n </>\n );\n};\n","import { Flex, Grid, LinkBox, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"gray.50\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"blue.800\"\n data-testid={testIds.wideContainer}\n h=\"full\"\n minH=\"12.5rem\"\n templateColumns={{ base: \"1fr\", lg: \"1fr 14rem\" }}\n w=\"full\"\n >\n {/* Top / Left side of card */}\n <Flex\n direction=\"column\"\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={3}>\n <Heading />\n </Stack>\n\n <Flex align=\"center\" sx={{ gap: \"0.5rem\" }} wrap=\"wrap\">\n <Tags />\n </Flex>\n </Flex>\n\n {/* Bottom / Right side of card */}\n <Flex\n align={{ base: \"end\", lg: \"initial\" }}\n borderLeft={{ lg: \"base\" }}\n borderTop={{ base: \"base\", lg: \"none\" }}\n direction={{ base: \"row\", lg: \"column\" }}\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={1}>\n <Highlight />\n <Stack spacing={1}>\n <Details />\n </Stack>\n </Stack>\n\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\n </Flex>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n \"data-event\"?: string;\n pkg: CatalogPackage;\n variant?: PackageCardType;\n}\n\ninterface PackageCardState extends CatalogPackage {\n comment?: string;\n dataEvent?: string;\n}\n\nconst PackageCardContext = createContext<PackageCardState | null>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n \"data-event\": dataEvent,\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={{ ...pkg, dataEvent }}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport type TimeOptions = {\n date: Date;\n format?: string;\n formattedDate?: string;\n};\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, formattedDate, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {formattedDate ?? format(date, formatString ?? \"\")}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { Stack, Image, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\ninterface HighlightProps {\n label: string;\n color?: string;\n icon?: string;\n}\n\nexport const Highlight: FunctionComponent<HighlightProps> = ({\n label,\n color,\n icon,\n}: HighlightProps) => {\n return (\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Image alt={`${label} icon`} src={icon} w={4} />\n <Text color={color} fontWeight=\"bold\">\n {label}\n </Text>\n </Stack>\n );\n};\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ keywords: [value] })}\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 { 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<\n LanguageSupportTooltipProps\n> = ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n const langName = LANGUAGE_NAME_MAP[language];\n\n const message = isSupported\n ? `Click to view documentation in ${langName}`\n : `Documentation support for ${langName} is coming soon!`;\n\n return (\n <Tooltip hasArrow label={message} placement=\"top-start\">\n <span>{children}</span>\n </Tooltip>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport type { QueryParamKey } from \"../../constants/url\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nconst LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n\nexport const SORT_RENDER_MAP = {\n [CatalogSearchSort.NameAsc]: \"A-Z\",\n [CatalogSearchSort.NameDesc]: \"Z-A\",\n [CatalogSearchSort.PublishDateAsc]: \"Oldest first\",\n [CatalogSearchSort.PublishDateDesc]: \"Newest first\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n\nconst searchEvent: typeof eventName = (...e) => eventName(\"Search\", ...e);\n\nexport const SEARCH_ANALYTICS = {\n FILTERS: searchEvent(\"Filters\"),\n RESULTS: searchEvent(\"Results\"),\n SEARCH: searchEvent(\"Search\"),\n SORT: searchEvent(\"Sort\"),\n};\n","import { QuestionIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Heading,\n Text,\n Popover,\n PopoverTrigger,\n PopoverBody,\n PopoverArrow,\n PopoverContent,\n useBreakpointValue,\n PlacementWithLogical,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\n\nexport interface FilterHeadingProps {\n name: string;\n hint?: string;\n}\n\nexport const FilterHeading: FunctionComponent<FilterHeadingProps> = ({\n name,\n hint,\n}) => {\n const placement = useBreakpointValue<PlacementWithLogical>({\n base: \"auto\",\n md: \"right\",\n });\n\n return (\n <Flex align=\"center\" mb={1}>\n <Heading as=\"h4\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement={placement} strategy=\"fixed\">\n <PopoverTrigger>\n <Flex\n aria-label={`Hint: ${name}`}\n as=\"button\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Popover\")}\n ml={2}\n >\n <QuestionIcon h={3.5} w={3.5} />\n </Flex>\n </PopoverTrigger>\n <PopoverContent\n bg=\"gray.700\"\n borderRadius=\"base\"\n color=\"white\"\n fontSize=\"sm\"\n mx={{ base: \"1rem\", md: \"initial\" }}\n shadow=\"whiteAlpha.300\"\n >\n <PopoverArrow bg=\"gray.700\" />\n <PopoverBody>\n <Text>{hint}</Text>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n ) : null}\n </Flex>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nexport default createTestIds(\"searchRedesign\", [\n \"page\",\n // Results\n \"searchDetails\",\n \"nextPage\",\n \"prevPage\",\n \"goToPage\",\n // Sorting\n \"sortButton\",\n \"sortDropdown\",\n \"sortItem\",\n // Filters Panel\n \"filtersPanel\",\n \"cdkTypeFilter\",\n \"cdkVersionFilter\",\n \"filterItem\",\n \"languagesFilter\",\n] as const);\n","import { Radio, RadioGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\n\nexport interface RadioFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n value?: string;\n onValueChange: (value: string) => void;\n options: {\n display: string;\n value: string;\n }[];\n}\n\nexport const RadioFilter: FunctionComponent<RadioFilterProps> = ({\n \"data-testid\": dataTestid,\n value: checkedValue,\n onValueChange,\n options,\n name,\n hint,\n}) => {\n return (\n <Stack data-testid={dataTestid} spacing={1}>\n <FilterHeading hint={hint} name={name} />\n <RadioGroup onChange={onValueChange} value={checkedValue}>\n <Stack spacing={1}>\n {options.map(({ display, value }) => {\n const dataEvent = eventName(\n SEARCH_ANALYTICS.FILTERS,\n name,\n \"Filter\",\n display\n );\n return (\n <Radio data-event={dataEvent} key={value} value={value}>\n <Text\n color=\"gray.600\"\n data-event={dataEvent}\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n );\n })}\n </Stack>\n </RadioGroup>\n </Stack>\n );\n};\n","export const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseQueryArray = <T extends string>(\n queryString: string | null\n) => {\n if (!queryString) return [];\n\n return decodeURIComponent(queryString).split(\",\") as T[];\n};\n","/**\n * @fileoverview Exposes page-level state and setters to all components in the new SearchResults View.\n */\nimport {\n createContext,\n FunctionComponent,\n useContext,\n useEffect,\n useMemo,\n} from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport {\n UseCatalogSearchReturn,\n useCatalogSearch,\n} from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { LIMIT } from \"./constants\";\nimport { parseQueryArray, toNum } from \"./util\";\n\nexport interface SearchState {\n limit: number;\n offset: number;\n query: string;\n searchAPI: UseCatalogSearchReturn;\n}\n\nconst SearchStateContext = createContext<SearchState | undefined>(undefined);\n\n/**\n * A hook to access Search Page specific state. This can only be in descendants of the new Search Page\n * and will otherwise throw an error.\n */\nexport const useSearchState = () => {\n const state = useContext(SearchStateContext);\n\n if (!state) {\n throw new Error(\n `This hook must be called in a child of <SearchStateProvider />`\n );\n }\n\n return state;\n};\n\nexport const SearchStateProvider: FunctionComponent = ({ children }) => {\n const queryParams = useQueryParams();\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const query = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languages: Language[] = parseQueryArray(\n queryParams.get(QUERY_PARAMS.LANGUAGES)\n );\n const tagQuery = queryParams.get(QUERY_PARAMS.TAGS);\n const tags = useMemo(() => parseQueryArray(tagQuery), [tagQuery]);\n\n const keywordQuery = queryParams.get(QUERY_PARAMS.KEYWORDS);\n const keywords = useMemo(() => parseQueryArray(keywordQuery), [keywordQuery]);\n\n const sort = (queryParams.get(QUERY_PARAMS.SORT) ?? undefined) as\n | CatalogSearchSort\n | undefined;\n\n const cdkType =\n (queryParams.get(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined;\n\n const cdkMajorParam = queryParams.get(QUERY_PARAMS.CDK_MAJOR);\n const cdkMajor = cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n\n const searchAPI = useCatalogSearch({\n defaultCdkMajor: cdkMajor,\n defaultCdkType: cdkType,\n defaultKeywords: keywords,\n defaultLanguages: languages,\n defaultQuery: query,\n defaultSort: sort,\n defaultTags: tags,\n });\n\n useEffect(() => {\n if (query !== searchAPI.query) {\n searchAPI.setQuery(query);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n useEffect(() => {\n if (keywords.some((k) => !searchAPI.keywords.includes(k))) {\n searchAPI.setKeywords(keywords);\n }\n\n if (tags.some((t) => !searchAPI.tags.includes(t))) {\n searchAPI.setTags(tags);\n }\n\n if (cdkType !== searchAPI.cdkType) {\n searchAPI.setCdkType(cdkType);\n }\n\n if (cdkMajor !== searchAPI.cdkMajor) {\n searchAPI.setCdkMajor(cdkMajor);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [cdkMajor, cdkType, keywords, tags]);\n\n return (\n <SearchStateContext.Provider\n value={{\n limit: LIMIT,\n offset,\n query,\n searchAPI,\n }}\n >\n {children}\n </SearchStateContext.Provider>\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { CatalogConstructFrameworkMeta } from \"../../api/catalog-search\";\nimport { CDKType, CDKTYPE_NAME_MAP } from \"../../constants/constructs\";\nimport { useSearchContext } from \"../../contexts/Search\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\ntype CDKOptions = Partial<{\n [key in CDKType]: CatalogConstructFrameworkMeta & {\n display: string;\n value: key;\n };\n}>;\n\nexport const CDKFilter: FunctionComponent = () => {\n const { cdkType, setCdkType, cdkMajor, setCdkMajor } =\n useSearchState().searchAPI;\n const searchAPI = useSearchContext()!;\n\n // Options with less than one package will be omitted\n const cdkOptions = useMemo(() => {\n const cdkTypes = searchAPI.constructFrameworks;\n const options = Object.entries(cdkTypes).reduce((opts, [name, meta]) => {\n if (meta.pkgCount < 1) {\n return opts;\n }\n\n return {\n ...opts,\n [name]: {\n display: CDKTYPE_NAME_MAP[name as CDKType],\n value: name,\n ...meta,\n },\n };\n }, {});\n\n return Object.keys(options).length ? (options as CDKOptions) : undefined;\n }, [searchAPI]);\n\n const majorsOptions = useMemo(() => {\n if (!cdkOptions || !cdkType) return undefined;\n const majorVersions = cdkOptions[cdkType]?.majorVersions;\n\n if (!majorVersions) return undefined;\n\n return [...majorVersions]\n .sort((a, b) => a - b)\n .map((value) => ({\n value: value.toString(),\n display: `${CDKTYPE_NAME_MAP[cdkType]} v${value}`,\n }));\n }, [cdkOptions, cdkType]);\n\n if (!cdkOptions) {\n return null;\n }\n\n const onCdkTypeChange = (type: string) => {\n const cdk = type as CDKType;\n setCdkMajor(undefined);\n setCdkType(type ? cdk : undefined);\n };\n\n const onCdkMajorChange = (major: string) => {\n if (!major) {\n setCdkMajor(undefined);\n return;\n }\n\n const majorNum = parseInt(major, 10);\n\n setCdkMajor(majorNum);\n };\n\n return (\n <>\n <RadioFilter\n data-testid={testIds.cdkTypeFilter}\n hint=\"Choose the right CDK for your IaC technology: AWS CDK for AWS CloudFormation, CDKtf for Terraform, or CDK8s for Kubernetes.\"\n name=\"CDK Type\"\n onValueChange={onCdkTypeChange}\n options={[\n { display: \"Any CDK Type\", value: \"\" },\n ...Object.values(cdkOptions),\n ]}\n value={cdkType ?? \"\"}\n />\n {/* No point in showing major versions if only a single one is available */}\n {!!(majorsOptions && majorsOptions.length > 1) && (\n <RadioFilter\n data-testid={testIds.cdkVersionFilter}\n hint=\"Choose the major version of the CDK you're using to see only constructs that will work with that version.\"\n name=\"CDK Major Version\"\n onValueChange={onCdkMajorChange}\n options={[\n { display: \"Any Major Version\", value: \"\" },\n ...majorsOptions,\n ]}\n value={cdkMajor?.toString() ?? \"\"}\n />\n )}\n </>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Button,\n Collapse,\n Checkbox,\n Stack,\n Text,\n Tooltip,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { clickEvent, eventName, useAnalytics } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\n\ninterface CheckboxOption {\n display: string;\n value: string;\n isDisabled?: boolean;\n disabledHint?: string;\n}\n\ninterface CheckboxItemProps extends CheckboxOption {\n onChange: () => void;\n isChecked: boolean;\n}\n\nexport interface CheckboxFilterProps extends FilterHeadingProps {\n /**\n * Test ID to select checkbox in tests\n */\n \"data-testid\"?: string;\n /**\n * Number of items that can be initially shown\n */\n initialItemCount?: number;\n /**\n * Defines checkbox items\n */\n options: CheckboxOption[];\n /**\n * Selected values\n */\n values: string[];\n /**\n * Callback triggered when an item is clicked\n */\n onValueChange: (value: string) => void;\n}\n\nconst CheckboxItem: FunctionComponent<CheckboxItemProps> = ({\n display,\n value,\n isDisabled,\n disabledHint,\n isChecked,\n onChange,\n}) => (\n <Checkbox\n isChecked={isChecked}\n isDisabled={isDisabled}\n key={value}\n onChange={onChange}\n >\n <Tooltip\n hasArrow\n isDisabled={!isDisabled && !disabledHint}\n label={disabledHint}\n placement=\"right\"\n >\n <Text\n color=\"gray.600\"\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Tooltip>\n </Checkbox>\n);\n\nexport const CheckboxFilter: FunctionComponent<CheckboxFilterProps> = ({\n \"data-testid\": dataTestid,\n initialItemCount,\n hint,\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const collapse = useDisclosure();\n const { trackCustomEvent } = useAnalytics();\n\n const getOnChange = (item: CheckboxOption) => () => {\n trackCustomEvent(\n clickEvent({\n name: eventName(SEARCH_ANALYTICS.FILTERS, name, \"Filter\", item.display),\n })\n );\n onValueChange(item.value);\n };\n\n let alwaysShow: typeof options = options;\n let showWhenExpanded: typeof options = [];\n\n if (initialItemCount) {\n alwaysShow = options.slice(0, initialItemCount);\n showWhenExpanded = options.slice(initialItemCount, options.length);\n }\n\n const isExpandible = showWhenExpanded.length > 0;\n\n return (\n <Flex data-testid={dataTestid} direction=\"column\">\n <FilterHeading hint={hint} name={name} />\n <Stack mt={1} spacing={1}>\n {alwaysShow.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n {isExpandible && (\n <Collapse animateOpacity in={collapse.isOpen} unmountOnExit>\n <Stack spacing={1}>\n {showWhenExpanded.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n </Stack>\n </Collapse>\n )}\n </Stack>\n {isExpandible && (\n <Flex align=\"start\" mt={1}>\n <Button\n color=\"gray.600\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Show More\")}\n fontWeight=\"normal\"\n leftIcon={collapse.isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n onClick={collapse.onToggle}\n size=\"sm\"\n textAlign=\"left\"\n variant=\"link\"\n w=\"auto\"\n >\n {collapse.isOpen\n ? `Show fewer options (${alwaysShow.length})`\n : `Show more options (${showWhenExpanded.length})`}\n </Button>\n </Flex>\n )}\n </Flex>\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { useSearchContext } from \"../../contexts/Search\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const KeywordsFilter: FunctionComponent = () => {\n const { keywords, setKeywords } = useSearchState().searchAPI;\n const keywordMap = useSearchContext()!.keywords;\n\n const onKeywordChange = (keyword: string) => {\n setKeywords(\n keywords.includes(keyword)\n ? keywords.filter((k) => k !== keyword)\n : [...keywords, keyword]\n );\n };\n\n const keywordOptions = useMemo(() => {\n const baseOptions = [...keywordMap.entries()]\n .sort(([, count1], [, count2]) => {\n return count1 < count2 ? 1 : -1;\n })\n .filter(([keyword]) => !keywords.includes(keyword))\n .map(([keyword]) => ({\n display: keyword,\n value: keyword,\n }))\n .slice(0, 25);\n\n const keywordsNotInOptions = keywords.filter(\n (k) => !baseOptions.some((opt) => opt.value === k)\n );\n\n return [\n ...keywordsNotInOptions.map((k) => ({ display: k, value: k })),\n ...baseOptions,\n ];\n }, [keywordMap, keywords]);\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Focus the results by choosing one or more keywords reflecting the kind of construct you're looking for. Keywords are provided by construct authors.\"\n initialItemCount={5}\n name=\"Keywords\"\n onValueChange={onKeywordChange}\n options={keywordOptions}\n values={keywords}\n />\n );\n};\n","import { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nconst languageOptions = Object.entries(LANGUAGE_NAME_MAP)\n .map(([key, value]) => ({\n display: value,\n value: key,\n ...(TEMP_SUPPORTED_LANGUAGES.has(key as Language)\n ? { isDisabled: false }\n : {\n isDisabled: true,\n disabledHint: `${\n LANGUAGE_NAME_MAP[key as Language]\n } support is coming soon!`,\n }),\n }))\n .sort((l1, l2) => {\n // Push disabled languages to back of list\n return l1.isDisabled > l2.isDisabled ? 1 : -1;\n });\n\nexport const LanguageFilter: FunctionComponent = () => {\n const { languages, setLanguages } = useSearchState().searchAPI;\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n setLanguages(\n languages.includes(language)\n ? languages.filter((l) => l !== language)\n : [...languages, language]\n );\n };\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Choose one or more languages. Results include constructs for use with at least one of the selected languages.\"\n name=\"Programming Language\"\n onValueChange={onLanguagesChange}\n options={languageOptions}\n values={languages}\n />\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { PackageTagConfig } from \"../../api/config\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { useSearchState } from \"./SearchState\";\n\ninterface FilterGroups {\n [group: string]: PackageTagConfig[];\n}\n\nexport const TagFilter: FunctionComponent = () => {\n const filterableTags =\n useConfigValue(\"packageTags\")?.filter((tag) => Boolean(tag.searchFilter)) ??\n [];\n\n const tagFilterGroups: FilterGroups = filterableTags.reduce(\n (accum: FilterGroups, tag: PackageTagConfig): FilterGroups => {\n const groupName = tag.searchFilter?.groupBy;\n if (groupName) {\n return {\n ...accum,\n [groupName]: [...(accum[groupName] ?? []), tag],\n };\n }\n return accum;\n },\n {}\n );\n\n const { tags, setTags } = useSearchState().searchAPI;\n\n const onTagsChange = (tag: string) => {\n setTags(\n tags.includes(tag) ? tags.filter((t) => t !== tag) : [...tags, tag]\n );\n };\n\n return (\n <>\n {Object.entries(tagFilterGroups).map(([title, tagItems]) => {\n return (\n <CheckboxFilter\n key={title}\n name={title}\n onValueChange={onTagsChange}\n options={tagItems.map((tag) => {\n return {\n display: tag.searchFilter!.display,\n value: tag.id,\n };\n })}\n values={tags}\n />\n );\n })}\n </>\n );\n};\n","import { Heading, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Card } from \"../../components/Card\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { TagFilter } from \"./TagFilter\";\nimport testIds from \"./testIds\";\n\nexport interface FilterPanelProps {}\n\n// Header height + section padding\nconst TOP_OFFSET = \"5.75rem\";\n\n/**\n * The desktop Resolution Filter Panel\n */\nexport const FilterPanel: FunctionComponent<FilterPanelProps> = () => {\n return (\n <Card\n borderRadius=\"none\"\n boxShadow=\"none\"\n data-testid={testIds.filtersPanel}\n display={{ base: \"none\", md: \"flex\" }}\n maxH={`calc(100vh - ${TOP_OFFSET} - 1.25rem)`}\n maxW=\"23rem\"\n minW=\"100%\"\n overflow=\"hidden auto\"\n p={4}\n pos=\"sticky\"\n top={TOP_OFFSET}\n zIndex=\"docked\"\n >\n <Stack color=\"blue.800\" h=\"max-content\" spacing={4} top={4}>\n <Heading as=\"h3\" size=\"sm\">\n Filters\n </Heading>\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </Card>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n \"data-event\"?: string;\n items: CatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n \"data-event\": dataEvent,\n cardView = PackageCardType.Wide,\n items,\n loading,\n // title,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View data-event={dataEvent} items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\nimport { PackageListViewProps } from \"./PackageList\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n \"data-event\": dataEvent,\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n data-event={dataEvent}\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { clickEvent, useAnalytics } from \"../../contexts/Analytics\";\n\nexport interface GoToPageProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n pageLimit,\n offset,\n getPageUrl,\n}) => {\n const { trackCustomEvent } = useAnalytics();\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n const { push } = useHistory();\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n push(getPageUrl({ offset: parseInt(inputValue) - 1 }));\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n colorScheme=\"blue\"\n data-testid={dataTestid}\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n onFocus={() => {\n if (dataEvent) {\n trackCustomEvent(clickEvent({ name: dataEvent }));\n }\n }}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { GoToPage } from \"./GoToPage\";\nimport testIds from \"./testIds\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n getPageUrl,\n pageLimit,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Stack\n align=\"center\"\n direction=\"row\"\n justify=\"space-between\"\n maxW=\"18rem\"\n mx=\"auto\"\n spacing={4}\n w=\"full\"\n >\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Previous Page\")}\n data-testid={testIds.prevPage}\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <GoToPage\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Go to Page\")}\n data-testid={testIds.goToPage}\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Next Page\")}\n data-testid={testIds.nextPage}\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Stack>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport interface SearchDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n query?: string;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"strong\" color=\"gray.700\">\n {children}\n </Text>\n);\n\nconst Count: FunctionComponent<{\n first: number;\n count: number;\n last: number;\n}> = ({ first, count, last }) => {\n if (!first && last >= count) {\n return (\n <>\n <Em>{count}</Em> of <Em>{count}</Em>\n </>\n );\n }\n\n return (\n <>\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em>\n </>\n );\n};\n\nexport const SearchDetails: FunctionComponent<SearchDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n query,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n const hasResults = count > 0;\n\n return (\n <Text data-testid={testIds.searchDetails}>\n {hasResults ? (\n <>\n Displaying <Count count={count} first={first} last={last} />{\" \"}\n {filtered ? \"search results\" : \"constructs\"}\n </>\n ) : (\n <>{filtered ? \"There were no search results\" : \"No constructs found\"}</>\n )}\n {query && (\n <>\n {\" for \"}\n <Em>{query}</Em>\n </>\n )}\n .{!hasResults && filtered && <> Try a different term.</>}\n </Text>\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSearchState } from \"./SearchState\";\n\nexport const SortFilter: FunctionComponent = () => {\n const { sort, setSort } = useSearchState().searchAPI;\n\n const onSortChange = (newSort: string) => {\n setSort(newSort ? (newSort as CatalogSearchSort) : undefined);\n };\n\n return (\n <RadioFilter\n hint=\"Sets the order of search results\"\n name=\"Sorted By\"\n onValueChange={onSortChange}\n options={[\n { display: \"Relevance\", value: \"\" },\n ...Object.entries(SORT_RENDER_MAP).map(([value, display]) => ({\n display,\n value,\n })),\n ]}\n value={sort ?? \"\"}\n />\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Drawer,\n Stack,\n DrawerBody,\n DrawerHeader,\n DrawerOverlay,\n DrawerContent,\n DrawerCloseButton,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { SortFilter } from \"./SortFilter\";\nimport { TagFilter } from \"./TagFilter\";\n\n/**\n * The mobile filter Drawer (Bottomsheet in iOS terminology)\n */\nexport const SortAndFilterDrawer: FunctionComponent = () => {\n const drawer = useDisclosure();\n return (\n <>\n <Button\n colorScheme=\"blue\"\n display={{ md: \"none\" }}\n onClick={drawer.onOpen}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n Sorting and Filters\n </Button>\n <Drawer {...drawer} placement=\"bottom\">\n <DrawerOverlay />\n\n <DrawerContent color=\"blue.800\" maxH=\"full\">\n <DrawerHeader borderBottom=\"base\">Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"blue.800\" pb={4} spacing={4}>\n <SortFilter />\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Text,\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n Button,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS, SORT_RENDER_MAP } from \"./constants\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const SortedBy: FunctionComponent = () => {\n const { searchAPI } = useSearchState();\n const { sort, setSort } = searchAPI;\n\n const selected = sort ? SORT_RENDER_MAP[sort] : \"Relevance\";\n\n return (\n <Flex align=\"center\">\n <Text>Sorted by</Text>\n <Menu>\n <MenuButton\n as={Button}\n color=\"blue.500\"\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Menu\")}\n data-testid={testIds.sortButton}\n ml={2}\n pl={2} // For some reason, the px shorthand doesn't work on this Button\n pr={2}\n py={1}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n {selected}\n </MenuButton>\n <MenuList data-testid={testIds.sortDropdown} minW=\"180\" zIndex=\"sticky\">\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", \"Relevance\")}\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => setSort(undefined)}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", display)}\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => setSort(value as CatalogSearchSort)}\n >\n {display}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n </Flex>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { SearchBar } from \"../../components/SearchBar\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { getSearchPath } from \"../../util/url\";\nimport { SearchQueryParam, SEARCH_ANALYTICS } from \"./constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { useSearchState } from \"./SearchState\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\n\nexport const SearchResults: FunctionComponent = () => {\n const isFirstRender = useRef(true);\n const { push } = useHistory();\n\n const { query, searchAPI, offset, limit } = useSearchState();\n const { keywords, languages, sort, cdkType, cdkMajor, onSearch, tags } =\n searchAPI;\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit,\n query,\n keywords,\n languages,\n cdkMajor,\n cdkType,\n sort,\n tags,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n cdkMajor,\n cdkType,\n keywords,\n query: (params.q ?? query) as string,\n languages,\n sort,\n offset: params.offset ?? offset,\n tags,\n });\n };\n\n // Resets the page number to 1 if query param offset is below 0, or to the last page if offset is higher than page count\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\n\n // Reset offset and update url when query, filters, or sort change\n // We want to avoid doing this on first render / when a user directly navigates to a search URL\n // so we keep a ref to prevent this\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else {\n // Trigger a history replace rather than push to avoid bloating browser history\n onSearch({ replace: true });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sort, keywords, languages, cdkType, cdkMajor, tags]);\n\n // Scroll to top on page change\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [page]);\n\n return (\n <Page\n meta={{\n title: query || \"Search\",\n description: query\n ? `${results.length} results for ${query} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Stack direction=\"column\" maxW=\"100vw\" pb={4} px={4} spacing={4}>\n <SearchBar\n bg=\"white\"\n data-event={SEARCH_ANALYTICS.SEARCH}\n onChange={searchAPI.onQueryChange}\n onSubmit={(e) => {\n searchAPI.setSort(undefined);\n searchAPI.onSubmit(e);\n }}\n value={searchAPI.query}\n />\n\n <Stack\n align={{ base: \"start\", lg: \"center\" }}\n direction={{ base: \"column-reverse\", lg: \"row\" }}\n justify={{ base: \"initial\", lg: \"space-between\" }}\n spacing={4}\n >\n <SearchDetails\n count={results.length}\n filtered={!!query}\n limit={limit}\n offset={offset}\n query={query}\n />\n\n <Box display={{ base: \"none\", md: \"initial\" }}>\n <SortedBy />\n </Box>\n\n <Box display={{ md: \"none\" }}>\n <SortAndFilterDrawer />\n </Box>\n </Stack>\n\n <PackageList data-event={SEARCH_ANALYTICS.RESULTS} items={page} />\n\n <Box w=\"full\">\n <PageControls\n getPageUrl={getUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Stack>\n </Page>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FilterPanel } from \"./FilterPanel\";\nimport { SearchResults } from \"./SearchResults\";\nimport { SearchStateProvider } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const Search: FunctionComponent = () => {\n return (\n <SearchStateProvider>\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description:\n \"Search Construct Libraries for AWS CDK, CDK8s, and CDKtf\",\n }}\n pageName=\"search\"\n >\n <Grid\n data-testid={testIds.page}\n gap={4}\n h=\"full\"\n maxW=\"100%\"\n px={{ base: 0, md: 6 }}\n py={6}\n templateColumns={{ base: \"1fr\", md: \"auto 1fr\" }}\n templateRows=\"1fr\"\n >\n {/* Filter Panel Desktop */}\n <FilterPanel />\n\n {/* Results, Info, and Controls */}\n <SearchResults />\n </Grid>\n </Page>\n </SearchStateProvider>\n );\n};\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[2],{108:function(e,t,n){"use strict";n.d(t,"d",(function(){return o})),n.d(t,"f",(function(){return d})),n.d(t,"a",(function(){return b})),n.d(t,"b",(function(){return j})),n.d(t,"e",(function(){return O})),n.d(t,"c",(function(){return f}));var a,r,c,o,i=n(10),s=n(6),l=n(8),u=n(2);!function(e){e.DotNet="dotnet",e.TypeScript="typescript",e.Python="python",e.Go="golang",e.Java="java"}(o||(o={}));var d=(a={},Object(i.a)(a,o.TypeScript,o.TypeScript),Object(i.a)(a,o.Python,o.Python),Object(i.a)(a,o.Go,o.Go),Object(i.a)(a,o.Java,o.Java),Object(i.a)(a,o.DotNet,"csharp"),a),b=[o.TypeScript,o.Python,o.Java,o.Go,o.DotNet],j=(r={},Object(i.a)(r,o.TypeScript,"TypeScript"),Object(i.a)(r,o.Python,"Python"),Object(i.a)(r,o.Java,"Java"),Object(i.a)(r,o.Go,"Go"),Object(i.a)(r,o.DotNet,".NET"),r),O=new Set([o.Python,o.TypeScript,o.Java,o.DotNet]),f=(c={},Object(i.a)(c,o.TypeScript,{name:j.typescript,icon:function(e){return Object(u.jsxs)(l.a,Object(s.a)(Object(s.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 256 256",children:[Object(u.jsx)("path",{d:"M0 128v128h256V0H0z",fill:"#007ACC"}),Object(u.jsx)("path",{d:"M56.611 128.85l-.081 10.483h33.32v94.68h23.57v-94.68h33.32v-10.28c0-5.69-.122-10.444-.284-10.566-.122-.162-20.399-.244-44.983-.203l-44.739.122-.122 10.443zM206.567 118.108c6.501 1.626 11.459 4.51 16.01 9.224 2.357 2.52 5.851 7.112 6.136 8.209.08.325-11.053 7.802-17.798 11.987-.244.163-1.22-.894-2.317-2.52-3.291-4.794-6.745-6.867-12.028-7.232-7.76-.529-12.759 3.535-12.718 10.32 0 1.992.284 3.17 1.097 4.796 1.707 3.535 4.876 5.648 14.832 9.955 18.326 7.884 26.168 13.085 31.045 20.48 5.445 8.25 6.664 21.415 2.966 31.208-4.063 10.646-14.14 17.88-28.323 20.277-4.388.772-14.79.65-19.504-.203-10.28-1.829-20.033-6.908-26.047-13.572-2.357-2.601-6.949-9.387-6.664-9.875.122-.162 1.178-.812 2.356-1.503 1.138-.65 5.446-3.13 9.509-5.486l7.355-4.267 1.544 2.276c2.154 3.291 6.867 7.802 9.712 9.305 8.167 4.308 19.383 3.698 24.909-1.26 2.357-2.153 3.332-4.388 3.332-7.68 0-2.966-.366-4.266-1.91-6.5-1.99-2.845-6.054-5.243-17.595-10.24-13.206-5.69-18.895-9.225-24.096-14.833-3.007-3.25-5.852-8.452-7.03-12.8-.975-3.616-1.22-12.678-.447-16.335 2.723-12.76 12.353-21.658 26.25-24.3 4.51-.853 14.994-.528 19.424.57z",fill:"#FFF"})]}))}}),Object(i.a)(c,o.Python,{name:j.python,icon:function(e){return Object(u.jsxs)(l.a,Object(s.a)(Object(s.a)({},e),{},{version:"1.0",viewBox:"0 0 110.421 109.846",children:[Object(u.jsxs)("defs",{children:[Object(u.jsxs)("linearGradient",{id:"a",children:[Object(u.jsx)("stop",{offset:"0",stopColor:"#ffe052"}),Object(u.jsx)("stop",{offset:"1",stopColor:"#ffc331"})]}),Object(u.jsx)("linearGradient",{gradientUnits:"userSpaceOnUse",id:"d",x1:"89.137",x2:"147.777",xlinkHref:"#a",y1:"111.921",y2:"168.101"}),Object(u.jsxs)("linearGradient",{id:"b",children:[Object(u.jsx)("stop",{offset:"0",stopColor:"#387eb8"}),Object(u.jsx)("stop",{offset:"1",stopColor:"#366994"})]}),Object(u.jsx)("linearGradient",{gradientUnits:"userSpaceOnUse",id:"c",x1:"55.549",x2:"110.149",xlinkHref:"#b",y1:"77.07",y2:"131.853"})]}),Object(u.jsxs)("g",{color:"#000",children:[Object(u.jsx)("path",{d:"M99.75 67.469c-28.032 0-26.281 12.156-26.281 12.156l.031 12.594h26.75V96H62.875s-17.938-2.034-17.938 26.25 15.657 27.281 15.657 27.281h9.343v-13.125s-.503-15.656 15.407-15.656h26.531s14.906.241 14.906-14.406V82.125s2.263-14.656-27.031-14.656zM85 75.938a4.808 4.808 0 014.813 4.812A4.808 4.808 0 0185 85.563a4.808 4.808 0 01-4.813-4.813A4.808 4.808 0 0185 75.937z",fill:"url(#c)",overflow:"visible",style:{marker:"none"},transform:"translate(-44.938 -67.469)"}),Object(u.jsx)("path",{d:"M100.546 177.315c28.032 0 26.281-12.156 26.281-12.156l-.03-12.594h-26.75v-3.781h37.374s17.938 2.034 17.938-26.25c0-28.285-15.657-27.282-15.657-27.282h-9.343v13.125s.503 15.657-15.407 15.657h-26.53s-14.907-.241-14.907 14.406v24.219s-2.263 14.656 27.031 14.656zm14.75-8.469a4.808 4.808 0 01-4.812-4.812 4.808 4.808 0 014.812-4.813 4.808 4.808 0 014.813 4.813 4.808 4.808 0 01-4.813 4.812z",fill:"url(#d)",overflow:"visible",style:{marker:"none"},transform:"translate(-44.938 -67.469)"})]})]}))}}),Object(i.a)(c,o.Java,{name:j.java,icon:function(e){return Object(u.jsxs)(l.a,Object(s.a)(Object(s.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 256 346",children:[Object(u.jsx)("path",{d:"M82.554 267.473s-13.198 7.675 9.393 10.272c27.369 3.122 41.356 2.675 71.517-3.034 0 0 7.93 4.972 19.003 9.279-67.611 28.977-153.019-1.679-99.913-16.517M74.292 229.659s-14.803 10.958 7.805 13.296c29.236 3.016 52.324 3.263 92.276-4.43 0 0 5.526 5.602 14.215 8.666-81.747 23.904-172.798 1.885-114.296-17.532",fill:"#5382A1"}),Object(u.jsx)("path",{d:"M143.942 165.515c16.66 19.18-4.377 36.44-4.377 36.44s42.301-21.837 22.874-49.183c-18.144-25.5-32.059-38.172 43.268-81.858 0 0-118.238 29.53-61.765 94.6",fill:"#E76F00"}),Object(u.jsx)("path",{d:"M233.364 295.442s9.767 8.047-10.757 14.273c-39.026 11.823-162.432 15.393-196.714.471-12.323-5.36 10.787-12.8 18.056-14.362 7.581-1.644 11.914-1.337 11.914-1.337-13.705-9.655-88.583 18.957-38.034 27.15 137.853 22.356 251.292-10.066 215.535-26.195M88.9 190.48s-62.771 14.91-22.228 20.323c17.118 2.292 51.243 1.774 83.03-.89 25.978-2.19 52.063-6.85 52.063-6.85s-9.16 3.923-15.787 8.448c-63.744 16.765-186.886 8.966-151.435-8.183 29.981-14.492 54.358-12.848 54.358-12.848M201.506 253.422c64.8-33.672 34.839-66.03 13.927-61.67-5.126 1.066-7.411 1.99-7.411 1.99s1.903-2.98 5.537-4.27c41.37-14.545 73.187 42.897-13.355 65.647 0 .001 1.003-.895 1.302-1.697",fill:"#5382A1"}),Object(u.jsx)("path",{d:"M162.439.371s35.887 35.9-34.037 91.101c-56.071 44.282-12.786 69.53-.023 98.377-32.73-29.53-56.75-55.526-40.635-79.72C111.395 74.612 176.918 57.393 162.439.37",fill:"#E76F00"}),Object(u.jsx)("path",{d:"M95.268 344.665c62.199 3.982 157.712-2.209 159.974-31.64 0 0-4.348 11.158-51.404 20.018-53.088 9.99-118.564 8.824-157.399 2.421.001 0 7.95 6.58 48.83 9.201",fill:"#5382A1"})]}))}}),Object(i.a)(c,o.Go,{name:j.golang,icon:function(e){return Object(u.jsx)(l.a,Object(s.a)(Object(s.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 512 192",children:Object(u.jsx)("path",{d:"M292.533 13.295l1.124.75c13.212 8.725 22.685 20.691 28.917 35.15 1.496 2.243.499 3.49-2.493 4.237l-5.063 1.296c-11.447 2.949-20.53 5.429-31.827 8.378l-6.443 1.678c-2.32.574-2.96.333-5.428-2.477l-.348-.399c-3.519-3.988-6.155-6.652-10.817-9.03l-.899-.443c-15.705-7.727-30.911-5.484-45.12 3.74-16.952 10.968-25.677 27.172-25.428 47.364.25 19.942 13.96 36.395 33.654 39.137 16.951 2.244 31.16-3.739 42.378-16.452 2.244-2.743 4.238-5.734 6.73-9.224h-48.11c-5.235 0-6.481-3.24-4.736-7.478l.864-2.035c3.204-7.454 8.173-18.168 11.4-24.294l.704-1.319c.862-1.494 2.612-3.513 5.977-3.513h80.224c3.603-11.415 9.449-22.201 17.246-32.407 18.198-23.931 40.135-36.396 69.8-41.63 25.427-4.488 49.359-1.995 71.046 12.713 19.694 13.461 31.909 31.66 35.15 55.59 4.237 33.654-5.485 61.075-28.668 84.508-16.453 16.702-36.645 27.172-59.829 31.908-6.73 1.247-13.461 1.496-19.942 2.244-22.685-.499-43.376-6.98-60.826-21.937-12.273-10.61-20.727-23.648-24.928-38.828a104.937 104.937 0 01-10.47 16.89c-17.949 23.683-41.381 38.39-71.046 42.38-24.43 3.24-47.115-1.497-67.058-16.454-18.447-13.96-28.917-32.407-31.66-55.34-3.24-27.173 4.737-51.603 21.19-73.041 17.7-23.184 41.132-37.891 69.8-43.126 22.999-4.16 45.037-1.595 64.936 11.464zM411.12 49.017l-.798.178c-23.183 5.235-38.14 19.942-43.624 43.375-4.488 19.444 4.985 39.138 22.934 47.115 13.71 5.983 27.421 5.235 40.633-1.496 19.694-10.22 30.413-26.175 31.66-47.613-.25-3.24-.25-5.734-.749-8.227-4.436-24.401-26.664-38.324-50.056-33.332zM116.416 94.564c.997 0 1.496.748 1.496 1.745l-.499 5.983c0 .997-.997 1.745-1.745 1.745l-54.344-.249c-.997 0-1.246-.748-.748-1.496l3.49-6.232c.499-.748 1.496-1.496 2.493-1.496h49.857zM121.9 71.63c.997 0 1.496.748 1.247 1.496l-1.995 5.983c-.249.997-1.246 1.495-2.243 1.495l-117.912.25c-.997 0-1.246-.499-.748-1.247l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247H121.9zm12.963-22.934c.997 0 1.246.748.748 1.496l-4.238 6.481c-.499.748-1.745 1.496-2.493 1.496l-90.24-.25c-.998 0-1.247-.498-.749-1.246l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247h88.995z",fill:"#00ACD7"})}))}}),Object(i.a)(c,o.DotNet,{name:j.dotnet,icon:function(e){return Object(u.jsx)(l.a,Object(s.a)(Object(s.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 32 32",children:Object(u.jsx)("path",{d:"M4.224 10.089v11.667h1.365v-8.438a12.58 12.58 0 00-.068-1.599h.052c.099.255.224.5.37.729l6 9.302h1.672V10.089h-1.359v8.203c-.016.573.016 1.146.083 1.714h-.031a13.986 13.986 0 00-.474-.781L5.995 10.09zm12.417 0v11.667h6.203l.005-1.281h-4.813v-4.047h4.214v-1.229h-4.214v-3.875h4.521V10.09zm7.25 0v1.234h3.354v10.432h1.365V11.323h3.391v-1.234zm-23.021 10a.86.86 0 00-.609.276.91.91 0 00-.26.641.901.901 0 001.542.641c.172-.167.271-.401.271-.641s-.099-.474-.271-.641a.876.876 0 00-.641-.276H.871z",fill:"#626262"})}))}}),c)},110:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var a=new Set(["aws-cdk","aws","awscdk","cdk-construct","cdk","cdktf","cdk8s","construct","constructs"].map((function(e){return e.toLocaleLowerCase()})))},111:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(0),r=function(e,t){var n=t.limit,a=t.offset*n,r=a+n;return e.slice(a,r)},c=n(99),o=function(e){var t=e.cdkMajor,n=e.cdkType,o=e.keywords,i=e.limit,s=e.offset,l=void 0===s?0:s,u=e.query,d=void 0===u?"":u,b=e.language,j=void 0===b?null:b,O=e.languages,f=e.sort,h=e.tags,v=Object(a.useMemo)((function(){return{cdkMajor:t,cdkType:n,keywords:o,language:null!==j&&void 0!==j?j:void 0,languages:O,tags:h}}),[t,n,o,j,O,h]),m=Object(c.a)({filters:v,query:d,sort:f}),p=function(e,t){var n=null!==t&&void 0!==t?t:{},c=n.limit,o=void 0===c?25:c,i=n.offset,s=void 0===i?0:i,l=e?Math.floor(e.length/o):0;return Object(a.useMemo)((function(){return{page:r(e,{limit:o,offset:s>l?l:s}),pageLimit:l}}),[e,o,s,l])}(m,{offset:l,limit:i}),g=p.page,x=p.pageLimit;return Object(a.useMemo)((function(){return{results:m,page:g,pageLimit:x}}),[g,x,m])}},112:function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var a,r=n(10),c=n(6),o=n(21),i=n(3),s=n(130),l=n(124),u=n(43),d=n(68),b=n(35),j=n(2),O=["name","majorVersion"],f=["name","majorVersion"],h=["name","majorVersion"],v=(Object(i.e)((function(e,t){var n=e.name,a=(e.majorVersion,Object(o.a)(e,O));return n?Object(j.jsx)(s.a,Object(c.a)({alt:"".concat(u.b[n].name," Logo"),h:5,ref:t,src:u.b[n].imgsrc,w:5},a)):null})),Object(i.e)((function(e,t){var n=e.name,a=e.majorVersion,r=Object(o.a)(e,f);return n?Object(j.jsxs)(l.q,Object(c.a)(Object(c.a)({ref:t},r),{},{children:[u.b[n].name,void 0!==a?" v".concat(a):""]})):null}))),m=(a={},Object(r.a)(a,u.c.awscdk,"#CF4A02"),Object(r.a)(a,u.c.cdk8s,"#005797"),Object(r.a)(a,u.c.cdktf,"#5C4EE5"),a),p=Object(i.e)((function(e,t){var n=e.name,a=e.majorVersion,r=Object(o.a)(e,h);if(!n)return null;var i=m[n];return Object(j.jsx)(l.a,Object(c.a)(Object(c.a)({alignItems:"center",as:b.a,bg:i,borderRadius:"md",color:"white",display:"flex",h:"1.5rem",maxW:"5.5rem",px:1.5,ref:t,textTransform:"none",to:Object(d.c)({cdkType:n,cdkMajor:a})},r),{},{children:Object(j.jsx)(v,{majorVersion:a,name:n})}))}))},132:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return l}));var a=n(26),r=n.n(a),c=n(44),o=n(15),i={sections:[{name:"Recently updated",showLastUpdated:10}]},s={featureFlags:{},packageLinks:[],featuredPackages:i},l=function(){var e=Object(c.a)(r.a.mark((function e(){var t;return r.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!window.configOverride){e.next=2;break}return e.abrupt("return",window.configOverride);case 2:return e.next=4,fetch(o.a.CONFIG);case 4:if((t=e.sent).ok){e.next=9;break}return console.error(t.statusText),console.warn("Failed to fetch application config, using default values"),e.abrupt("return",s);case 9:return e.abrupt("return",t.json().catch((function(e){return console.error(e),console.warn("Invalid config response, using default values"),s})));case 10:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}()},134:function(e,t,n){"use strict";n.d(t,"b",(function(){return j})),n.d(t,"a",(function(){return O}));var a=n(0),r=n(39),c=n(26),o=n.n(c),i=n(44),s=n(15),l={packages:{},updated:"NOT_FOUND"},u=function(){var e=Object(i.a)(o.a.mark((function e(){var t;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(s.a.ALL_VERSIONS);case 2:if((t=e.sent).ok){e.next=7;break}return console.error(t.statusText),console.warn("Could not retrieve package versions. Using empty data."),e.abrupt("return",l);case 7:return e.abrupt("return",t.json().catch((function(e){return console.error(e),console.warn("Error in package versions response. Using empty data."),l})));case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),d=n(2),b=Object(a.createContext)(void 0),j=function(){return Object(a.useContext)(b)},O=function(e){var t=e.children,n=Object(r.useQuery)("Versions",u);return Object(d.jsx)(b.Provider,{value:n,children:t})}},137:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(6),r=n(3),c=n(124),o=n(2),i=Object(r.e)((function(e,t){return Object(o.jsx)(c.b,Object(a.a)({bg:"white",border:"base",borderRadius:"card",boxShadow:"base",p:2,ref:t},e))}));i.displayName="Card"},138:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(6),r=n(3),c=n(2),o=Object(r.e)((function(e,t){return Object(c.jsx)(r.d.form,Object(a.a)(Object(a.a)({},e),{},{ref:t}))}));o.displayName="Form"},139:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var a=n(18),r=n(0),c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Object(r.useState)(e),c=Object(a.a)(n,2),o=c[0],i=c[1],s=t.delay,l=void 0===s?250:s,u=t.onChange;return Object(r.useEffect)((function(){var t=setTimeout((function(){i(e),null===u||void 0===u||u(e)}),l);return function(){clearTimeout(t)}}),[e,l,u]),o}},140:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var a=n(6),r=n(21),c=n(3),o=n(124),i=n(2),s=["name","onClick"],l=Object(c.e)((function(e,t){var n=e.name,c=e.onClick,l=Object(r.a)(e,s);return Object(i.jsx)(o.m,Object(a.a)(Object(a.a)({_hover:{cursor:"pointer"},alignItems:"center",display:"flex",fontSize:"md",lineHeight:"base",listStyleType:"none",minH:8,onClick:c,onKeyDown:function(e){["Enter"," "].includes(e.key)&&(e.preventDefault(),c())},px:4,ref:t,role:"option",sx:{":hover, :focus":{bg:"gray.100"}},tabIndex:0},l),{},{children:n}))}));l.displayName="SearchItem"},15:function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"b",(function(){return r})),n.d(t,"c",(function(){return c}));var a={PACKAGES_PREFIX:"/data",CATALOG_SUFFIX:"/catalog.json",ASSEMBLY_SUFFIX:"/assembly.json",METADATA_SUFFIX:"/metadata.json",CONFIG:"/config.json",STATS:"/stats.json",ALL_VERSIONS:"/all-versions.json"},r={CDK_TYPE:"cdk",KEYWORDS:"keywords",LANGUAGE:"lang",LANGUAGES:"langs",OFFSET:"offset",SEARCH_QUERY:"q",SORT:"sort",SUBMODULE:"submodule",CDK_MAJOR:"cdkver",TAGS:"tags"},c={CONTRIBUTE:"/contribute",FAQ:"/faq",HOME:"/",PACKAGES:"/packages",SEARCH:"/search",SITE_TERMS:"/terms"}},185:function(e,t,n){},19:function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return c}));var a=n(6),r=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.join(" | ")},c=function(e){return{event:Object(a.a)(Object(a.a)({},e),{},{type:"click"})}}},193:function(e,t,n){"use strict";n.r(t);var a={};n.r(a),n.d(a,"initialize",(function(){return x})),n.d(a,"access",(function(){return k})),n.d(a,"checkForCookieConsent",(function(){return w})),n.d(a,"customizeCookies",(function(){return C})),n.d(a,"getConsentCookie",(function(){return S})),n.d(a,"hasConsent",(function(){return E}));var r,c,o=n(0),i=n.n(o),s=n(65),l=n.n(s),u=n(39),d=n(28),b=(n(185),n(124)),j=n(22),O=n(18),f=n(126),h=n(21),v=n(26),m=n.n(v),p=n(44),g=function(){new URLSearchParams(window.location.search).get("sb")},x=function(){var e=Object(p.a)(m.a.mark((function e(){var t,a,c;return m.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={domain:window.location.hostname,language:navigator.language,__storeWriter:g()},e.next=3,n.e(15).then(n.t.bind(null,595,7));case 3:a=e.sent,c=a.AWSCShortbread,r=c(t);case 6:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),y=function(e){return function(){var t;if(!r)throw new Error("shortbread has not been initialized");return(t=r)[e].apply(t,arguments)}},k=y("access"),w=y("checkForCookieConsent"),C=y("customizeCookies"),S=y("getConsentCookie"),E=y("hasConsent"),T=n(2),A=x,M=Object(h.a)(a,["initialize"]),N=Object(o.createContext)({}),I=function(e){var t=e.children,n=Object(o.useState)(!1),a=Object(O.a)(n,2),r=a[0],c=a[1];return Object(o.useEffect)((function(){var e=!1;return A().then((function(){e||(M.checkForCookieConsent(),c(!0))})).catch((function(t){console.error(t),e||c(!1)})),function(){e=!0,c(!1)}}),[]),Object(T.jsx)(N.Provider,{value:r?M:{},children:t})},L=n(57),D=n(35),R=n(15),z={SERVICE_TERMS:{display:"AWS Service Terms",url:"https://aws.amazon.com/service-terms/",testId:"service-terms"},PRIVACY:{display:"Privacy",url:"https://aws.amazon.com/privacy/",testId:"privacy"},SITE_TERMS:{display:"Construct Hub Site Terms",url:R.c.SITE_TERMS,testId:"site-terms",isExternal:!1},LEGAL:{display:"Legal",url:"https://aws.amazon.com/legal/",testId:"legal"}},P=n(32),F=n(58),_=Object(F.a)("footer",["container","links","disclaimer","manageCookies"].concat(Object(P.a)(Object.values(z).map((function(e){return e.testId}))))),G=function(){var e=Object(o.useContext)(N).customizeCookies;return Object(T.jsxs)(b.f,{align:"center",as:"footer",bg:"blue.800",color:"white","data-testid":_.container,direction:"column",justify:"center",py:4,children:[Object(T.jsx)(b.o,{columnGap:6,columns:[1,2,4],"data-testid":_.links,children:Object.entries(z).map((function(e,t){var n=Object(O.a)(e,2),a=n[0],r=n[1],c=r.display,o=r.isExternal,i=void 0===o||o,s=r.testId,l=r.url;return Object(T.jsxs)(b.f,{align:"center",direction:{base:"column",md:"row"},children:[Object(T.jsx)(b.b,{display:{base:"none",md:0!==t?"initial":"none"},h:5,children:Object(T.jsx)(b.e,{borderColor:"white",mr:6,orientation:"vertical"})}),i?Object(T.jsx)(L.a,{color:"currentcolor","data-testid":_[s],hasWarning:!1,href:l,lineHeight:10,mx:"auto",children:c}):Object(T.jsx)(D.a,{color:"currentcolor","data-testid":_[s],lineHeight:10,mx:"auto",to:l,children:c}),Object(T.jsx)(b.b,{display:{base:"none",sm:t<2?"initial":"none",md:"none"},w:"100%",children:Object(T.jsx)(b.e,{borderColor:"white"})})]},a)}))}),Object(T.jsx)(b.q,{"data-testid":_.disclaimer,fontSize:"xs",mt:4,children:"2021 Amazon Web Services, Inc. All rights reserved."}),Object(T.jsx)(f.a,{color:"white","data-testid":_.manageCookies,fontSize:"xs",fontWeight:"normal",mt:4,onClick:e,variant:"link",children:"Manage Cookies"})]})},U=n(6),H=n(34),W=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return H.c.apply(void 0,["Header"].concat(t))},B=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return W.apply(void 0,["Search Modal"].concat(t))},V=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return W.apply(void 0,["Documentation"].concat(t))},K=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return W.apply(void 0,["Getting Started"].concat(t))},q={CONTRIBUTE_LINK:W("Contribute"),DOCUMENTATION:V(),DOCUMENTATION_DROPDOWN:{MENU:V("Menu"),LINK:V("Link")},GETTING_STARTED:K(),GETTING_STARTED_DROPDOWN:{MENU:K("Menu"),LINK:K("Link")},LOGO:W("Logo"),MOBILE_NAV:{OPEN:W("Mobile Nav","Open"),CLOSE:W("Mobile Nav","Close")},SEARCH:W("Search"),SEARCH_MODAL:{CLOSE:B("Close"),OPEN:B("Open"),SEARCH:B("Search")}},Q=n(64),J=n(128),Y=["children"],X=function(e){var t=e.children,n=Object(h.a)(e,Y);return Object(T.jsx)(J.a,Object(U.a)(Object(U.a)({colorScheme:"blue.800",strategy:"fixed"},n),{},{children:t}))},Z=n(3),$=n(19),ee=["data-event","items"],te=function(e){var t=e.display,n=e.isNavLink,a=e.url;return n?Object(T.jsx)(D.a,{color:"blue.500",to:a,w:"100%",children:t}):Object(T.jsx)(L.a,{alignItems:"center",display:"flex",hasWarning:!1,href:a,justifyContent:"space-between",w:"100%",children:t})},ne=Object(Z.e)((function(e,t){var n=e["data-event"],a=e.items,r=Object(h.a)(e,ee);return Object(T.jsx)(J.f,Object(U.a)(Object(U.a)({},r),{},{ref:t,children:a.map((function(e,t){return"links"in e?Object(T.jsxs)(o.Fragment,{children:[Object(T.jsx)(J.d,{align:"left",title:e.display,children:e.links.map((function(e,t){return Object(T.jsx)(J.e,{"data-event":n?Object($.b)(n,e.display):void 0,children:Object(T.jsx)(te,Object(U.a)({},e))},"".concat(e.display,"-").concat(t))}))}),t!==a.length-1&&Object(T.jsx)(J.c,{})]},"".concat(e.display,"-").concat(t)):Object(T.jsx)(J.e,{"data-event":n?Object($.b)(n,e.display):void 0,children:Object(T.jsx)(te,Object(U.a)({},e))},"".concat(e.display,"-").concat(t))}))}))})),ae=n(31),re=["children"],ce=Object(Z.e)((function(e,t){var n=e.children,a=Object(h.a)(e,re);return Object(T.jsx)(J.b,Object(U.a)(Object(U.a)({as:f.a,color:"blue.800",fontWeight:"500",ref:t,rightIcon:Object(T.jsx)(ae.c,{h:6,w:6}),size:"md",variant:"link"},a),{},{children:n}))})),oe=Object(F.a)("header",["container","title","gettingStartedTrigger","gettingStartedMenu","documentationTrigger","documentationMenu","navOpen","navClose","searchInput","searchIcon","mobileNav"]),ie=function(){return Object(T.jsxs)(X,{children:[Object(T.jsx)(ce,{"data-event":q.DOCUMENTATION_DROPDOWN.MENU,"data-testid":oe.documentationTrigger,children:"Documentation"}),Object(T.jsx)(ne,{"data-event":q.DOCUMENTATION_DROPDOWN.LINK,"data-testid":oe.documentationMenu,items:Q.b})]})},se=function(){return Object(T.jsxs)(X,{children:[Object(T.jsx)(ce,{"data-event":q.GETTING_STARTED_DROPDOWN.MENU,"data-testid":oe.gettingStartedTrigger,children:"Getting Started"}),Object(T.jsx)(ne,{"data-event":q.GETTING_STARTED_DROPDOWN.LINK,"data-testid":oe.gettingStartedMenu,items:Q.c})]})},le=n(11),ue=n(69),de=n(61),be=n(133),je=n(96),Oe=Object(F.a)("searchModal",["container"]),fe=function(e){var t=e.isOpen,n=e.onClose,a=Object(H.d)().trackCustomEvent,r=Object(je.a)(),c=r.query,o=r.onQueryChange,i=r.onSubmit,s=r.onSearch;return Object(T.jsx)(de.a,{children:Object(T.jsx)(be.g,{isOpen:t,onClose:n,children:Object(T.jsx)(be.m,{children:Object(T.jsxs)(be.j,{"data-testid":Oe.container,mx:4,children:[Object(T.jsx)(be.i,{"data-event":q.SEARCH_MODAL.CLOSE,onClick:function(){a(Object($.a)({name:q.SEARCH_MODAL.CLOSE}))}}),Object(T.jsx)(be.l,{children:"Search"}),Object(T.jsx)(be.h,{children:Object(T.jsxs)(b.p,{pb:4,spacing:4,children:[Object(T.jsx)(ue.a,{"data-event":q.SEARCH_MODAL.SEARCH,onChange:o,onSubmit:function(e){n(),i(e)},value:c}),Object(T.jsx)(f.a,{colorScheme:"blue",onClick:function(){return s()},children:"Find Constructs"})]})})]})})})})},he=function(){var e=Object(le.g)();return Object(T.jsxs)(j.d,{children:[Object(T.jsx)(j.b,{exact:!0,path:[R.c.HOME,R.c.SEARCH]}),Object(T.jsxs)(j.b,{path:"*",children:[Object(T.jsx)(b.b,{"data-testid":oe.searchInput,display:{base:"none",lg:"initial"},children:Object(T.jsxs)(ue.a,{bg:"gray.50","data-event":q.SEARCH,children:[Object(T.jsx)(ue.b,{}),Object(T.jsx)(ue.c,{})]})}),Object(T.jsxs)(b.b,{display:{base:"initial",lg:"none"},children:[Object(T.jsx)(f.b,{"aria-label":"Search Icon",borderRadius:"md","data-event":q.SEARCH_MODAL.OPEN,"data-testid":oe.searchIcon,icon:Object(T.jsx)(ae.m,{color:"gray.600"}),onClick:e.onOpen,variant:"ghost"}),Object(T.jsx)(fe,Object(U.a)({},e))]})]})]})},ve=n(131),me={color:"blue.500",py:2,w:"full"},pe=function(e){var t=e["data-event"],n=e.display,a=e.isNavLink,r=e.url,c=t?Object($.b)(t,"Link",n):void 0;return a?Object(T.jsx)(D.a,Object(U.a)(Object(U.a)({"data-event":c,to:r},me),{},{children:n})):Object(T.jsx)(L.a,Object(U.a)(Object(U.a)({alignItems:"center","data-event":c,display:"flex",hasWarning:!1,href:r,justifyContent:"space-between"},me),{},{children:n}))},ge=function(e){var t=e.title,n=e.items,a=e.testId,r=e.dataEvent,c=Object(H.d)().trackCustomEvent;return Object(T.jsxs)(ve.d,{"data-testid":a,w:"full",children:[Object(T.jsxs)(ve.b,{onClick:function(){r&&c(Object($.a)({name:Object($.b)(r,"Menu")}))},px:0,py:4,children:[Object(T.jsx)(b.b,{flex:"1",textAlign:"left",children:Object(T.jsx)(b.i,{as:"h3",color:"blue.800",size:"sm",children:t})}),Object(T.jsx)(ve.c,{})]}),Object(T.jsx)(ve.e,{p:0,w:"full",children:Object(T.jsx)(b.f,{direction:"column",w:"full",children:n.map((function(e,t){return"links"in e?Object(T.jsxs)(o.Fragment,{children:[Object(T.jsx)(b.i,{as:"h4",borderBottom:"base",pb:2,pt:4,size:"xs",children:e.display}),e.links.map((function(e,t){return Object(o.createElement)(pe,Object(U.a)(Object(U.a)({"data-event":r},e),{},{key:"".concat(e.display,"-").concat(t)}))}))]},"".concat(e.display,"-").concat(t)):Object(o.createElement)(pe,Object(U.a)(Object(U.a)({"data-event":r},e),{},{key:"".concat(e.display,"-").concat(t)}))}))})})]})},xe=function(e){var t=e.sections;return Object(T.jsx)(ve.a,{allowMultiple:!0,allowToggle:!0,w:"full",children:t.map((function(e,t){return Object(T.jsx)(ge,Object(U.a)({},e),"section-".concat(t))}))})},ye=function(){return Object(T.jsx)(b.i,{as:"h1",color:"blue.800","data-testid":oe.title,size:"lg",children:Object(T.jsxs)(d.b,{"data-event":q.LOGO,to:"/",children:[Object(T.jsx)(b.b,{as:"span",color:"blue.500","data-event":q.LOGO,children:"Construct"})," ","Hub"]})})},ke=function(e){var t=e.isOpen,n=e.onClose;return Object(T.jsx)(de.a,{children:Object(T.jsxs)(be.a,{isOpen:t,onClose:n,placement:"left",size:"xs",children:[Object(T.jsx)(be.f,{}),Object(T.jsxs)(be.d,{"data-testid":oe.mobileNav,children:[Object(T.jsx)(be.c,{}),Object(T.jsx)(be.e,{display:"flex",justifyContent:"start",children:Object(T.jsx)(ye,{})}),Object(T.jsx)(be.b,{children:Object(T.jsxs)(b.p,{align:"start",justify:"start",spacing:0,children:[Object(T.jsx)(xe,{sections:[{dataEvent:q.GETTING_STARTED,title:"Getting Started",items:Q.c,testId:oe.gettingStartedMenu},{dataEvent:q.DOCUMENTATION,title:"Documentation",items:Q.b,testId:oe.documentationMenu}]}),Object(T.jsx)(D.a,{_hover:{bg:"blackAlpha.50"},borderBottom:"1px solid",borderBottomColor:"gray.200",color:"blue.800",fontSize:"1rem",fontWeight:"bold",h:"3.25rem",lineHeight:"3.25rem",to:R.c.CONTRIBUTE,w:"full",children:"Contribute"})]})})]})]})})},we=function(){var e=Object(H.d)().trackCustomEvent,t=Object(le.g)({onOpen:function(){return e(Object($.a)({name:q.MOBILE_NAV.OPEN}))},onClose:function(){return e(Object($.a)({name:q.MOBILE_NAV.CLOSE}))}});return Object(T.jsxs)(T.Fragment,{children:[Object(T.jsx)(f.b,{"aria-label":"Navigation Menu",borderRadius:"md","data-testid":oe.navOpen,display:{lg:"none"},icon:Object(T.jsx)(ae.k,{}),onClick:t.onOpen,variant:"ghost"}),Object(T.jsx)(ke,Object(U.a)({},t))]})},Ce=function(e){return Object(T.jsx)(b.h,Object(U.a)({align:"center",justify:"center",rowStart:1},e))},Se=function(){return Object(T.jsxs)(b.g,{alignItems:"center",as:"header",bg:"white",boxShadow:"base","data-testid":oe.container,gap:6,gridTemplateColumns:{base:"1fr max-content 1fr",lg:"max-content minmax(12rem, 31rem) auto"},gridTemplateRows:"1fr",maxW:"100vw",position:"sticky",px:4,py:4,top:0,w:"100%",zIndex:"sticky",children:[Object(T.jsx)(Ce,{colStart:{base:2,lg:1},justifySelf:{base:"center",lg:"start"},children:Object(T.jsx)(ye,{})}),Object(T.jsx)(Ce,{colStart:{base:3,lg:2},justifySelf:{base:"end",lg:"stretch"},children:Object(T.jsx)(he,{})}),Object(T.jsxs)(Ce,{colStart:{base:1,lg:3},justifySelf:{base:"start",lg:"end"},children:[Object(T.jsxs)(b.g,{display:{base:"none",lg:"grid"},gap:4,gridTemplateRows:"1fr",placeItems:"center",templateColumns:"1fr 1fr auto",w:"100%",children:[Object(T.jsx)(b.b,{children:Object(T.jsx)(se,{})}),Object(T.jsx)(b.b,{children:Object(T.jsx)(ie,{})}),Object(T.jsx)(D.a,{color:"blue.800","data-event":q.CONTRIBUTE_LINK,fontWeight:"500",to:R.c.CONTRIBUTE,children:"Contribute"})]}),Object(T.jsx)(we,{})]})]})},Ee=n(70),Te=["component"],Ae=function(e){var t=e.component,n=Object(h.a)(e,Te);return Object(T.jsx)(j.b,Object(U.a)(Object(U.a)({},n),{},{children:Object(T.jsx)(o.Suspense,{fallback:Object(T.jsx)(Ee.a,{}),children:Object(T.jsx)(t,{})})}))},Me=Object(o.lazy)((function(){return Promise.all([n.e(0),n.e(11)]).then(n.bind(null,601))})),Ne=Object(o.lazy)((function(){return Promise.all([n.e(0),n.e(12)]).then(n.bind(null,602))})),Ie=Object(o.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(10),n.e(6)]).then(n.bind(null,600))})),Le=Object(o.lazy)((function(){return Promise.all([n.e(0),n.e(13)]).then(n.bind(null,265))})),De=Object(o.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(4),n.e(7)]).then(n.bind(null,597))})),Re=Object(o.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(9),n.e(8)]).then(n.bind(null,598))})),ze=Object(o.lazy)((function(){return Promise.all([n.e(0),n.e(14)]).then(n.bind(null,603))})),Pe=function(){return Object(T.jsxs)(b.g,{as:"main",bg:"bgPrimary",gridTemplateColumns:"1fr",gridTemplateRows:"auto 1fr auto",h:"100%",maxW:"100%",minH:"100vh",children:[Object(T.jsx)(Se,{}),Object(T.jsxs)(j.d,{children:[Object(T.jsx)(Ae,{component:Me,exact:!0,path:R.c.CONTRIBUTE}),Object(T.jsx)(Ae,{component:Ne,exact:!0,path:R.c.FAQ}),Object(T.jsx)(Ae,{component:Ie,exact:!0,path:R.c.HOME}),Object(T.jsx)(Ae,{component:ze,exact:!0,path:R.c.SITE_TERMS}),Object(T.jsx)(Ae,{component:De,path:R.c.PACKAGES}),Object(T.jsx)(Ae,{component:Re,exact:!0,path:R.c.SEARCH}),Object(T.jsx)(Ae,{component:Le,path:"*"})]}),Object(T.jsx)(G,{})]})},Fe=n(87),_e=n(89),Ge=n(98),Ue=n(86),He=n(88),We=n(13),Be=n(75),Ve=n(17),Ke=n(4),qe=function(e){var t=e.colorScheme;return{w:"100%",transitionProperty:"box-shadow",transitionDuration:"normal",border:"2px solid",borderRadius:"sm",borderColor:"inherit",color:"white",_checked:{bg:Object(Ke.h)("".concat(t,".500"),"".concat(t,".200"))(e),borderColor:Object(Ke.h)("".concat(t,".500"),"".concat(t,".200"))(e),color:Object(Ke.h)("white","gray.900")(e),_hover:{bg:Object(Ke.h)("".concat(t,".600"),"".concat(t,".300"))(e),borderColor:Object(Ke.h)("".concat(t,".600"),"".concat(t,".300"))(e)},_disabled:{borderColor:Object(Ke.h)("gray.200","transparent")(e),bg:Object(Ke.h)("gray.200","whiteAlpha.300")(e),color:Object(Ke.h)("gray.500","whiteAlpha.500")(e)}},_indeterminate:{bg:Object(Ke.h)("".concat(t,".500"),"".concat(t,".200"))(e),borderColor:Object(Ke.h)("".concat(t,".500"),"".concat(t,".200"))(e),color:Object(Ke.h)("white","gray.900")(e)},_disabled:{bg:Object(Ke.h)("gray.100","whiteAlpha.100")(e),borderColor:Object(Ke.h)("gray.100","transparent")(e)},_focus:{boxShadow:"outline"},_invalid:{borderColor:Object(Ke.h)("red.500","red.300")(e)}}},Qe={userSelect:"none",_disabled:{opacity:.4}},Je={transitionProperty:"transform",transitionDuration:"normal"},Ye={parts:Ve.e.keys,baseStyle:function(e){return{icon:Je,control:qe(e),label:Qe}},sizes:{sm:{control:{h:3,w:3},label:{fontSize:"sm"},icon:{fontSize:"0.45rem"}},base:{control:{h:3.5,w:3.5},label:{fontSize:"sm"},icon:{fontSize:"0.5rem"}},md:{control:{w:4,h:4},label:{fontSize:"md"},icon:{fontSize:"0.625rem"}},lg:{control:{w:5,h:5},label:{fontSize:"lg"},icon:{fontSize:"0.625rem"}}},defaultProps:{size:"base",colorScheme:"blue"}},Xe=Be.b.components.Code,Ze=Object(U.a)(Object(U.a)({},Xe),{},{variants:Object(U.a)(Object(U.a)({},Xe.variants),{},{"code-block":Object(U.a)(Object(U.a)({},Xe.variants.subtle),{},{display:"block",whiteSpace:"pre"})})}),$e={defaultProps:{borderColor:"rgba(0, 124, 253, 0.15)"}},et=function(e){var t=Ye.baseStyle(e).control,n=void 0===t?{}:t;return Object(U.a)(Object(U.a)({},n),{},{borderRadius:"full",pos:"relative",_checked:Object(U.a)(Object(U.a)({},n._checked),{},{_before:{content:'""',display:"inline-block",pos:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",w:"50%",h:"50%",borderRadius:"50%",bg:"currentColor"}})})},tt={parts:Ve.q.keys,baseStyle:function(e){return{label:Ye.baseStyle(e).label,control:et(e)}},sizes:{sm:{control:{h:3,w:3},label:{fontSize:"sm"}},base:{control:{h:3.5,w:3.5},label:{fontSize:"sm"}},md:{control:{h:4,w:4},label:{fontSize:"md"}},lg:{control:{h:5,w:5},label:{fontSize:"lg"}}},defaultProps:{size:"base",colorScheme:"blue"}},nt=n(10),at=Be.b.components.Tabs,rt=Object(U.a)(Object(U.a)({},at.variants),{},{line:function(e){var t,n,a=e.colorScheme,r=e.orientation,c="vertical"===r?"borderStart":"borderBottom",o="vertical"===r?"marginStart":"marginBottom";return{tablist:(t={},Object(nt.a)(t,c,"none"),Object(nt.a)(t,"borderColor","inherit"),t),tab:(n={},Object(nt.a)(n,c,"4px solid"),Object(nt.a)(n,"borderColor","transparent"),Object(nt.a)(n,o,"0"),Object(nt.a)(n,"_selected",{color:Object(Ke.h)("".concat(a,".500"),"".concat(a,".300"))(e),borderColor:"currentColor",fontWeight:"semibold"}),Object(nt.a)(n,"_active",{bg:Object(Ke.h)("gray.200","whiteAlpha.300")(e)}),Object(nt.a)(n,"_disabled",{opacity:.4,cursor:"not-allowed"}),n)}}}),ct=Object(U.a)(Object(U.a)({},at),{},{variants:rt}),ot=function(e,t){return function(n){var a="function"===typeof e?e(n):e;return Object(U.a)(Object(U.a)({},a),{},{container:Object(U.a)(Object(U.a)({},a.container),t)})}},it=Be.b.components.Tag,st=function(e){var t=e.reduce((function(e,t){var n=t.keyword;return(null===n||void 0===n?void 0:n.color)?Object(U.a)(Object(U.a)({},e),{},Object(nt.a)({},n.color,ot(it.variants.subtle,{background:Object(Ke.k)(n.color,.1),color:n.color}))):e}),{});return Object(U.a)(Object(U.a)({},it),{},{baseStyle:{container:{fontWeight:"normal"}},variants:Object(U.a)(Object(U.a)({},it.variants),{},{subtle:ot(it.variants.subtle,{background:"#F2F2F2",color:"blue.800"})},t)})},lt=function(e){return Object(U.a)(Object(U.a)({},Be.b.components),{},{Checkbox:Ye,Code:Ze,Divider:$e,Radio:tt,Tag:st(e.Tag),Tabs:ct})},ut={borders:{base:"1px solid rgba(0, 124, 253, 0.15)"},colors:Object(U.a)(Object(U.a)({},Be.b.colors),{},{blue:{50:"#dcf3ff",100:"#aed9ff",200:"#7dbeff",300:"#4aa4ff",400:"#1a8aff",500:"#0070e6",600:"#0057b4",700:"#003e82",800:"#002551",900:"#000d21"},bgPrimary:"#F8F8F8"}),radii:{card:"0.75rem"},sizes:{container:{"2xl":"120rem"}},shadows:{base:"0px 4px 15px rgba(40, 132, 178, 0.15)"}},dt=function(e){var t,n={Tag:null!==(t=e.packageTags)&&void 0!==t?t:[]};return Object(We.b)(Object(U.a)(Object(U.a)({},ut),{},{components:lt(n),config:{initialColorMode:"light",useSystemColorMode:!1}}))},bt=function(e){var t=e.children,n=Object(_e.b)(),a=n.isLoading,r=n.data;return a?Object(T.jsx)(Ee.a,{}):Object(T.jsx)(We.a,{resetCSS:!0,theme:dt(r),children:t})},jt=n(134),Ot=(Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)),new u.QueryClient);l.a.render(Object(T.jsx)(i.a.StrictMode,{children:Object(T.jsx)(u.QueryClientProvider,{client:Ot,children:Object(T.jsx)(d.a,{children:Object(T.jsx)(I,{children:Object(T.jsx)(H.a,{children:Object(T.jsx)(_e.a,{children:Object(T.jsx)(Fe.a,{children:Object(T.jsx)(He.a,{children:Object(T.jsx)(jt.a,{children:Object(T.jsx)(Ue.a,{children:Object(T.jsx)(bt,{children:Object(T.jsx)(Ge.a,{children:Object(T.jsx)(Pe,{})})})})})})})})})})})})}),document.getElementById("root")),c&&c instanceof Function&&n.e(16).then(n.bind(null,596)).then((function(e){var t=e.getCLS,n=e.getFID,a=e.getFCP,r=e.getLCP,o=e.getTTFB;t(c),n(c),a(c),r(c),o(c)}),(function(){})),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()})).catch((function(e){console.error(e.message)}))},34:function(e,t,n){"use strict";n.d(t,"d",(function(){return l})),n.d(t,"a",(function(){return u})),n.d(t,"e",(function(){return b})),n.d(t,"c",(function(){return c.b})),n.d(t,"b",(function(){return c.a}));var a=n(0),r=n(22),c=n(19),o=n(2),i=Object(a.createContext)({trackCustomEvent:function(){},trackPageView:function(){}}),s=function(e,t){var n,a,r;null===(n=window)||void 0===n||null===(a=n.AWSMA)||void 0===a||null===(r=a.ready)||void 0===r||r.call(a,(function(){document.dispatchEvent(new CustomEvent(window.AWSMA.TRIGGER_EVENT,{detail:e})),null===t||void 0===t||t()}))},l=function(){return Object(a.useContext)(i)},u=function(e){var t=e.children,n=Object(r.h)().pathname,l=Object(a.useRef)(null),u=Object(a.useCallback)((function(e){l.current!==n&&s(e,(function(){l.current=n}))}),[n]);return Object(a.useEffect)((function(){var e=function(e){if(e.target){for(var t=null,n=e.target;n&&!t;){var a,r;(null===(a=(r=n).hasAttribute)||void 0===a?void 0:a.call(r,"data-event"))?t=n.getAttribute("data-event"):n=n.parentElement?n.parentElement:null}t&&s(Object(c.a)({name:t}))}};return window.addEventListener("click",e),function(){return window.removeEventListener("click",e)}}),[]),Object(o.jsx)(i.Provider,{value:{trackPageView:u,trackCustomEvent:s},children:t})},d=n(6),b=function(e){var t=l().trackPageView,n=Object(r.h)().pathname,c=Object(a.useMemo)((function(){return{page:Object(d.a)({pageURL:window.location.href.replace("://localhost:3000","://constructs.local.dev")},e.page),event:{type:"pageview",name:e.event.name,description:e.event.description}}}),[n,e]);return Object(a.useCallback)((function(){return t(c)}),[t,c])}},35:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(6),r=n(124),c=n(28),o=n(2),i=function(e){return Object(o.jsx)(r.j,Object(a.a)({as:c.b},e))}},43:function(e,t,n){"use strict";n.d(t,"c",(function(){return c})),n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return s}));var a,r,c,o=n(10);!function(e){e.awscdk="aws-cdk",e.cdktf="cdktf",e.cdk8s="cdk8s"}(c||(c={}));var i=(a={},Object(o.a)(a,c.awscdk,"AWS CDK"),Object(o.a)(a,c.cdktf,"CDKtf"),Object(o.a)(a,c.cdk8s,"CDK8s"),a),s=(r={},Object(o.a)(r,c.awscdk,{name:i[c.awscdk],imgsrc:"/assets/awscdk-icon-v2.png"}),Object(o.a)(r,c.cdk8s,{name:i[c.cdk8s],imgsrc:"/assets/cdk8s-icon-v2.png"}),Object(o.a)(r,c.cdktf,{name:i[c.cdktf],imgsrc:"/assets/cdktf-icon.png"}),r)},51:function(e,t,n){"use strict";var a;n.d(t,"a",(function(){return a})),function(e){e.NameAsc="asc",e.NameDesc="desc",e.PublishDateAsc="oldest",e.PublishDateDesc="newest",e.DownloadsAsc="downloadsAsc",e.DownloadsDesc="downloadsDesc"}(a||(a={}))},57:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),r=n(21),c=n(31),o=n(3),i=n(124),s=n(98),l=n(2),u=["children","hasIcon","hasWarning","href","onClick","noFollow","rightIcon"],d=Object(o.e)((function(e,t){var n=e.children,o=e.hasIcon,d=void 0===o||o,b=e.hasWarning,j=void 0===b||b,O=e.href,f=e.onClick,h=e.noFollow,v=e.rightIcon,m=Object(r.a)(e,u),p=Object(s.b)(),g=(d=d||Boolean(v))?null!==v&&void 0!==v?v:Object(l.jsx)(c.j,{mb:1,ml:0}):null,x="noopener noreferrer";return(j||h)&&(x+=" nofollow"),Object(l.jsxs)(i.j,Object(a.a)(Object(a.a)({color:"blue.500",href:O,isExternal:!0,onClick:j?p({href:O,onClick:f}):f,ref:t,rel:x},m),{},{children:[n," ",d&&g]}))}));d.displayName="ExternalLink"},58:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var a=function(e,t){return t.reduce((function(t,n){return t[n]="".concat(e,"-").concat(n),t}),{})}},64:function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"c",(function(){return r})),n.d(t,"b",(function(){return c}));var a="https://github.com/cdklabs/construct-hub",r=[{display:"FAQ",isNavLink:!0,url:"/faq"},{display:"Construct Hub on GitHub",url:a},{display:"Issues on GitHub",url:"".concat(a,"/issues")},{display:"Community",links:[{display:"Slack",url:"https://join.slack.com/t/cdk-dev/shared_invite/zt-xtpfmrqt-6ormYTA0hLdpMSAtTkM_2A"}]}],c=[{display:"AWS CDK",links:[{display:"Home",url:"https://aws.amazon.com/cdk/"},{display:"Getting Started",url:"https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html"},{display:"Workshop",url:"https://cdkworkshop.com/"},{display:"Best Practices",url:"https://docs.aws.amazon.com/cdk/latest/guide/best-practices.html"}]},{display:"CDK for Terraform",links:[{display:"Getting Started",url:"https://learn.hashicorp.com/tutorials/terraform/cdktf"},{display:"Tutorials",url:"https://learn.hashicorp.com/collections/terraform/cdktf"}]},{display:"CDK for Kubernetes",links:[{display:"Home",url:"https://cdk8s.io"},{display:"Getting Started",url:"https://cdk8s.io/docs/latest/getting-started"},{display:"Documentation",url:"https://cdk8s.io/docs/latest"},{display:"API Reference",url:"https://cdk8s.io/docs/latest/reference/index.html"}]},{display:"Community",links:[{display:"Community Hub",url:"https://cdk.dev"}]}]},68:function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"c",(function(){return l})),n.d(t,"a",(function(){return u}));var a=n(10),r=n(18),c=n(15),o=new RegExp(/git@github\.com:([a-zA-Z-]+)+\/?([a-zA-Z-]+)*(\.git)?/),i=function(e){try{var t=e,n=e.match(o);if(n){var a=Object(r.a)(n,3),c=a[1],i=a[2];t="https://github.com/".concat(c,"/").concat(i)}return{hostname:new URL(t).hostname,url:t}}catch(s){return}},s=function(e,t){var n=e;if(t){var a=function(e,t){var n=new URLSearchParams(t);return Object.entries(e).filter((function(e){return null!=Object(r.a)(e,2)[1]})).forEach((function(e){var t=Object(r.a)(e,2),a=t[0],c=t[1];n.set(a,"".concat(c))})),n.toString()}(t);a&&(n+="?".concat(a))}return n},l=function(e){var t,n=e.cdkMajor,r=e.cdkType,o=e.keywords,i=e.query,l=e.offset,u=e.languages,d=e.sort,b=e.tags;return s(c.c.SEARCH,(t={},Object(a.a)(t,c.b.SEARCH_QUERY,i),Object(a.a)(t,c.b.CDK_TYPE,r),Object(a.a)(t,c.b.CDK_MAJOR,n),Object(a.a)(t,c.b.KEYWORDS,(null===o||void 0===o?void 0:o.length)?o.join(","):null),Object(a.a)(t,c.b.LANGUAGES,(null===u||void 0===u?void 0:u.length)?u.join(","):null),Object(a.a)(t,c.b.SORT,d),Object(a.a)(t,c.b.OFFSET,null!==l&&void 0!==l?l:0),Object(a.a)(t,c.b.TAGS,(null===b||void 0===b?void 0:b.length)?b.join(","):null),t))},u=function(e){var t,n=e.name,r=e.version,o=e.language,i=e.submodule;return s("".concat(c.c.PACKAGES,"/").concat(n,"/v/").concat(r),(t={},Object(a.a)(t,c.b.SUBMODULE,i),Object(a.a)(t,c.b.LANGUAGE,o),t))}},69:function(e,t,n){"use strict";n.d(t,"a",(function(){return x})),n.d(t,"b",(function(){return w})),n.d(t,"c",(function(){return I}));var a=n(6),r=n(21),c=n(31),o=n(11),i=n(129),s=n(126),l=n(0),u=n(34),d=n(19),b=n(96),j=n(99),O=n(138),f=n(58),h=Object(f.a)("searchBar",["input","searchIcon","searchButton","overlay","suggestionsList","suggestion"]),v=n(2),m=["children","data-event","hasButton","onSubmit","value","onChange"],p=Object(l.createContext)(void 0),g=function(){var e=Object(l.useContext)(p);if(!e)throw new Error("This component must be a child of a <SearchBar />");return e},x=function(e){var t,n=e.children,f=e["data-event"],g=e.hasButton,x=e.onSubmit,y=e.value,k=e.onChange,w=Object(r.a)(e,m),C=Object(o.g)(),S=Object(l.useRef)(null),E=Object(b.a)(),T=Object(j.a)(),A=Object(u.d)().trackCustomEvent,M=100*Math.floor((null!==(t=T.length)&&void 0!==t?t:0)/100),N="Search ".concat(M>0?"".concat(M,"+ "):"","construct libraries");return Object(l.useEffect)((function(){var e=function(e){S.current&&e.target&&(S.current.contains(e.target)||C.onClose())},t=function(e){var t,n;"Escape"===e.key&&(null===(t=S.current)||void 0===t||null===(n=t.blur)||void 0===n||n.call(t),C.onClose())};return window.addEventListener("keyup",t),window.addEventListener("click",e),function(){window.removeEventListener("keyup",t),window.removeEventListener("click",e)}}),[]),Object(v.jsx)(p.Provider,{value:{dataEvent:f,query:null!==y&&void 0!==y?y:E.query,isOpen:C.isOpen},children:Object(v.jsxs)(O.a,{color:"initial",onSubmit:null!==x&&void 0!==x?x:E.onSubmit,pos:"relative",children:[Object(v.jsxs)(i.b,{pos:"relative",zIndex:C.isOpen?3:"initial",children:[g&&Object(v.jsx)(i.c,{children:Object(v.jsx)(c.m,{"data-testid":h.searchIcon})}),Object(v.jsx)(i.a,Object(a.a)({bg:"white",boxShadow:C.isOpen?"base":"none","data-testid":h.input,focusBorderColor:"blue.500",onChange:null!==k&&void 0!==k?k:E.onQueryChange,onFocus:function(){C.onOpen(),f&&A(Object(d.a)({name:Object(d.b)(f,"Input")}))},placeholder:N,pr:g?{base:"none",md:"9rem"}:void 0,ref:S,value:null!==y&&void 0!==y?y:E.query},w)),g?Object(v.jsx)(i.d,{display:{base:"none",md:"initial"},w:"auto",children:Object(v.jsx)(s.a,{borderLeftRadius:"0",colorScheme:"blue","data-event":f?Object(d.b)(f,"Submit Button"):void 0,"data-testid":h.searchButton,fontSize:"0.875rem",type:"submit",w:"9rem",children:"Find constructs"})}):Object(v.jsx)(i.d,{children:Object(v.jsx)(s.b,{"aria-label":"Run search","data-event":f?Object(d.b)(f,"Submit Icon"):void 0,"data-testid":h.searchIcon,icon:Object(v.jsx)(c.m,{}),type:"submit",variant:"ghost"})})]}),n]})})},y=n(3),k=n(124),w=Object(y.e)((function(e,t){var n=g(),r=n.dataEvent,c=n.isOpen;return Object(v.jsx)(k.b,Object(a.a)({bg:"gray.700","data-event":r?Object(d.b)(r,"Overlay"):void 0,"data-testid":h.overlay,display:c?"initial":"none",inset:"0",opacity:"0.5",pos:"fixed",ref:t,zIndex:"1"},e))})),C=n(22),S=n(111),E=n(139),T=n(68),A=n(137),M=n(112),N=n(140),I=Object(y.e)((function(e,t){var n=g(),r=n.dataEvent,c=n.query,o=n.isOpen,i=Object(E.a)(c),s=Object(C.g)().push,l=Object(S.a)({limit:5,offset:0,query:i}).page;return!o||l.length<1||!i?null:Object(v.jsx)(A.a,Object(a.a)(Object(a.a)({as:k.r,"data-testid":h.suggestionsList,left:0,ml:0,pos:"absolute",pt:10,px:0,ref:t,right:0,top:0,zIndex:2},e),{},{children:l.map((function(e,t){var n,c,o=null!==(n=null===(c=e.metadata)||void 0===c?void 0:c.constructFramework)&&void 0!==n?n:{};return Object(v.jsxs)(v.Fragment,{children:[t>0&&Object(v.jsx)(k.e,{mx:4,w:"auto"}),Object(v.jsx)(N.a,{"data-event":r?Object(d.b)(r,"Suggestion",e.name):void 0,"data-testid":h.suggestion,name:Object(v.jsxs)(k.p,{align:"center",direction:"row",spacing:4,children:[Object(v.jsx)(k.b,{w:"5.5rem",children:Object(v.jsx)(M.a,Object(a.a)({w:"min-content"},o))}),Object(v.jsx)(k.q,{children:e.name})]}),onClick:function(){return s(Object(T.a)(e))},py:2,textAlign:"left"},e.id)]})}))}))}))},70:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(124),r=n(93),c=n(2),o=function(){return Object(c.jsx)(a.c,{children:Object(c.jsx)(r.a,{size:"xl"})})}},86:function(e,t,n){"use strict";n.d(t,"b",(function(){return R})),n.d(t,"a",(function(){return z}));var a,r=n(0),c=n(10),o=n(49),i=n(32),s=n(6),l=n(18),u=n(143),d=n(144),b=n(100),j=n.n(b),O=n(43),f=n(51),h=n(110),v=n(108),m=function(e){return function(t,n){return t.name.localeCompare(n.name)*(e?1:-1)}},p=function(e){return function(t,n){var a=new Date(t.metadata.date).getTime(),r=new Date(n.metadata.date).getTime();return a===r?m(!0)(t,n):e?r<a?1:-1:a<r?1:-1}},g=function(e){return function(t,n){return t.downloads!==n.downloads?(t.downloads-n.downloads)*(e?1:-1):m(!e)(t,n)}},x=(a={},Object(c.a)(a,f.a.NameAsc,m(!0)),Object(c.a)(a,f.a.NameDesc,m(!1)),Object(c.a)(a,f.a.PublishDateAsc,p(!0)),Object(c.a)(a,f.a.PublishDateDesc,p(!1)),Object(c.a)(a,f.a.DownloadsAsc,g(!0)),Object(c.a)(a,f.a.DownloadsDesc,g(!1)),a),y=function(e){if(e)return function(t){var n,a;return(null===(n=t.metadata)||void 0===n||null===(a=n.constructFramework)||void 0===a?void 0:a.name)===e}},k=function(e){if("number"===typeof e)return function(t){var n,a;return(null===(n=t.metadata)||void 0===n||null===(a=n.constructFramework)||void 0===a?void 0:a.majorVersion)===e}},w=function(e){if(null===e||void 0===e?void 0:e.length)return function(t){var n,a,r,c,i=new Set,s=Object(o.a)(null!==(n=t.keywords)&&void 0!==n?n:[]);try{for(s.s();!(c=s.n()).done;){var l=c.value;i.add(l.toLocaleLowerCase())}}catch(v){s.e(v)}finally{s.f()}var u,d=Object(o.a)(null!==(a=null===(r=t.metadata)||void 0===r?void 0:r.packageTags)&&void 0!==a?a:[]);try{for(d.s();!(u=d.n()).done;){var b,j=null===(b=u.value.keyword)||void 0===b?void 0:b.label;j&&i.add(j.toLocaleLowerCase())}}catch(v){d.e(v)}finally{d.f()}var O,f=Object(o.a)(e);try{for(f.s();!(O=f.n()).done;){var h=O.value;if(i.has(h.toLocaleLowerCase()))return!0}}catch(v){f.e(v)}finally{f.f()}return!1}},C=function(e){var t,n=(null!==(t=null===e||void 0===e?void 0:e.length)&&void 0!==t?t:0)>0?new Set(e):void 0;if(n&&!n.has(v.d.TypeScript))return function(e){var t;return Object.keys(null!==(t=e.languages)&&void 0!==t?t:{}).some((function(e){return n.has(e)}))}},S=function(e){if(e&&e.length)return function(t){var n,a,r;return null!==(n=null===(a=t.metadata)||void 0===a||null===(r=a.packageTags)||void 0===r?void 0:r.some((function(t){return e.includes(t.id)})))&&void 0!==n&&n}},E=function(e){for(var t,n,a,r=new Set,c=null!==(t=e.keywords)&&void 0!==t?t:[],o=(null!==(n=null===(a=e.metadata)||void 0===a?void 0:a.packageTags)&&void 0!==n?n:[]).filter((function(e){return e.keyword})).map((function(e){return e.keyword.label})),s=0,l=[].concat(Object(i.a)(c),Object(i.a)(o));s<l.length;s++){var u=l[s];h.a.has(u)||r.add(u.toLocaleLowerCase())}return Array.from(r)},T={AUTHOR_EMAIL:{name:"authorEmail",boost:1},AUTHOR_NAME:{name:"authorName",boost:3},DESCRIPTION:{name:"description",boost:2},NAME:{name:"name",boost:5},PACKAGE_NAME:{name:"packageName",boost:5},SCOPE:{name:"scope",boost:5},TAG_NAMES:{name:"tagNames",boost:2}},A=function(){function e(t,n){Object(u.a)(this,e),this.map=void 0,this.index=void 0,this.keywords=void 0,this.constructFrameworks=void 0;var a=t.filter((function(e){var t;return!(null===(t=e.keywords)||void 0===t?void 0:t.includes("construct-hub/hide-from-search"))})).reduce((function(e,t){var a,r,c,o,i,u=t.author,d=t.name,b=[d,t.version].join("@"),O=null!==(a=null===(r=n.packages[d])||void 0===r||null===(c=r.downloads)||void 0===c?void 0:c.npm)&&void 0!==a?a:0,f=d.split("/"),h=Object(l.a)(f,2),v=h[0],m=h[1];m||(m=v),"string"===typeof u?o=u:((null===u||void 0===u?void 0:u.name)&&(o=u.name),(null===u||void 0===u?void 0:u.email)&&(i=u.email));var p=E(t);return e.set(b,Object(s.a)(Object(s.a)({},t),{},{authorName:o,authorEmail:i,keywords:p,downloads:O,id:b,packageName:m,scope:v,tagNames:p.map(j.a.tokenizer).flat()})),e}),new Map);this.map=this.sort(a,f.a.PublishDateDesc),this.constructFrameworks=this.detectConstructFrameworks(),this.keywords=this.detectKeywords(),this.index=j()((function(){var e=this;for(var t in this.tokenizer.separator=/[\s\-/@]+/,this.ref("id"),T){var n=T[t];this.field(n.name,{boost:n.boost})}Object(i.a)(a.values()).forEach((function(t){var n=Math.log(Math.max(t.downloads,1));e.add(t,{boost:n})}))}))}return Object(d.a)(e,[{key:"search",value:function(e){var t=null!==e&&void 0!==e?e:{},n=t.query,a=t.filters,r=t.sort,c=n?this.query(n):new Map(this.map);return a&&(c=this.filter(c,a)),c=this.dedup(c),r&&(c=this.sort(c,r)),c}},{key:"query",value:function(e){var t=this,n=[];try{var a=j.a.tokenizer(e);a.length>1&&(a=a.filter((function(e){return"cdk"!==e.toString()}))),n=this.index.query((function(e){e.term(a,{})}))}catch(r){console.error(r)}return n.reduce((function(e,n){var a=n.ref,r=t.map.get(a);return r&&e.set(a,r),e}),new Map)}},{key:"findByName",value:function(e){var t,n=Object(i.a)(this.map.values()).filter((function(t){return t.name===e})),a=new Array,r=Object(o.a)(n.values());try{for(r.s();!(t=r.n()).done;){var c=t.value;c.name===e&&a.push(c)}}catch(s){r.e(s)}finally{r.f()}return a}},{key:"filter",value:function(e,t){var n=t.cdkType,a=t.cdkMajor,r=t.keywords,c=t.languages,o=t.tags,i=new Map(e),s=[y(n),k(n?a:void 0),w(r),C(c),S(o)].filter(Boolean);return i.forEach((function(e){var t=!1;s.forEach((function(n){t||n(e)||(t=!0)})),t&&i.delete(e.id)})),i}},{key:"sort",value:function(e,t){return t?new Map(Object(i.a)(e.entries()).sort((function(e,n){var a=Object(l.a)(e,2)[1],r=Object(l.a)(n,2)[1];return x[t](a,r)}))):e}},{key:"dedup",value:function(e){var t,n=new Map,a=Object(o.a)(e);try{for(a.s();!(t=a.n()).done;){var r=Object(l.a)(t.value,2),c=(r[0],r[1]),i=n.get(c.name);(!i||new Date(i.metadata.date)<new Date(c.metadata.date))&&n.set(c.name,c)}}catch(s){a.e(s)}finally{a.f()}return n}},{key:"detectKeywords",value:function(){return Object(i.a)(this.map.values()).reduce((function(e,t){var n,a=Object(o.a)(E(t));try{for(a.s();!(n=a.n()).done;){var r=n.value,c=e.get(r);e.set(r,(null!==c&&void 0!==c?c:0)+1)}}catch(i){a.e(i)}finally{a.f()}return e}),new Map)}},{key:"detectConstructFrameworks",value:function(){var e;return Object(i.a)(this.map.values()).reduce((function(e,t){var n,a,r=t.metadata,c=null===r||void 0===r||null===(n=r.constructFramework)||void 0===n?void 0:n.name,o=null===r||void 0===r||null===(a=r.constructFramework)||void 0===a?void 0:a.majorVersion;if(c){var i=e[c];void 0===o||i.majorVersions.includes(o)||i.majorVersions.push(o),i.pkgCount+=1}return e}),(e={},Object(c.a)(e,O.c.awscdk,{majorVersions:[],pkgCount:0}),Object(c.a)(e,O.c.cdk8s,{majorVersions:[],pkgCount:0}),Object(c.a)(e,O.c.cdktf,{majorVersions:[],pkgCount:0}),e))}}]),e}(),M=n(70),N=n(87),I=n(88),L=n(2),D=Object(r.createContext)(void 0),R=function(){return Object(r.useContext)(D)},z=function(e){var t=e.children,n=Object(N.b)(),a=Object(I.b)(),c=Object(r.useMemo)((function(){var e;if(void 0!==(null===(e=n.data)||void 0===e?void 0:e.packages)&&!n.isLoading&&(void 0!==a.data&&!a.isLoading))return new A(n.data.packages,a.data)}),[n.data,n.isLoading,a.data,a.isLoading]);return c?Object(L.jsx)(D.Provider,{value:c,children:t}):Object(L.jsx)(M.a,{})}},87:function(e,t,n){"use strict";n.d(t,"b",(function(){return j})),n.d(t,"a",(function(){return O}));var a=n(0),r=n(39),c=n(26),o=n.n(c),i=n(44),s=n(15),l={packages:[]},u=function(){var e=Object(i.a)(o.a.mark((function e(){var t;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(s.a.CATALOG_SUFFIX);case 2:if((t=e.sent).ok){e.next=7;break}return console.error(t.statusText),console.warn("Failed to fetch package catalog. Falling back to empty package list."),e.abrupt("return",l);case 7:return e.abrupt("return",t.json().catch((function(e){return console.error(e),console.warn("Invalid package catalog response. Falling back to empty package list."),l})));case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),d=n(2),b=Object(a.createContext)(void 0),j=function(){return Object(a.useContext)(b)},O=function(e){var t=e.children,n=Object(r.useQuery)("catalog",u,{initialData:{packages:[]}});return Object(d.jsx)(b.Provider,{value:n,children:t})}},88:function(e,t,n){"use strict";n.d(t,"b",(function(){return j})),n.d(t,"a",(function(){return O}));var a=n(0),r=n(39),c=n(26),o=n.n(c),i=n(44),s=n(15),l={packages:{},updated:"NOT_FOUND"},u=function(){var e=Object(i.a)(o.a.mark((function e(){var t;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(s.a.STATS);case 2:if((t=e.sent).ok){e.next=7;break}return console.error(t.statusText),console.warn("Could not retrieve package stats. Using empty stats."),e.abrupt("return",l);case 7:return e.abrupt("return",t.json().catch((function(e){return console.error(e),console.warn("Error in package stats response. Using empty stats."),l})));case 8:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),d=n(2),b=Object(a.createContext)(void 0),j=function(){return Object(a.useContext)(b)},O=function(e){var t=e.children,n=Object(r.useQuery)("stats",u);return Object(d.jsx)(b.Provider,{value:n,children:t})}},89:function(e,t,n){"use strict";n.d(t,"a",(function(){return O})),n.d(t,"b",(function(){return j}));var a=n(49),r=n(6),c=n(21),o=n(0),i=n(39),s=n(22),l=n(132),u=n(2),d=["data"],b=Object(o.createContext)(void 0),j=function(){return Object(o.useContext)(b)},O=function(e){var t,n=e.children,o=Object(s.h)().search,j=Object(i.useQuery)("config",l.b),O=j.data,f=Object(c.a)(j,d),h=Object(r.a)({},O),v=new URLSearchParams(o);h.featureFlags=null!==(t=h.featureFlags)&&void 0!==t?t:{};var m,p=Object(a.a)(v.keys());try{for(p.s();!(m=p.n()).done;){var g=m.value;if(g.startsWith("ff-")){var x=g.slice(3);h.featureFlags[x]=!0}}}catch(y){p.e(y)}finally{p.f()}return Object(u.jsx)(b.Provider,{value:Object(r.a)(Object(r.a)({},f),{},{data:h}),children:n})}},96:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(18),r=n(0),c=n(22),o=n(68),i=function(){var e,t,n,i,s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},l=Object(r.useState)(null!==(e=s.defaultQuery)&&void 0!==e?e:""),u=Object(a.a)(l,2),d=u[0],b=u[1],j=Object(r.useState)(s.defaultCdkType),O=Object(a.a)(j,2),f=O[0],h=O[1],v=Object(r.useState)(s.defaultCdkMajor),m=Object(a.a)(v,2),p=m[0],g=m[1],x=Object(r.useState)(null!==(t=s.defaultLanguages)&&void 0!==t?t:[]),y=Object(a.a)(x,2),k=y[0],w=y[1],C=Object(r.useState)(null!==(n=s.defaultTags)&&void 0!==n?n:[]),S=Object(a.a)(C,2),E=S[0],T=S[1],A=Object(r.useState)(null!==(i=s.defaultKeywords)&&void 0!==i?i:[]),M=Object(a.a)(A,2),N=M[0],I=M[1],L=Object(r.useState)(s.defaultSort),D=Object(a.a)(L,2),R=D[0],z=D[1],P=Object(c.g)(),F=P.push,_=P.replace,G=function(e){e.preventDefault(),b(e.target.value)},U=Object(r.useCallback)((function(e){((null===e||void 0===e?void 0:e.replace)?_:F)(Object(o.c)({cdkType:f,cdkMajor:p,keywords:N,languages:k,query:d,sort:R,tags:E}))}),[_,F,f,p,N,k,d,R,E]),H=Object(r.useCallback)((function(e){null===e||void 0===e||e.preventDefault(),U()}),[U]);return Object(r.useMemo)((function(){return{cdkMajor:p,cdkType:f,keywords:N,languages:k,onQueryChange:G,onSearch:U,onSubmit:H,query:d,setCdkMajor:g,setCdkType:h,setKeywords:I,setLanguages:w,setTags:T,setQuery:b,setSort:z,sort:R,tags:E}}),[p,f,N,k,U,H,d,R,E])}},98:function(e,t,n){"use strict";n.d(t,"b",(function(){return m})),n.d(t,"a",(function(){return p}));var a=n(6),r=n(18),c=n(11),o=n(0),i="prefersWarnOnExternalLinkClick",s=n(31),l=n(133),u=n(124),d=n(125),b=n(126),j=n(127),O=n(57),f=n(2),h=function(e){var t=e.href,n=e.isOpen,a=e.onClick,c=e.onClose,h=e.setShouldWarn,v=Object(o.useState)(!0),m=Object(r.a)(v,2),p=m[0],g=m[1];return Object(f.jsx)(l.g,{closeOnOverlayClick:!1,isOpen:n,onClose:c,children:Object(f.jsx)(l.m,{children:Object(f.jsxs)(l.j,{color:"blue.800",children:[Object(f.jsx)(l.l,{children:"Confirm"}),Object(f.jsxs)(l.h,{children:[Object(f.jsx)(u.q,{fontSize:"lg",mb:2,children:"This link is taking you to an external site"}),Object(f.jsx)(u.q,{bg:"gray.100",borderRadius:"sm",color:"blue.500",fontSize:"sm",mb:4,p:1,children:t}),Object(f.jsx)(d.a,{onChange:function(e){var t=!e.target.checked;g(t)},children:"Do not show this warning again."})]}),Object(f.jsxs)(l.k,{children:[Object(f.jsx)(b.a,{onClick:function(){g(!0),c()},variant:"ghost",children:"Cancel"}),Object(f.jsx)(j.a,{hasArrow:!0,label:t,placement:"top",children:Object(f.jsx)(O.a,{hasIcon:!1,hasWarning:!1,href:t,noFollow:!0,onClick:function(e){if(!p){h(p);try{localStorage.setItem(i,JSON.stringify(p))}catch(t){}}null===a||void 0===a||a(e),c()},children:Object(f.jsx)(b.a,{colorScheme:"blue",ml:4,rightIcon:Object(f.jsx)(s.j,{}),tabIndex:0,variant:"ghost",children:"Proceed"})})})]})]})})})},v=Object(o.createContext)((function(e){return e.onClick})),m=function(){return Object(o.useContext)(v)},p=function(e){var t=e.children,n=Object(o.useState)(null),s=Object(r.a)(n,2),l=s[0],u=s[1],d=Object(c.g)({onClose:function(){u(null)}}),b=d.isOpen,j=d.onOpen,O=d.onClose,m=Object(o.useState)((function(){try{var e,t=null!==(e=localStorage.getItem(i))&&void 0!==e?e:"true";return JSON.parse(t)}catch(n){return!0}})),p=Object(r.a)(m,2),g=p[0],x=p[1],y=Object(o.useCallback)((function(e){var t=e.href,n=e.onClick;if(!g)return n;return function(e){u({href:t,onClick:n}),e.preventDefault(),j()}}),[j,g]);return Object(f.jsxs)(v.Provider,{value:y,children:[t,Object(f.jsx)(h,Object(a.a)({isOpen:b,onClose:O,setShouldWarn:x},l))]})}},99:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(32),r=n(0),c=n(86),o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.query,n=e.filters,o=e.sort,i=Object(c.b)();if(!i)throw new Error("This hook can only be called within a descendant of a <SearchProvider />");var s=Object(r.useMemo)((function(){return Object(a.a)(i.search({query:t,filters:n,sort:o}).values())}),[i,t,n,o]);return s}}},[[193,3,5]]]);
2
+ //# sourceMappingURL=main.ded71e5d.chunk.js.map