construct-hub 0.2.1 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/.jsii +2 -2
  2. package/lib/backend/transliterator/transliterator.bundle/Dockerfile +7 -3
  3. package/lib/backend/transliterator/transliterator.bundle/index.js +495 -238
  4. package/lib/construct-hub.js +1 -1
  5. package/lib/package-sources/code-artifact.js +1 -1
  6. package/lib/package-sources/npmjs.js +1 -1
  7. package/lib/spdx-license.js +1 -1
  8. package/package.json +9 -9
  9. package/website/asset-manifest.json +38 -34
  10. package/website/assets/aws-cdk.png +0 -0
  11. package/website/assets/kubernetes.png +0 -0
  12. package/website/assets/terraform.png +0 -0
  13. package/website/index.html +1 -1
  14. package/website/service-worker.js +1 -1
  15. package/website/service-worker.js.map +1 -1
  16. package/website/static/js/{0.ff9d42f8.chunk.js → 0.074504b3.chunk.js} +2 -2
  17. package/website/static/js/{0.ff9d42f8.chunk.js.map → 0.074504b3.chunk.js.map} +1 -1
  18. package/website/static/js/1.272635ed.chunk.js +2 -0
  19. package/website/static/js/{1.bd0a2241.chunk.js.map → 1.272635ed.chunk.js.map} +1 -1
  20. package/website/static/js/10.d664efc4.chunk.js +2 -0
  21. package/website/static/js/10.d664efc4.chunk.js.map +1 -0
  22. package/website/static/js/11.6f7f0c4b.chunk.js +2 -0
  23. package/website/static/js/{10.32615aa0.chunk.js.map → 11.6f7f0c4b.chunk.js.map} +1 -1
  24. package/website/static/js/12.c21a676e.chunk.js +2 -0
  25. package/website/static/js/12.c21a676e.chunk.js.map +1 -0
  26. package/website/static/js/{11.051d89fc.chunk.js → 13.8635b63a.chunk.js} +2 -2
  27. package/website/static/js/{11.051d89fc.chunk.js.map → 13.8635b63a.chunk.js.map} +1 -1
  28. package/website/static/js/{12.e96b82dd.chunk.js → 14.86414212.chunk.js} +3 -3
  29. package/website/static/js/{12.e96b82dd.chunk.js.LICENSE.txt → 14.86414212.chunk.js.LICENSE.txt} +0 -0
  30. package/website/static/js/{12.e96b82dd.chunk.js.map → 14.86414212.chunk.js.map} +1 -1
  31. package/website/static/js/{13.fb054c47.chunk.js → 15.78ca2283.chunk.js} +2 -2
  32. package/website/static/js/{13.fb054c47.chunk.js.map → 15.78ca2283.chunk.js.map} +1 -1
  33. package/website/static/js/4.53a8d553.chunk.js +3 -0
  34. package/website/static/js/{4.7cd92fab.chunk.js.LICENSE.txt → 4.53a8d553.chunk.js.LICENSE.txt} +0 -0
  35. package/website/static/js/4.53a8d553.chunk.js.map +1 -0
  36. package/website/static/js/5.5d827820.chunk.js +3 -0
  37. package/website/static/js/{5.0da0a8ef.chunk.js.LICENSE.txt → 5.5d827820.chunk.js.LICENSE.txt} +0 -0
  38. package/website/static/js/{5.0da0a8ef.chunk.js.map → 5.5d827820.chunk.js.map} +1 -1
  39. package/website/static/js/6.f37a117e.chunk.js +2 -0
  40. package/website/static/js/{6.c0e3f99c.chunk.js.map → 6.f37a117e.chunk.js.map} +1 -1
  41. package/website/static/js/{7.11632168.chunk.js → 7.a4739ebc.chunk.js} +2 -2
  42. package/website/static/js/{7.11632168.chunk.js.map → 7.a4739ebc.chunk.js.map} +1 -1
  43. package/website/static/js/{8.8af79a83.chunk.js → 8.b0c4d0d8.chunk.js} +2 -2
  44. package/website/static/js/{8.8af79a83.chunk.js.map → 8.b0c4d0d8.chunk.js.map} +1 -1
  45. package/website/static/js/9.dcbf33c2.chunk.js +2 -0
  46. package/website/static/js/9.dcbf33c2.chunk.js.map +1 -0
  47. package/website/static/js/main.e289a3fc.chunk.js +2 -0
  48. package/website/static/js/main.e289a3fc.chunk.js.map +1 -0
  49. package/website/static/js/runtime-main.fa5c7ad1.js +2 -0
  50. package/website/static/js/runtime-main.fa5c7ad1.js.map +1 -0
  51. package/website/static/js/1.bd0a2241.chunk.js +0 -2
  52. package/website/static/js/10.32615aa0.chunk.js +0 -2
  53. package/website/static/js/4.7cd92fab.chunk.js +0 -3
  54. package/website/static/js/4.7cd92fab.chunk.js.map +0 -1
  55. package/website/static/js/5.0da0a8ef.chunk.js +0 -3
  56. package/website/static/js/6.c0e3f99c.chunk.js +0 -2
  57. package/website/static/js/9.2b21526e.chunk.js +0 -2
  58. package/website/static/js/9.2b21526e.chunk.js.map +0 -1
  59. package/website/static/js/main.f1390607.chunk.js +0 -2
  60. package/website/static/js/main.f1390607.chunk.js.map +0 -1
  61. package/website/static/js/runtime-main.2f83ac68.js +0 -2
  62. package/website/static/js/runtime-main.2f83ac68.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["contexts/Analytics/Analytics.tsx","contexts/Analytics/usePageView.ts","util/url.ts","components/Card/Card.tsx","hooks/useLanguage/useLanguage.ts","hooks/useQueryParams/useQueryParams.ts","components/CatalogSearch/testIds.ts","components/CatalogSearch/CatalogSearchInputs.tsx","components/CatalogSearch/Dropdown.tsx","components/CatalogSearch/CatalogSearch.tsx","hooks/useCatalogResults/useCatalogResults.ts","hooks/useCatalogSearch/useCatalogSearch.ts","constants/url.ts","hooks/useDebounce/useDebounce.ts","components/SearchItem/SearchItem.tsx","lib/shortbread/shortbread.ts","reportWebVitals.ts","components/DevPreviewBanner/DevPreviewBanner.tsx","lib/shortbread/getLocalStoreWriter.ts","contexts/Shortbread/Shortbread.tsx","components/Footer/constants.ts","components/Footer/testIds.ts","components/Footer/Footer.tsx","constants/links.ts","components/NavPopover/NavPopover.tsx","components/NavPopover/NavPopoverContent.tsx","components/NavPopover/NavPopoverTrigger.tsx","components/Header/testIds.ts","components/Header/Documentation.tsx","components/Header/Resources.tsx","components/Header/Title.tsx","components/Header/MobileNav.tsx","components/Header/NavButton.tsx","components/SearchModal/testIds.ts","components/SearchModal/SearchModal.tsx","components/Header/SearchButton.tsx","components/Header/Header.tsx","components/PageLoader/PageLoader.tsx","components/LazyRoute/LazyRoute.tsx","App.tsx","theme/components/Code.ts","theme/components/Tag.ts","theme/components/index.ts","theme/components/Divider.ts","theme/foundations/index.ts","theme/foundations/borders.ts","theme/foundations/colors.ts","theme/foundations/radius.ts","theme/foundations/sizes.ts","theme/foundations/shadows.ts","theme/index.ts","contexts/Theme.tsx","register-service-worker.ts","index.tsx","constants/languages.ts","icons/TSIcon.tsx","icons/PythonIcon.tsx","icons/JavaIcon.tsx","icons/GoIcon.tsx","icons/DotNetIcon.tsx","components/ExternalLink/ExternalLink.tsx","util/createTestIds.ts","components/NavLink/NavLink.tsx","components/Form/Form.tsx","api/package/packages.ts","contexts/Catalog/Catalog.tsx","api/config/index.ts","contexts/Config/Config.tsx","hooks/useRequest/useRequest.ts","contexts/ExternalLinkWarning/constants.ts","contexts/ExternalLinkWarning/ExternalLinkWarningModal.tsx","contexts/ExternalLinkWarning/ExternalLinkWarning.tsx"],"names":["AnalyticsContext","createContext","trackPageView","AnalyticsProvider","children","pathname","useLocation","prevPath","useRef","useCallback","opts","current","window","AWSMA","ready","document","dispatchEvent","CustomEvent","TRIGGER_EVENT","detail","Provider","value","usePageView","useContext","options","useMemo","page","pageURL","location","href","replace","event","type","name","description","gitSSHRegex","RegExp","getRepoUrlAndHost","repoUrl","url","sshUrl","match","author","repo","hostname","URL","createURL","base","params","search","searchParams","URLSearchParams","Object","entries","filter","forEach","k","v","set","toString","createURLSearchParams","getSearchPath","query","offset","language","ROUTES","SEARCH","QUERY_PARAMS","SEARCH_QUERY","LANGUAGE","OFFSET","getPackagePath","version","submodule","PACKAGES","SUBMODULE","Card","forwardRef","props","ref","bg","border","borderRadius","boxShadow","p","displayName","defaultLang","Language","TypeScript","LOCAL_KEY","isValidLang","lang","TEMP_SUPPORTED_LANGUAGES","has","getInitialLang","langFromParams","storedLang","localStorage","getItem","useLanguage","updateUrl","updateSaved","hash","useHistory","useQueryParams","get","useState","setLanguage","useEffect","update","val","setItem","testIds","createTestIds","languageOptions","fromEntries","LANGUAGE_NAME_MAP","key","LanguageDropdown","placeholder","items","onSelect","selected","text","strategy","as","Button","borderColor","trigger","rightIcon","ChevronDown","color","variant","menu","item","onClick","map","CatalogSearchInputs","onQueryChange","onLanguageChange","input","onChange","languageItem","languageDropdownMenu","languageDropdown","languageDropdownValue","colorScheme","submit","CatalogSearch","onSubmit","Form","form","autoRows","gap","templateColumns","sm","md","width","useCatalogResults","limit","useCatalog","data","loading","error","results","packages","filtered","keys","languages","includes","length","itemStr","JSON","stringify","toLowerCase","queryStr","sort","p1","p2","d1","Date","metadata","date","d2","pageLimit","Math","floor","displayable","startIndex","stopIndex","slice","useCatalogSearch","defaultQuery","setQuery","defaultLanguage","push","e","preventDefault","target","onSearch","API_PATHS","PACKAGES_PREFIX","CATALOG_SUFFIX","ASSEMBLY_SUFFIX","METADATA_SUFFIX","CONFIG","FAQ","HOME","SITE_TERMS","useDebounce","debouncedValue","setDebouncedValue","delay","handler","setTimeout","clearTimeout","SearchItem","alignItems","display","fontSize","h","lineHeight","listStyleType","onKeyDown","px","role","sx","tabIndex","instance","onPerfEntry","STORAGE_KEY","DevPreviewBanner","useDisclosure","defaultIsOpen","parse","sessionStorage","onClose","isOpen","in","mt","mx","position","InfoOutline","left","top","w","textAlign","ExternalLink","hasWarning","textDecoration","icon","Close","right","size","getLocalStoreWriter","initialize","a","Promise","resolve","reject","addEventListener","domain","navigator","__storeWriter","AWSCShortbread","callIfDefined","method","Error","access","checkForCookieConsent","customizeCookies","getConsentCookie","hasConsent","shortbread","publicAPI","ShortbreadContext","ShortbreadProvider","isReady","setIsReady","isCancelled","then","catch","console","FOOTER_LINKS","SERVICE_TERMS","testId","PRIVACY","isExternal","LEGAL","values","Footer","align","container","direction","justify","py","columnGap","columns","links","index","mr","orientation","NavLink","to","disclaimer","manageCookies","fontWeight","DOCUMENTATION","isNavLink","RESOURCES","NavPopover","menuProps","Link","justifyContent","NavPopoverContent","idx","title","link","linkIdx","NavPopoverTrigger","Documentation","gettingStartedTrigger","gettingStartedMenu","Resources","resourcesTrigger","resourcesMenu","Title","MobileNav","placement","mobileNav","spacing","NavButton","nav","navOpen","Hamburger","onOpen","SearchModal","currentLanguage","onSearchSubmit","searchAPI","showResults","inputRef","initialFocusRef","pb","my","pkg","SearchButton","searchModal","some","path","searchButton","m","maxW","Search","ml","searchIcon","HeaderItem","rowStart","Header","gridTemplateColumns","gridTemplateRows","zIndex","colStart","justifySelf","placeItems","PageLoader","LazyRoute","Component","component","routeProps","fallback","lazy","Home","HomeRedesign","NotFound","Packages","SearchResults","SearchRedesign","SiteTerms","App","useConfig","featureFlags","isRedesign","homeRedesign","searchRedesign","inset","overflow","exact","theme","components","Code","variants","subtle","whiteSpace","createVariant","overrides","varBase","Tag","baseStyle","background","official","Divider","defaultProps","foundations","borders","colors","blue","bgPrimary","radii","card","sizes","shadows","extendTheme","Theme","resetCSS","isLocalhost","Boolean","registerValidSW","swUrl","config","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","log","onUpdate","onSuccess","ReactDOM","render","StrictMode","Config","Analytics","ExternalLinkWarning","Catalog","getElementById","Function","getCLS","getFID","getFCP","getLCP","getTTFB","process","origin","fetch","headers","response","contentType","status","indexOf","unregister","reload","checkValidServiceWorker","LANGUAGES","Python","Java","Go","DotNet","Set","LANGUAGE_RENDER_MAP","typescript","transform","viewBox","d","fill","python","id","stopColor","gradientUnits","x1","x2","xlinkHref","y1","y2","style","marker","java","golang","dotnet","hasIcon","noFollow","withPrompt","useExternalLinkWarning","rel","mb","scope","ids","reduce","acc","curr","RouterLink","fetchPackages","ok","statusText","json","CatalogContext","undefined","CatalogProvider","useRequest","requestPackages","catalogResponse","defaultConfig","fetchConfig","err","ConfigContext","ConfigProvider","requestConfig","configResponse","requestFn","initialValue","onError","setLoading","setData","setError","mountedRef","statefulFetch","res","PREFERS_WARN_ON_EXTERNAL_LINK_CLICK","ExternalLinkWarningModal","setShouldWarn","finalShouldWarn","setFinalShouldWarn","closeOnOverlayClick","shouldWarn","checked","hasArrow","label","ExternalLinkWarningContext","ExternalLinkWarningProvider","modalOption","setModalOptions","saved"],"mappings":"kOAcMA,EAAmBC,wBAA4B,CACnDC,cAAe,eAKJC,EAAuC,SAAC,GAAkB,IAAhBC,EAAe,EAAfA,SAC7CC,EAAaC,cAAbD,SAEFE,EAAWC,iBAAsB,MAEjCN,EAAgBO,uBACpB,SAACC,GAA0B,IAAD,MACpBH,EAASI,UAAYN,IAInB,QAAN,EAAAO,cAAA,mBAAQC,aAAR,mBAAeC,aAAf,iBAAuB,WACrBC,SAASC,cACP,IAAIC,YAAYL,OAAOC,MAAMK,cAAe,CAAEC,OAAQT,KAGxDH,EAASI,QAAUN,QAGvB,CAACA,IAGH,OACE,cAACL,EAAiBoB,SAAlB,CAA2BC,MAAO,CAAEnB,iBAApC,SACGE,K,OCvCMkB,EAAc,SAACZ,GAC1B,IAAQR,EDYwBqB,qBAAWvB,GCZnCE,cACAG,EAAaC,cAAbD,SAEFmB,EAA0BC,mBAC9B,iBAAO,CACLC,KAAK,aAEHC,QAASf,OAAOgB,SAASC,KAAKC,QAC5B,oBACA,4BAECpB,EAAKgB,MAEVK,MAAO,CACLC,KAAM,WACNC,KAAMvB,EAAKqB,MAAME,KACjBC,YAAaxB,EAAKqB,MAAMG,gBAI5B,CAAC7B,EAAUK,IAOb,OAJcD,uBAAY,WACxB,OAAOP,EAAcsB,KACpB,CAACtB,EAAesB,M,iKC5BfW,EAAc,IAAIC,OACtB,yDAGWC,EAAoB,SAC/BC,GAEA,IACE,IAAIC,EAAMD,EAEJE,EAASF,EAAQG,MAAMN,GAE7B,GAAIK,EAAQ,CACV,kBAAyBA,EAAzB,GAASE,EAAT,KAAiBC,EAAjB,KAEAJ,EAAG,6BAAyBG,EAAzB,YAAmCC,GAGxC,MAAO,CACLC,SAAU,IAAIC,IAAIN,GAAKK,SACvBL,OAEF,SAEA,SAwBSO,EAAY,SAACC,EAAcC,GACtC,IAAIT,EAAMQ,EAEV,GAAIC,EAAQ,CACV,IAAMC,EAnB2B,SACnCD,EACAD,GAEA,IAAMG,EAAe,IAAIC,gBAAgBJ,GAQzC,OANAK,OAAOC,QAAQL,GACZM,QAAO,mBAAgB,MAAhB,uBACPC,SAAQ,YAAa,IAAD,mBAAVC,EAAU,KAAPC,EAAO,KACnBP,EAAaQ,IAAIF,EAAjB,UAAuBC,OAGpBP,EAAaS,WAOHC,CAAsBZ,GAEjCC,IACFV,GAAG,WAAQU,IAIf,OAAOV,GAGIsB,EAAgB,SAAC,GAAD,MAC3BC,EAD2B,EAC3BA,MACAC,EAF2B,EAE3BA,OACAC,EAH2B,EAG3BA,SAH2B,OAS3BlB,EAAUmB,IAAOC,QAAR,mBACNC,IAAaC,aAAeN,GADtB,cAENK,IAAaE,SAAWL,GAFlB,cAGNG,IAAaG,OAHP,OAGgBP,QAHhB,IAGgBA,IAAU,GAH1B,KAMEQ,EAAiB,SAAC,GAAD,MAC5BtC,EAD4B,EAC5BA,KACAuC,EAF4B,EAE5BA,QACAR,EAH4B,EAG5BA,SACAS,EAJ4B,EAI5BA,UAJ4B,OAW5B3B,EAAU,GAAD,OAAImB,IAAOS,SAAX,YAAuBzC,EAAvB,cAAiCuC,IAAjC,mBACNL,IAAaQ,UAAYF,GADnB,cAENN,IAAaE,SAAWL,GAFlB,M,sGCpFEY,EAAOC,aAA6B,SAACC,EAAOC,GACvD,OACE,cAAC,IAAD,aACEC,GAAG,QACHC,OAAO,OACPC,aAAa,OACbC,UAAU,OACVC,EAAG,EACHL,IAAKA,GACDD,OAKVF,EAAKS,YAAc,Q,sHCdbC,EAAcC,IAASC,WAEvBC,EAAY,qBAEZC,EAAc,SAACC,GAAD,OACV,MAARA,GAAgBC,IAAyBC,IAAIF,IAEzCG,EAAiB,SAACC,GAEtB,GAAIL,EAAYK,GACd,OAAOA,EAIT,IAAK,IAAD,EACIC,EAAU,UAAIC,aAAaC,QAAQT,UAAzB,QAAuC,GACvD,GAAIC,EAAYM,GAAa,OAAOA,EACpC,UAKF,OAAOV,GAcIa,EAAc,WAAuC,IAAtC3E,EAAqC,uDAAP,GAChD4E,EAA2B5E,EAA3B4E,UAAWC,EAAgB7E,EAAhB6E,YACnB,EAA2B/F,cAAnBD,EAAR,EAAQA,SAAUiG,EAAlB,EAAkBA,KAClB,EAAoBC,cAAZzE,EAAR,EAAQA,QACFkB,EAASwD,cACTT,EAAiB/C,EAAOyD,IAAItC,IAAaE,UAG/C,EAAgCqC,oBAAmB,kBACjDZ,EAAeC,MADjB,mBAAO/B,EAAP,KAAiB2C,EAAjB,KAKAC,qBAAU,WACJlB,EAAYK,IAAmBA,IAAmB/B,GACpD2C,EAAYZ,KAGb,CAACA,IAGJa,qBAAU,WACJb,IAAmB/B,GAAYoC,IACjCpD,EAAOU,IAAIS,IAAaE,SAAUL,GAClClC,EAAQ,CAAEzB,WAAUiG,OAAMrD,OAAQD,EAAOW,gBAG1C,CAACK,EAAUoC,IAEd,IAAMS,EAASpG,uBACb,SAACqG,GAGC,GAFAH,EAAYG,GAERT,EACF,IACEJ,aAAac,QAAQtB,EAAWqB,GAChC,aAKN,CAACT,IAGH,OAAO5E,mBAAQ,iBAAM,CAACuC,EAAU6C,KAAkB,CAAC7C,EAAU6C,M,sFCpFlDL,EAAiB,WAC5B,IAAQvD,EAAW3C,cAAX2C,OAER,OAAOxB,mBAAQ,kBAAM,IAAI0B,gBAAgBF,KAAS,CAACA,M,4NCMtC+D,EAVCC,YAAc,gBAAiB,CAC7C,OACA,QACA,mBACA,uBACA,wBACA,eACA,WCGIC,EAAkB9D,OAAO+D,YAC7B/D,OAAOC,QAAQ+D,KAAmB9D,QAAO,gBAAE+D,EAAF,2BACvCzB,IAAyBC,IAAIwB,OAI3BC,ECMoD,SAAC,GAMpD,IALLC,EAKI,EALJA,YACAC,EAII,EAJJA,MACAC,EAGI,EAHJA,SACAC,EAEI,EAFJA,SACAV,EACI,EADJA,QAEMW,EAAOD,EAAWF,EAAME,GAAYH,EACpC/F,EAAU4B,OAAOC,QAAQmE,GAE/B,OACE,eAAC,IAAD,CAAMI,SAAS,QAAf,UACE,cAAC,IAAD,CACEC,GAAIC,IACJ9C,GAAG,QACH+C,YAAY,WACZ5C,UAAU,OACV,cAAa6B,EAAQgB,QACrBC,UAAW,cAACC,EAAA,EAAD,CAAiBC,MAAM,aAClCC,QAAQ,UAPV,SASE,cAAC,IAAD,CAAM,cAAapB,EAAQ3F,MAA3B,SAAmCsG,MAErC,eAAC,IAAD,CAAU,cAAaX,EAAQqB,KAA/B,UACE,cAAC,IAAD,CAAU,cAAarB,EAAQsB,KAAMC,QAAS,kBAAMd,EAAS,OAA7D,iBAGCjG,EAAQgH,KAAI,mCAAEvG,EAAF,KAAQoD,EAAR,YACX,cAAC,IAAD,CACE,cAAa2B,EAAQsB,KAErBC,QAAS,kBAAMd,EAASxF,IAH1B,SAKGoD,GAHIpD,aDdJwG,EAAsB5D,aAGjC,WAAuDE,GAAvD,IAAGjB,EAAH,EAAGA,MAAO4E,EAAV,EAAUA,cAAe1E,EAAzB,EAAyBA,SAAU2E,EAAnC,EAAmCA,iBAAnC,OACA,qCACE,cAAC,IAAD,CACE3D,GAAG,QACH+C,YAAY,WACZ5C,UAAU,OACV,cAAa6B,EAAQ4B,MACrB3G,KAAK,QACL4G,SAAUH,EACVnB,YAAY,uBACZxC,IAAKA,EACL1D,MAAOyC,IAET,cAACwD,EAAD,CACEE,MAAON,EACPO,SAAUkB,EACVpB,YAAY,cACZG,SAAU1D,EACVgD,QAAS,CACPsB,KAAMtB,EAAQ8B,aACdT,KAAMrB,EAAQ+B,qBACdf,QAAShB,EAAQgC,iBACjB3H,MAAO2F,EAAQiC,yBAGnB,cAAC,IAAD,CACE9D,UAAU,OACV+D,YAAY,OACZ,cAAalC,EAAQmC,OACrBnH,KAAK,SAJP,0B,eEpDSoH,EAAuD,SAAC,GAG9D,IAFLC,EAEI,EAFJA,SACGvE,EACC,iBACJ,OACE,cAACwE,EAAA,EAAD,CAAM,cAAatC,EAAQuC,KAAMF,SAAUA,EAA3C,SACE,cAAC,IAAD,CACEG,SAAS,MACTC,IAAK,EACLC,gBAAiB,CAAEC,GAAI,MAAOC,GAAI,eAClCC,MAAM,OAJR,SAME,cAACpB,EAAD,eAAyB3D,U,sGCbpBgF,EAAoB,SAAC,GAKD,IAJ/BC,EAI8B,EAJ9BA,MAI8B,IAH9BhG,cAG8B,MAHrB,EAGqB,MAF9BD,aAE8B,MAFtB,GAEsB,MAD9BE,gBAC8B,MADnB,KACmB,EAC9B,EAAiCgG,cAAzBC,EAAR,EAAQA,KAAMC,EAAd,EAAcA,QAASC,EAAvB,EAAuBA,MAEjBC,EAAU3I,mBAAQ,WACtB,GAAIyI,GAAWC,KAAS,OAACF,QAAD,IAACA,OAAD,EAACA,EAAMI,UAAU,MAAO,GAEhD,IAAMC,EAAWL,EAAKI,SAAS/G,QAAO,SAACgF,GAErC,GAAItE,GAAYA,IAAauB,IAASC,aAC/BpC,OAAOmH,KAAKjC,EAAKkC,WAAWC,SAASzG,GACxC,OAAO,EAKX,GAAIF,EAAM4G,OAAQ,CAChB,IAAMC,EAAUC,KAAKC,UAAUvC,GAAMwC,cAC/BC,EAAWjH,EAAMgH,cAEvB,IAAKH,EAAQF,SAASM,GACpB,OAAO,EAIX,OAAO,KAIT,OAAO,YAAIT,GAAUU,MAAK,SAACC,EAAIC,GAC7B,IAAMC,EAAK,IAAIC,KAAKH,EAAGI,SAASC,MAC1BC,EAAK,IAAIH,KAAKF,EAAGG,SAASC,MAChC,OAAIH,IAAOI,EACF,EAEFJ,EAAKI,EAAK,GAAK,OAEvB,QAACtB,QAAD,IAACA,OAAD,EAACA,EAAMI,SAAUF,EAAOnG,EAAUkG,EAASpG,IAExC0H,EAAYpB,EAAUqB,KAAKC,MAAMtB,EAAQM,OAASX,GAAS,EAE3D4B,EAAclK,mBAAQ,WAC1B,IAAMmK,GAAc7H,EAASyH,EAAYA,EAAYzH,GAAUgG,EACzD8B,EAAYD,EAAa7B,EAE/B,OAAOK,EAAQ0B,MAAMF,EAAYC,KAChC,CAAC9B,EAAOhG,EAAQyH,EAAWpB,IAE9B,OAAO3I,mBACL,iBAAO,CAAEyI,UAASE,UAASD,QAAOwB,cAAaH,eAC/C,CAACG,EAAaxB,EAAOD,EAASsB,EAAWpB,M,sGCXhC2B,EAAmB,WAEF,IAAD,IAD3BvK,EAC2B,uDADO,GAElC,EAA0BkF,mBAAQ,UAAClF,EAAQwK,oBAAT,QAAyB,IAA3D,mBAAOlI,EAAP,KAAcmI,EAAd,KAEA,EAAgCvF,mBAAQ,UACtClF,EAAQ0K,uBAD8B,QACX,MAD7B,mBAAOlI,EAAP,KAAiB2C,EAAjB,KAIA,EAAiBJ,cAAT4F,EAAR,EAAQA,KAEFzD,EAAyD,SAAC0D,GAC9DA,EAAEC,iBACFJ,EAASG,EAAEE,OAAOjL,QAGdkL,EAAW9L,uBAAY,WAC3B0L,EAAKtI,YAAc,CAAEG,WAAUF,aAC9B,CAACE,EAAUmI,EAAMrI,IAEduF,EAA+C5I,uBACnD,SAAC2L,GACE,OAADA,QAAC,IAADA,KAAGC,iBACHE,MAEF,CAACA,IAGH,OAAO9K,mBACL,iBAAO,CACLuC,WACA2E,iBAAkBhC,EAClB+B,gBACA6D,WACAlD,WACAvF,QACA6C,cACAsF,cAEF,CAACjI,EAAUuI,EAAUlD,EAAUvF,M,gCCjGnC,sGAAO,IAAM0I,EAAY,CACvBC,gBAAiB,QACjBC,eAAgB,gBAChBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,OAAQ,gBAGG1I,EAAe,CAC1BE,SAAU,OACVC,OAAQ,SACRF,aAAc,IACdO,UAAW,aAGAV,EAAS,CACpB6I,IAAK,OACLC,KAAM,IACNrI,SAAU,YACVR,OAAQ,UACR8I,WAAY,W,qFCbDC,EAAc,SACzB5L,GAEI,IADJG,EACG,uDAD8B,GAEjC,EAA4CkF,mBAASrF,GAArD,mBAAO6L,EAAP,KAAuBC,EAAvB,KACA,EAAkC3L,EAA1B4L,aAAR,MAAgB,IAAhB,EAAqBvE,EAAarH,EAAbqH,SAerB,OAbAjC,qBAAU,WAER,IAAMyG,EAAUC,YAAW,WACzBH,EAAkB9L,GACV,OAARwH,QAAQ,IAARA,KAAWxH,KACV+L,GAGH,OAAO,WACLG,aAAaF,MAEd,CAAChM,EAAO+L,EAAOvE,IAEXqE,I,mICnBIM,EAAa3I,aACxB,WAA8BE,GAAS,IAApC9C,EAAmC,EAAnCA,KAAMsG,EAA6B,EAA7BA,QAAYzD,EAAiB,iBAOpC,OACE,cAAC,IAAD,yBACE2I,WAAW,SACXC,QAAQ,OACRC,SAAS,KACTC,EAAG,GACHC,WAAW,OACXC,cAAc,OACdvF,QAASA,EACTwF,UAfmD,SAAC3B,GACxC,UAAVA,EAAE/E,KACJkB,KAcAyF,GAAI,EACJjJ,IAAKA,EACLkJ,KAAK,SACLC,GAAI,CAAE,iBAAkB,CAAElJ,GAAI,aAC9BmJ,SAAU,GACNrJ,GAdN,aAgBG7C,QAMTuL,EAAWnI,YAAc,c,uWCHrB+I,EClC4BC,E,0JCU1BC,EAAc,6BAEPC,EAAsC,WAAO,IAAD,EACvD,EAA4BC,YAAc,CACxCC,cAAe7D,KAAK8D,MAAL,UACb9N,OAAO+N,eAAezI,QAAQoI,UADjB,QACiC,QAEhDM,QAAS,kBAAMhO,OAAO+N,eAAe5H,QAAQuH,EAAa,YAJpDO,EAAR,EAAQA,OAAQD,EAAhB,EAAgBA,QAOhB,OACE,cAAC,IAAD,CAAKhB,EAAE,cAAP,SACE,cAAC,IAAD,CAAUkB,GAAID,EAAd,SACE,eAACjK,EAAA,EAAD,CACE,aAAW,iBACXI,GAAG,WACHC,OAAO,OACPE,UAAU,OACVgD,MAAM,QACN4G,GAAI,EACJC,GAAI,EACJ5J,EAAG,EACH6J,SAAS,WACThB,KAAK,cAVP,UAYE,cAACiB,EAAA,EAAD,CAAiBtB,EAAG,EAAGuB,KAAM,EAAGF,SAAS,WAAWG,IAAK,EAAGC,EAAG,IAC/D,eAAC,IAAD,CAAM1B,SAAS,KAAKqB,GAAI,EAAGM,UAAU,SAArC,qHAEsC,IACpC,cAACC,EAAA,EAAD,CACEpH,MAAM,UACNqH,YAAY,EACZ3N,KAAK,yDACL4N,eAAe,YAJjB,qBASF,cAAC,IAAD,CACE,aAAW,iBACXvG,YAAY,QACZwG,KAAM,cAACC,EAAA,EAAD,IACNpH,QAASqG,EACTK,SAAS,WACTW,MAAO,EACPC,KAAK,KACLT,IAAK,EACLhH,QAAQ,kB,4EClDP0H,EAAsB,WAClB,IAAI3M,gBAAgBvC,OAAOgB,SAASqB,QAClBwD,IAAI,OH8B1BsJ,EAAU,uCAAG,sBAAAC,EAAA,+EACjB,IAAIC,SAAc,SAACC,EAASC,GAEjCvP,OAAOwP,iBAAiB,OAAxB,sBAAgC,gCAAAJ,EAAA,sEAEtBxO,EAA6B,CACjC6O,OAAQzP,OAAOgB,SAASgB,SACxBoB,SAAUsM,UAAUtM,SACpBuM,cAAeT,KALW,SASK,mCATL,gBASpBU,EAToB,EASpBA,eACRpC,EAAWoC,EAAehP,GAE1B0O,IAZ4B,kDAc5BC,EAAO,EAAD,IAdsB,+DAHV,2CAAH,qDAyBjBM,EACJ,SAA6BC,GAA7B,OACA,WAAoE,IAAD,EACjE,IAAKtC,EACH,MAAM,IAAIuC,MAAM,uCAIlB,OAAQ,EAAAvC,GAASsC,GAAV,qBAMEE,EAASH,EAAc,UAIvBI,EAAwBJ,EAAc,yBAItCK,EAAmBL,EAAc,oBAIjCM,EAAmBN,EAAc,oBAIjCO,EAAaP,EAAc,cIvFhCV,EAA6BkB,EAAdC,EAAvB,YAAqCD,EAArC,gBAEME,EAAoBlR,wBAAyC,IAItDmR,EAAwC,SAAC,GAAkB,IAAhBhR,EAAe,EAAfA,SACtD,EAA8BsG,oBAAS,GAAvC,mBAAO2K,EAAP,KAAgBC,EAAhB,KA0BA,OAxBA1K,qBAAU,WACR,IAAI2K,GAAc,EAiBlB,OAfAxB,IACGyB,MAAK,WACCD,IACHL,EAAUL,wBACVS,GAAW,OAGdG,OAAM,SAACrF,GACNsF,QAAQvH,MAAMiC,GAETmF,GACHD,GAAW,MAIV,WACLC,GAAc,EACdD,GAAW,MAEZ,IAGD,cAACH,EAAkB/P,SAAnB,CAA4BC,MAAOgQ,EAAUH,EAAY,GAAzD,SACG9Q,K,gBCnCMuR,EAAqC,CAChDC,cAAe,CACblE,QAAS,oBACTnL,IAAK,wCACLsP,OAAQ,iBAEVC,QAAS,CACPpE,QAAS,UACTnL,IAAK,kCACLsP,OAAQ,WAEV7E,WAAY,CACVU,QAAS,aACTnL,IAAK0B,IAAO+I,WACZ6E,OAAQ,aACRE,YAAY,GAEdC,MAAO,CACLtE,QAAS,QACTnL,IAAK,gCACLsP,OAAQ,U,gBClBG7K,EARCC,YAAc,SAAD,CAC3B,YACA,QACA,aACA,iBAJ2B,mBAKxB7D,OAAO6O,OAAON,GAAcnJ,KAAI,qBAAGqJ,aCE3BK,EAAyC,WACpD,IAAQpB,EHEyBvP,qBAAW4P,GGFpCL,iBAER,OACE,eAAC,IAAD,CACEqB,MAAM,SACNtK,GAAG,SACH7C,GAAG,WACHmD,MAAM,QACN,cAAanB,EAAQoL,UACrBC,UAAU,SACVC,QAAQ,SACRC,GAAI,EARN,UAUE,cAAC,IAAD,CAAYC,UAAW,EAAGC,QAAS,CAAC,EAAG,EAAG,GAAI,cAAazL,EAAQ0L,MAAnE,SACGtP,OAAOC,QAAQsO,GAAcnJ,KAC5B,WAAqDmK,GAArD,uBAAEtL,EAAF,YAASqG,EAAT,EAASA,QAAT,IAAkBqE,kBAAlB,SAAqCF,EAArC,EAAqCA,OAAQtP,EAA7C,EAA6CA,IAA7C,OACE,eAAC,IAAD,CACE4P,MAAM,SACNE,UAAW,CAAEtP,KAAM,SAAU6G,GAAI,OAFnC,UAME,cAAC,IAAD,CACE8D,QAAS,CAAE3K,KAAM,OAAQ6G,GAAc,IAAV+I,EAAc,UAAY,QACvD/E,EAAG,EAFL,SAIE,cAAC,IAAD,CAAS7F,YAAY,QAAQ6K,GAAI,EAAGC,YAAY,eAEjDd,EACC,cAACxC,EAAA,EAAD,CACEpH,MAAM,eACN,cAAanB,EAAQ6K,GACrBrC,YAAY,EACZ3N,KAAMU,EACNsL,WAAY,GACZmB,GAAG,OANL,SAQGtB,IAGH,cAACoF,EAAA,EAAD,CACE3K,MAAM,eACN,cAAanB,EAAQ6K,GACrBhE,WAAY,GACZmB,GAAG,OACH+D,GAAIxQ,EALN,SAOGmL,IAIL,cAAC,IAAD,CACEA,QAAS,CACP3K,KAAM,OACN4G,GAAIgJ,EAAQ,EAAI,UAAY,OAC5B/I,GAAI,QAENyF,EAAE,OANJ,SAQE,cAAC,IAAD,CAAStH,YAAY,cAxClBV,QA8Cb,cAAC,IAAD,CAAM,cAAaL,EAAQgM,WAAYrF,SAAS,KAAKoB,GAAI,EAAzD,SF3CoB,wDE8CpB,cAAC,IAAD,CACE5G,MAAM,QACN,cAAanB,EAAQiM,cACrBtF,SAAS,KACTuF,WAAW,SACXnE,GAAI,EACJxG,QAASuI,EACT1I,QAAQ,OAPV,gC,OC7EO+K,GAA4B,CACvC,CAAEzF,QAAS,MAAO0F,WAAW,EAAM7Q,IAAK,QACxC,CACEmL,QAAS,0BACTnL,IAAK,4CAEP,CACEmL,QAAS,mBACTnL,IAAK,oDAII8Q,GAAwB,CACnC,CACE3F,QAAS,UACTgF,MAAO,CACL,CAAEhF,QAAS,OAAQnL,IAAK,+BACxB,CACEmL,QAAS,kBACTnL,IAAK,qEAEP,CAAEmL,QAAS,WAAYnL,IAAK,4BAC5B,CACEmL,QAAS,iBACTnL,IAAK,uGAIX,CACEmL,QAAS,oBACTgF,MAAO,CACL,CACEhF,QAAS,kBACTnL,IAAK,yDAEP,CACEmL,QAAS,YACTnL,IAAK,6DAIX,CACEmL,QAAS,qBACTgF,MAAO,CACL,CAAEhF,QAAS,OAAQnL,IAAK,oBACxB,CACEmL,QAAS,kBACTnL,IAAK,gDAEP,CAAEmL,QAAS,gBAAiBnL,IAAK,gCACjC,CACEmL,QAAS,gBACTnL,IAAK,uDAIX,CACEmL,QAAS,YACTgF,MAAO,CACL,CACEhF,QAAS,QACTnL,IAAK,qFAEP,CAAEmL,QAAS,gBAAiBnL,IAAK,sB,0BC5D1B+Q,GAAiD,SAAC,GAGxD,IAFLlT,EAEI,EAFJA,SACGmT,EACC,kBACJ,OACE,cAAC,KAAD,yBAAMrK,YAAY,WAAWtB,SAAS,SAAY2L,GAAlD,aACGnT,M,sBCMDoT,GAAiC,SAAC,GAAD,IAAG9F,EAAH,EAAGA,QAAS0F,EAAZ,EAAYA,UAAW7Q,EAAvB,EAAuBA,IAAvB,OACrC6Q,EACE,cAACN,EAAA,EAAD,CAAS3K,MAAM,WAAW4K,GAAIxQ,EAA9B,SACGmL,IAGH,cAAC6B,EAAA,EAAD,CACE9B,WAAW,SACXC,QAAQ,OACR8B,YAAY,EACZ3N,KAAMU,EACNkR,eAAe,gBACfpE,EAAE,OANJ,SAQG3B,KAIMgG,GAAoB7O,cAC/B,WAA0BE,GAAS,IAAhCyC,EAA+B,EAA/BA,MAAU+L,EAAqB,kBAChC,OACE,cAAC,KAAD,2BAAcA,GAAd,IAAyBxO,IAAKA,EAA9B,SACGyC,EAAMgB,KAAI,SAACF,EAAMqL,GAChB,MAAI,UAAWrL,EAEX,eAAC,WAAD,WACE,cAAC,KAAD,CAAW6J,MAAM,OAAOyB,MAAOtL,EAAKoF,QAApC,SACGpF,EAAKoK,MAAMlK,KAAI,SAACqL,EAAMC,GAAP,OACd,cAAC,KAAD,UACE,cAAC,GAAD,eAAUD,KADZ,UAAkBA,EAAKnG,QAAvB,YAAkCoG,SAKrCH,IAAQnM,EAAMkD,OAAS,GAAK,cAAC,KAAD,MAR/B,UAAkBpC,EAAKoF,QAAvB,YAAkCiG,IAcpC,cAAC,KAAD,UACE,cAAC,GAAD,eAAUrL,KADZ,UAAkBA,EAAKoF,QAAvB,YAAkCiG,a,0BChDjCI,GAAoBlP,cAC/B,WAAyBE,GAAS,IAA/B3E,EAA8B,EAA9BA,SAAa0E,EAAiB,kBAC/B,OACE,cAAC,KAAD,yBACE+C,GAAIC,IACJK,MAAM,WACN+K,WAAW,MACXnO,IAAKA,EACLkD,UAAW,cAACC,GAAA,EAAD,CAAiB0F,EAAG,EAAGyB,EAAG,IACrCQ,KAAK,KACLzH,QAAQ,QACJtD,GARN,aAUG1E,QCLM4G,GAdCC,YAAc,SAAU,CACtC,YACA,QACA,wBACA,qBACA,mBACA,gBACA,UACA,WACA,eACA,aACA,cCJW+M,GAAmC,kBAC9C,eAAC,GAAD,WACE,cAACD,GAAD,CAAmB,cAAa/M,GAAQiN,sBAAxC,6BAGA,cAACP,GAAD,CACE,cAAa1M,GAAQkN,mBACrB1M,MAAO2L,S,iDCPAgB,GAA+B,WAC1C,OACE,eAAC,GAAD,WACE,cAACJ,GAAD,CAAmB,cAAa/M,GAAQoN,iBAAxC,uBAGA,cAACV,GAAD,CACE,cAAa1M,GAAQqN,cACrB7M,MAAO6L,S,UCZFiB,GAA2B,kBACtC,cAAC,KAAD,CAASzM,GAAG,KAAKM,MAAM,WAAW,cAAanB,GAAQ4M,MAAO/D,KAAK,KAAnE,SACE,eAAC,IAAD,CAAMkD,GAAG,IAAT,UACE,cAAC,IAAD,CAAKlL,GAAG,OAAOM,MAAM,WAArB,uBAEO,IAHT,YCaSoM,GAA+C,SAAC,GAGtD,IAFL1F,EAEI,EAFJA,OACAD,EACI,EADJA,QAEA,OACE,cAAC,KAAD,UACE,eAAC,KAAD,CAAQC,OAAQA,EAAQD,QAASA,EAAS4F,UAAU,OAAO3E,KAAK,KAAhE,UACE,cAAC,KAAD,IACA,eAAC,KAAD,CAAe,cAAa7I,GAAQyN,UAApC,UACE,cAAC,KAAD,IACA,cAAC,KAAD,CAAc/G,QAAQ,OAAO+F,eAAe,SAA5C,SACE,cAAC,GAAD,MAEF,cAAC,KAAD,UACE,eAAC,KAAD,CAAOtB,MAAM,QAAQG,QAAQ,QAAQoC,QAAS,EAA9C,UACE,cAAC,GAAD,IACA,cAAC,GAAD,kBC9BDC,GAA+B,WAC1C,IAAMC,EAAMpG,cAEZ,OACE,qCACE,cAAC,IAAD,CACE,aAAW,kBACXtJ,aAAa,KACb,cAAa8B,GAAQ6N,QACrBnH,QAAS,CAAE9D,GAAI,QACf8F,KAAM,cAACoF,GAAA,EAAD,IACNvM,QAASqM,EAAIG,OACb3M,QAAQ,UAEV,cAAC,GAAD,eAAewM,Q,yFChBN5N,GAFCC,YAAc,cAAe,CAAC,c,gBC4BjC+N,GAAmD,SAAC,GAG1D,IAFLnG,EAEI,EAFJA,OACAD,EACI,EADJA,QAEQzC,EAAS5F,cAAT4F,KACR,EAA0BhG,eAAnB8O,EAAP,oBACA,EAAmDlJ,eAAjCmJ,EAAlB,EAAQ7L,SAA6B8L,EAArC,kBACA,EAA4BlI,aAAY,CACtCnJ,MAAOqR,EAAUrR,MACjBE,SAAUmR,EAAUnR,WAFdF,EAAR,EAAQA,MAAOE,EAAf,EAAeA,SAKP2H,EAAgB7B,aAAkB,CACxCC,MAAO,EACPhG,OAAQ,EACRD,QACAE,aAJM2H,YAOFyJ,GAAetR,GAASE,IAAa2H,EAAYjB,OAAS,EAC1D2K,EAAW7U,iBAAyB,MAY1C,OACE,cAAC,KAAD,UACE,cAAC,KAAD,CAAO8U,gBAAiBD,EAAUxG,OAAQA,EAAQD,QAASA,EAA3D,SACE,cAAC,KAAD,UACE,eAAC,KAAD,CAAc,cAAa5H,GAAQoL,UAAnC,UACE,cAAC,KAAD,IACA,cAAC,KAAD,0CACA,eAAC,KAAD,WACE,cAAC9I,GAAA,EAAD,CAAMD,SAbkC,SAAC+C,GACnDwC,IACAsG,EAAe9I,IAWqBmJ,GAAI,EAA9B,SACE,cAAC,KAAD,CAAOb,QAAS,EAAhB,SACE,cAACtL,GAAA,EAAD,aAAqBrE,IAAKsQ,GAAcF,QAG3CC,GACC,qCACE,cAAC,IAAD,IACA,cAAC,KAAD,CAASzH,SAAS,KAAK6H,GAAI,EAAGlG,UAAU,SAAxC,yBAGA,cAAC,KAAD,UACG3D,EAAYnD,KAAI,SAACiN,GAAD,OACf,cAACjI,GAAA,EAAD,CAEEvL,KAAMwT,EAAIxT,KACVsG,QAAS,kBAlCbwK,EAmCe,GAAD,OACH9O,IAAOS,SADJ,YACgB+Q,EAAIxT,KADpB,cAC8BwT,EAAIjR,QADlC,YAEJL,IAAaE,SAFT,mBAGFL,QAHE,IAGFA,IAAYiR,GArCxCrG,SACAzC,EAAK4G,GAFU,IAACA,IAgCS0C,EAAIxT,2BC5EpByT,GAAkC,WAC7C,IAAMC,EAAcnH,cACZnO,EAAaC,cAAbD,SAER,MAAI,CAAC4D,IAAO8I,KAAM9I,IAAOC,QAAQ0R,MAAK,SAACC,GAAD,OAAUA,IAASxV,KAChD,KAIP,qCAEE,cAAC,IAAD,CACE8R,MAAM,SACNhK,MAAM,WACNe,YAAY,OACZ,cAAalC,GAAQ8O,aACrBpI,QAAS,CAAE3K,KAAM,OAAQ6G,GAAI,QAC7BsJ,WAAW,SACXO,eAAe,gBACfsC,EAAE,SACFC,KAAK,QACLzN,QAASoN,EAAYZ,OACrB9M,UAAW,cAACgO,GAAA,EAAD,CAAY9N,MAAM,WAAW+N,GAAI,IAC5C9N,QAAQ,UACRiH,EAAE,OAbJ,kCAkBA,cAAC,IAAD,CACE,aAAW,cACXnK,aAAa,KACb,cAAa8B,GAAQmP,WACrBzI,QAAS,CAAE3K,KAAM,UAAW6G,GAAI,QAChC8F,KAAM,cAACuG,GAAA,EAAD,CAAY9N,MAAM,aACxBI,QAASoN,EAAYZ,OACrB3M,QAAQ,UAEV,cAAC,GAAD,eAAiBuN,QCrCjBS,GAA+C,SAACtR,GAAD,OACnD,cAAC,IAAD,aAAUqN,MAAM,SAASG,QAAQ,SAAS+D,SAAU,GAAOvR,KAGhDwR,GAA4B,WACvC,OACE,eAAC,IAAD,CACE7I,WAAW,SACX5F,GAAG,SACH7C,GAAG,QACHG,UAAU,OACV,cAAa6B,GAAQoL,UACrB3I,IAAK,EACL8M,oBAAqB,CACnBxT,KAAM,cACN6G,GAAI,6CAEN4M,iBAAiB,MACjBR,KAAK,QACL/G,SAAS,SACTjB,GAAI,EACJuE,GAAI,EACJnD,IAAK,EACLC,EAAE,OACFoH,OAAO,SAlBT,UAqBE,cAAC,GAAD,CACEC,SAAU,CAAE3T,KAAM,EAAG6G,GAAI,GACzB+M,YAAa,CAAE5T,KAAM,SAAU6G,GAAI,SAFrC,SAIE,cAAC,GAAD,MAIF,cAAC,GAAD,CACE8M,SAAU,CAAE3T,KAAM,EAAG6G,GAAI,GACzB+M,YAAa,CAAE5T,KAAM,MAAO6G,GAAI,WAFlC,SAIE,cAAC,GAAD,MAIF,eAAC,GAAD,CACE8M,SAAU,CAAE3T,KAAM,EAAG6G,GAAI,GACzB+M,YAAa,CAAE5T,KAAM,QAAS6G,GAAI,OAFpC,UAIE,eAAC,IAAD,CACE8D,QAAS,CAAE3K,KAAM,OAAQ6G,GAAI,QAC7BH,IAAK,EACL8M,oBAAoB,UACpBC,iBAAiB,MACjBI,WAAW,SACXvH,EAAE,OANJ,UAQE,cAAC,IAAD,UACE,cAAC,GAAD,MAEF,cAAC,IAAD,UACE,cAAC,GAAD,SAGJ,cAAC,GAAD,W,oBCpEKwH,GAAgC,kBAC3C,cAAC,KAAD,UACE,cAAC,KAAD,CAAShH,KAAK,U,iBCiBLiH,GAA+C,SAAC,GAAD,IAC/CC,EAD+C,EAC1DC,UACGC,EAFuD,yBAI1D,cAAC,IAAD,2BAAWA,GAAX,aACE,cAAC,WAAD,CAAUC,SAAU,cAAC,GAAD,IAApB,SACE,cAACH,EAAD,U,SCjBAjK,GAAMqK,gBAAK,kBAAM,wDACjBC,GAAOD,gBAAK,kBAAM,8DAClBE,GAAeF,gBAAK,kBAAM,uDAC1BG,GAAWH,gBAAK,kBAAM,wDACtBI,GAAWJ,gBAAK,kBAAM,qEACtBK,GAAgBL,gBAAK,kBAAM,8DAC3BM,GAAiBN,gBAAK,kBAAM,wDAC5BO,GAAYP,gBAAK,kBAAM,wDAEhBQ,GAAyB,WAAO,IAAD,EAC1C,EAA0BC,eAAlB3N,EAAR,EAAQA,KAAMC,EAAd,EAAcA,QACR2N,EAAY,iBAAG5N,QAAH,IAAGA,OAAH,EAAGA,EAAM4N,oBAAT,QAAyB,GACrCC,GAAyB,OAAZD,QAAY,IAAZA,OAAA,EAAAA,EAAcE,gBAAd,OAA8BF,QAA9B,IAA8BA,OAA9B,EAA8BA,EAAcG,gBAE/D,OACE,eAAC,IAAD,CACEnQ,GAAG,OACH7C,GAAG,YACHuR,oBAAoB,MACpBC,iBAAiB,qBACjB5I,EAAE,OACFqK,MAAO,EACPjC,KAAK,QACLkC,SAAS,cACTjJ,SAAS,QATX,UAWE,cAAC,GAAD,IACE/E,GAAY4N,EAAoC,wBAAvB,cAAC,EAAD,IAC1B5N,EACC,cAAC,GAAD,IAEA,eAAC,IAAD,WACE,cAAC,GAAD,CAAW8M,UAAWlK,GAAKqL,OAAK,EAACtC,KAAM5R,IAAO6I,MAC9C,cAAC,GAAD,CACEkK,WAAuB,OAAZa,QAAY,IAAZA,OAAA,EAAAA,EAAcE,cAAeV,GAAeD,GACvDe,OAAK,EACLtC,KAAM5R,IAAO8I,OAEf,cAAC,GAAD,CAAWiK,UAAWU,GAAWS,OAAK,EAACtC,KAAM5R,IAAO+I,aACpD,cAAC,GAAD,CAAWgK,UAAWO,GAAU1B,KAAM5R,IAAOS,WAC7C,cAAC,GAAD,CACEsS,WACc,OAAZa,QAAY,IAAZA,OAAA,EAAAA,EAAcG,gBAAiBP,GAAiBD,GAElDW,OAAK,EACLtC,KAAM5R,IAAOC,SAEf,cAAC,GAAD,CAAW8S,UAAWM,GAAUzB,KAAK,SAGzC,cAAC,EAAD,Q,yDC1DgB9S,GAClBqV,SADFC,WAAcC,KAGHA,GAAI,2BACZvV,IADY,IAEfwV,SAAS,2BACJxV,GAAKwV,UADF,IAEN,aAAa,2BACRxV,GAAKwV,SAASC,QADnB,IAEE9K,QAAS,QACT+K,WAAY,YCNZC,GACJ,SACEtQ,EACAuQ,GAFF,OAIA,SAAC7T,GACC,IAAM8T,EAA6B,oBAAZxQ,EAAyBA,EAAQtD,GAASsD,EACjE,OAAO,2BACFwQ,GADL,IAEExG,UAAU,2BACLwG,EAAQxG,WACRuG,OAMU5V,GACjBqV,SADFC,WAAcQ,IAGHA,GAAG,2BACX9V,IADW,IAEd+V,UAAW,CACT1G,UAAW,CACTc,WAAY,WAGhBqF,SAAS,2BACJxV,GAAKwV,UADF,IAENC,OAAQE,GAAc3V,GAAKwV,SAASC,OAAQ,CAC1CO,WAAY,UACZ5Q,MAAO,aAET6Q,SAAUN,GAAc3V,GAAKwV,SAASC,OAAQ,CAC5CO,WAAY,yBACZ5Q,MAAO,gBCrCAkQ,GAAU,2BAClBD,SAAMC,YADY,IAErBC,QACAW,QCPqB,CACrBC,aAAc,CACZnR,YAAa,4BDMf8Q,SEHWM,GAAc,CACzBC,QCPqB,CACrBrW,KAAM,qCDONsW,OENiB,2BACdjB,SAAMiB,QADQ,IAEjBC,KAAM,CACJ,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WAEPC,UAAW,YFPXC,MGTmB,CACnBC,KAAM,WHSNC,MIRmB,CACnBtH,UAAW,CACT,MAAO,WJOTuH,QKXqB,CACrB5W,KAAM,0CCGKqV,GAAQwB,aAAY,2BAC5BT,IAD2B,IAE9Bd,iBCFWwB,GAA2B,SAAC,GAAkB,IAAhBzZ,EAAe,EAAfA,SACzC,OACE,cAAC,KAAD,CAAgB0Z,UAAQ,EAAC1B,MAAOA,GAAhC,SACGhY,KCOD2Z,GAAcC,QACW,cAA7BpZ,OAAOgB,SAASgB,UACe,UAA7BhC,OAAOgB,SAASgB,UAChBhC,OAAOgB,SAASgB,SAASH,MACvB,2DASAwX,GAAkB,SAACC,EAAeC,GACtC7J,UAAU8J,cACPC,SAASH,GACT1I,MAAK,SAAC8I,GACLA,EAAaC,cAAgB,WAC3B,IAAMC,EAAmBF,EAAaG,WACd,MAApBD,IAGJA,EAAiBE,cAAgB,WACA,cAA3BF,EAAiBG,QACfrK,UAAU8J,cAAcQ,YAI1BlJ,QAAQmJ,IACN,+GAKEV,GAAUA,EAAOW,UACnBX,EAAOW,SAASR,KAMlB5I,QAAQmJ,IAAI,sCAGRV,GAAUA,EAAOY,WACnBZ,EAAOY,UAAUT,WAO5B7I,OAAM,SAACtH,GACNuH,QAAQvH,MAAM,4CAA6CA,OCrDjE6Q,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAACC,GAAA,EAAD,UACE,cAAC,EAAD,UACE,cAAC,IAAD,UACE,cAACC,GAAA,EAAD,UACE,cAAC,GAAD,UACE,cAACC,GAAA,EAAD,UACE,cAACC,GAAA,EAAD,UACE,cAAC,GAAD,oBAShBva,SAASwa,eAAe,SrC7BpBlN,GAAeA,aAAuBmN,UACxC,+BAAqBhK,MACnB,YAAkD,IAA/CiK,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QACjCJ,EAAOpN,GACPqN,EAAOrN,GACPsN,EAAOtN,GACPuN,EAAOvN,GACPwN,EAAQxN,MAEV,eoCyFkB,SAAC8L,GACvB,GAA6C,kBAAmB7J,UAAW,CAGzE,GADkB,IAAIzN,IAAIiZ,GAAwBlb,OAAOgB,SAASC,MACpDka,SAAWnb,OAAOgB,SAASma,OAIvC,OAGFnb,OAAOwP,iBAAiB,QAAQ,WAC9B,IAAM8J,EAAK,UAAM4B,GAAN,sBAEP/B,KA5CsB,SAACG,EAAeC,GAE9C6B,MAAM9B,EAAO,CACX+B,QAAS,CAAE,iBAAkB,YAE5BzK,MAAK,SAAC0K,GAEL,IAAMC,EAAcD,EAASD,QAAQxV,IAAI,gBAEnB,MAApByV,EAASE,QACO,MAAfD,IAA8D,IAAvCA,EAAYE,QAAQ,cAGvC/L,UAAU8J,cAActZ,MAAM0Q,MAAK,SAAC8I,GAClCA,EAAagC,aAAa9K,MAAK,WAClC5Q,OAAOgB,SAAS2a,eAKpBtC,GAAgBC,EAAOC,MAG1B1I,OAAM,WACLC,QAAQmJ,IACN,oEAqBA2B,CAAwBtC,EAAOC,GAI1B7J,UAAU8J,cAActZ,MAAM0Q,MAAK,WACtCE,QAAQmJ,IACN,+GAKJZ,GAAgBC,EAAOC,OCvF/BE,I,kNCjCY9U,E,wCAAAA,K,gBAAAA,E,wBAAAA,E,gBAAAA,E,YAAAA,E,aAAAA,M,KAWL,IAAMkX,EAAiC,CAC5ClX,EAASC,WACTD,EAASmX,OACTnX,EAASoX,KACTpX,EAASqX,GACTrX,EAASsX,QAGEzV,GAAyD,mBACnE7B,EAASC,WAAa,cAD6C,cAEnED,EAASmX,OAAS,UAFiD,cAGnEnX,EAASoX,KAAO,QAHmD,cAInEpX,EAASqX,GAAK,MAJqD,cAKnErX,EAASsX,OAAS,QALiD,GAQzDjX,EAAkD,IAAIkX,IAAI,CACrEvX,EAASmX,OACTnX,EAASC,aAGEuX,GAKZ,mBACExX,EAASC,WAAa,CACrBvD,KAAMmF,EAAkB4V,WACxBtN,KC7C2D,SAAC5K,GAC9D,OACE,eAAC,IAAD,2BACMA,GADN,IAEE,cAAY,OACZmY,UAAU,cACVC,QAAQ,cAJV,UAME,sBAAMC,EAAE,sBAAsBC,KAAK,YACnC,sBACED,EAAE,olCACFC,KAAK,gBD+BZ,cAKE7X,EAASmX,OAAS,CACjBza,KAAMmF,EAAkBiW,OACxB3N,KEjD+D,SAAC5K,GAClE,OACE,eAAC,IAAD,2BAAUA,GAAV,IAAiBN,QAAQ,MAAM0Y,QAAQ,sBAAvC,UACE,iCACE,iCAAgBI,GAAG,IAAnB,UACE,sBAAMvZ,OAAO,IAAIwZ,UAAU,YAC3B,sBAAMxZ,OAAO,IAAIwZ,UAAU,eAE7B,gCACEC,cAAc,iBACdF,GAAG,IACHG,GAAG,SACHC,GAAG,UACHC,UAAU,KACVC,GAAG,UACHC,GAAG,YAEL,iCAAgBP,GAAG,IAAnB,UACE,sBAAMvZ,OAAO,IAAIwZ,UAAU,YAC3B,sBAAMxZ,OAAO,IAAIwZ,UAAU,eAE7B,gCACEC,cAAc,iBACdF,GAAG,IACHG,GAAG,SACHC,GAAG,UACHC,UAAU,KACVC,GAAG,QACHC,GAAG,eAGP,oBAAG1V,MAAM,OAAT,UACE,sBACEgV,EAAE,6WACFC,KAAK,UACLlF,SAAS,UACT4F,MAAO,CAAEC,OAAQ,QACjBd,UAAU,+BAEZ,sBACEE,EAAE,qYACFC,KAAK,UACLlF,SAAS,UACT4F,MAAO,CAAEC,OAAQ,QACjBd,UAAU,yCFFnB,cASE1X,EAASoX,KAAO,CACf1a,KAAMmF,EAAkB4W,KACxBtO,KGrD6D,SAAC5K,GAChE,OACE,eAAC,IAAD,2BACMA,GADN,IAEE,cAAY,OACZmY,UAAU,cACVC,QAAQ,cAJV,UAME,sBACEC,EAAE,mTACFC,KAAK,YAEP,sBACED,EAAE,0JACFC,KAAK,YAEP,sBACED,EAAE,2oBACFC,KAAK,YAEP,sBACED,EAAE,gKACFC,KAAK,YAEP,sBACED,EAAE,8JACFC,KAAK,mBHgBZ,cAaE7X,EAASqX,GAAK,CACb3a,KAAMmF,EAAkB6W,OACxBvO,KIzD2D,SAAC5K,GAC9D,OACE,cAAC,IAAD,2BACMA,GADN,IAEE,cAAY,OACZmY,UAAU,cACVC,QAAQ,cAJV,SAME,sBACEC,EAAE,09DACFC,KAAK,kBJgCZ,cAiBE7X,EAASsX,OAAS,CACjB5a,KAAMmF,EAAkB8W,OACxBxO,KK7D+D,SAAC5K,GAClE,OACE,cAAC,IAAD,2BACMA,GADN,IAEE,cAAY,OACZmY,UAAU,cACVC,QAAQ,YAJV,SAME,sBACEC,EAAE,+eACFC,KAAK,kBLgCZ,I,gMM1BY7N,EAAe1K,aAC1B,WAUEE,GACI,IATF3E,EASC,EATDA,SASC,IARD+d,eAQC,aAPD3O,kBAOC,SAND3N,EAMC,EANDA,KACA0G,EAKC,EALDA,QACA6V,EAIC,EAJDA,SACGtZ,EAGF,iBACGuZ,EAAaC,cAEfC,EAAM,sBAMV,OAJI/O,GAAc4O,KAChBG,GAAO,aAIP,eAAC,IAAD,yBACEpW,MAAM,WACNtG,KAAMA,EACNkQ,YAAU,EACVxJ,QAASiH,EAAa6O,EAAW,CAAExc,OAAM0G,YAAaA,EACtDxD,IAAKA,EACLwZ,IAAKA,GACDzZ,GAPN,cASG1E,EATH,IASc+d,GAAW,cAAC5O,EAAA,EAAD,CAAkBiP,GAAI,EAAGtI,GAAI,WAM5D3G,EAAalK,YAAc,gB,gCCpD3B,kCAIO,IAAM4B,EAAgB,SAC3BwX,EACAC,GAF2B,OAI3BA,EAAIC,QAA+B,SAACC,EAAKC,GAEvC,OADAD,EAAIC,GAAJ,UAAeJ,EAAf,YAAwBI,GACjBD,IACN,M,qGCRQ9L,EAA2C,SAAChO,GACvD,OAAO,cAAC,IAAD,aAAY+C,GAAIiX,KAAgBha,M,oGCJ5BwE,EAAOzE,aAA8B,SAACC,EAAOC,GAAR,OAChD,cAAC,IAAOwE,KAAR,2BAAiBzE,GAAjB,IAAwBC,IAAKA,QAG/BuE,EAAKjE,YAAc,Q,uJCkBN0Z,EAAa,uCAAG,4BAAA/O,EAAA,sEACJgM,MAAMxP,IAAUE,gBADZ,WACrBwP,EADqB,QAGb8C,GAHa,sBAIzBtN,QAAQvH,MAAM+R,EAAS+C,YACjB,IAAItO,MAAJ,0CAA6CuL,EAAS+C,aALnC,gCAQpB/C,EAASgD,QARW,2CAAH,qD,eCtBpBC,EAAiBlf,wBAA4C,CACjEiK,SAAS,EACTD,UAAMmV,EACNjV,WAAOiV,IAGIpV,EAAa,kBAAMzI,qBAAW4d,IAE9BE,EAAqC,SAAC,GAAkB,IAAhBjf,EAAe,EAAfA,SACnD,EAA2Ckf,YAAWP,GAAtD,mBAAOQ,EAAP,KAAwBC,EAAxB,KAMA,OAJA5Y,qBAAU,WACH2Y,MACJ,CAACA,IAGF,cAACJ,EAAe/d,SAAhB,CAAyBC,MAAOme,EAAhC,SACGpf,M,uJCHDqf,EAAwB,GAEjBC,EAAW,uCAAG,4BAAA1P,EAAA,sEACFgM,MAAMxP,IAAUK,QADd,WACnBqP,EADmB,QAGX8C,GAHW,uBAIvBtN,QAAQmJ,IAAI,4DAJW,kBAKhB4E,GALgB,gCAQlBvD,EAASgD,OAAOzN,OAAM,SAACkO,GAG5B,OAFAjO,QAAQvH,MAAMwV,GACdjO,QAAQmJ,IAAI,iDACL4E,MAXgB,2CAAH,qD,eChBlBG,EAAgB3f,wBAA0C,CAC9DiK,SAAS,EACTD,UAAMmV,EACNjV,WAAOiV,IAGIxH,EAAY,kBAAMrW,qBAAWqe,IAE7BC,EAAoC,SAAC,GAAkB,IAAhBzf,EAAe,EAAfA,SAClD,EAAwCkf,YAAWI,GAAnD,mBAAOI,EAAP,KAAsBC,EAAtB,KAMA,OAJAnZ,qBAAU,WACHkZ,MACJ,CAACA,IAGF,cAACF,EAAcxe,SAAf,CAAwBC,MAAO0e,EAA/B,SACG3f,M,6GCQMkf,EAAa,SACxBU,GAEyB,IADzBxe,EACwB,uDADuB,GAEvCye,EAAqCze,EAArCye,aAAclF,EAAuBvZ,EAAvBuZ,UAAWmF,EAAY1e,EAAZ0e,QAEjC,EAA8BxZ,oBAAS,GAAvC,mBAAOwD,EAAP,KAAgBiW,EAAhB,KACA,EAAwBzZ,mBAAuCuZ,GAA/D,mBAAOhW,EAAP,KAAamW,EAAb,KACA,EAA0B1Z,qBAA1B,mBAAOyD,EAAP,KAAckW,EAAd,KAEMC,EAAa9f,kBAAO,GAE1BoG,qBAAU,WAGR,OAFA0Z,EAAW3f,SAAU,EAEd,WACL2f,EAAW3f,SAAU,KAEtB,IAEH,IAAM4f,EAAgB9f,sBAAW,sBAC/B,wCAAAuP,EAAA,yDACOsQ,EAAW3f,QADlB,wDAGEwf,GAAW,GACXE,OAASjB,GAJX,kBAOsBY,EAAS,WAAT,KAPtB,OAOUQ,EAPV,OAQa,OAATzF,QAAS,IAATA,KAAYyF,GAERF,EAAW3f,UACbyf,EAAQI,GACRL,GAAW,IAZjB,kDAeIzO,QAAQvH,MAAR,MACO,OAAP+V,QAAO,IAAPA,KAAO,MAEHI,EAAW3f,UACbyf,EAAQH,GACRI,EAAS,EAAD,IACRF,GAAW,IArBjB,0DA0BA,CAACD,EAASnF,IAGZ,OAAOtZ,mBACL,iBAAM,CACJ8e,EACA,CACEtW,OACAC,UACAC,YAGJ,CAACoW,EAAetW,EAAMC,EAASC,M,sIC5EtBsW,EACX,iC,oECmBWC,EACX,SAAC,GAAuD,IAArD7e,EAAoD,EAApDA,KAAMgN,EAA8C,EAA9CA,OAAQtG,EAAsC,EAAtCA,QAASqG,EAA6B,EAA7BA,QAAS+R,EAAoB,EAApBA,cAEjC,EAA8Cja,oBAAS,GAAvD,mBAAOka,EAAP,KAAwBC,EAAxB,KA+BA,OACE,cAAC,IAAD,CAAOC,qBAAqB,EAAOjS,OAAQA,EAAQD,QAASA,EAA5D,SACE,cAAC,IAAD,UACE,eAAC,IAAD,CAAczG,MAAM,WAApB,UACE,cAAC,IAAD,sBACA,eAAC,IAAD,WACE,cAAC,IAAD,CAAMwF,SAAS,KAAK6Q,GAAI,EAAxB,yDAGA,cAAC,IAAD,CACExZ,GAAG,WACHE,aAAa,KACbiD,MAAM,WACNwF,SAAS,KACT6Q,GAAI,EACJpZ,EAAG,EANL,SAQGvD,IAEH,cAAC,IAAD,CAAUgH,SA/C8C,SAACuD,GACjE,IAAM2U,GAAc3U,EAAEE,OAAO0U,QAC7BH,EAAmBE,IA6CX,gDAIF,eAAC,IAAD,WACE,cAAC,IAAD,CAAQxY,QA/CD,WAEfsY,GAAmB,GACnBjS,KA4CmCxG,QAAQ,QAAnC,oBAIA,cAAC,IAAD,CAAS6Y,UAAQ,EAACC,MAAOrf,EAAM2S,UAAU,MAAzC,SACE,cAAC,IAAD,CACE2J,SAAS,EACT3O,YAAY,EACZ3N,KAAMA,EACNuc,UAAQ,EACR7V,QAnD0C,SAAC6D,GAEvD,IAAKwU,EAAiB,CACpBD,EAAcC,GAEd,IACE3a,aAAac,QACX0Z,EACA7V,KAAKC,UAAU+V,IAEjB,WAGG,OAAPrY,QAAO,IAAPA,KAAU6D,GACVwC,KAgCU,SAOE,cAAC,IAAD,CACE1F,YAAY,OACZgN,GAAI,EACJjO,UAAW,cAACsH,EAAA,EAAD,IACXpB,SAAU,EACV/F,QAAQ,QALV,oCCtFZ+Y,EAA6BlhB,yBACjC,qBAAGsI,WAGQ+V,EAAyB,kBACpC/c,qBAAW4f,IAEAC,EAAiD,SAAC,GAExD,IADLhhB,EACI,EADJA,SAEA,EACEsG,mBAA2C,MAD7C,mBAAO2a,EAAP,KAAoBC,EAApB,KAGA,EAAoC9S,YAAc,CAEhDI,QAAS,WACP0S,EAAgB,SAHZzS,EAAR,EAAQA,OAAQkG,EAAhB,EAAgBA,OAAQnG,EAAxB,EAAwBA,QAQxB,EAAoClI,oBAAS,WAC3C,IAAK,IAAD,EACI6a,EAAK,UACTtb,aAAaC,QAAQua,UADZ,QACoD,OAC/D,OAAO7V,KAAK8D,MAAM6S,GAClB,SACA,OAAO,MANX,mBAAOR,EAAP,KAAmBJ,EAAnB,KAYMtC,EAAa5d,uBACjB,YAAwB,IAArBoB,EAAoB,EAApBA,KAAM0G,EAAc,EAAdA,QACP,IAAKwY,EAAY,OAAOxY,EAQxB,OANsD,SAAC6D,GACrDkV,EAAgB,CAAEzf,OAAM0G,YACxB6D,EAAEC,iBACF0I,OAKJ,CAACA,EAAQgM,IAGX,OACE,eAACI,EAA2B/f,SAA5B,CAAqCC,MAAOgd,EAA5C,UACGje,EACD,cAAC,EAAD,aACEyO,OAAQA,EACRD,QAASA,EACT+R,cAAeA,GACXU,U","file":"static/js/main.e289a3fc.chunk.js","sourcesContent":["import {\n useContext,\n useCallback,\n useRef,\n createContext,\n FunctionComponent,\n} from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { PageViewConfig } from \"./types\";\n\nexport interface AnalyticsAPI {\n trackPageView: (opts: PageViewConfig) => void;\n}\n\nconst AnalyticsContext = createContext<AnalyticsAPI>({\n trackPageView: () => {},\n});\n\nexport const useAnalytics = () => useContext(AnalyticsContext);\n\nexport const AnalyticsProvider: FunctionComponent = ({ children }) => {\n const { pathname } = useLocation();\n\n const prevPath = useRef<null | string>(null);\n\n const trackPageView = useCallback(\n (opts: PageViewConfig) => {\n if (prevPath.current === pathname) {\n return;\n }\n\n window?.AWSMA?.ready?.(() => {\n document.dispatchEvent(\n new CustomEvent(window.AWSMA.TRIGGER_EVENT, { detail: opts })\n );\n\n prevPath.current = pathname;\n });\n },\n [pathname]\n );\n\n return (\n <AnalyticsContext.Provider value={{ trackPageView }}>\n {children}\n </AnalyticsContext.Provider>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useAnalytics } from \"./Analytics\";\nimport type { PageViewOptions, PageViewConfig } from \"./types\";\n\nexport const usePageView = (opts: PageViewOptions) => {\n const { trackPageView } = useAnalytics();\n const { pathname } = useLocation();\n\n const options: PageViewConfig = useMemo(\n () => ({\n page: {\n // This is silly but the analytics library crashes in dev if using localhost as the pageURL :/\n pageURL: window.location.href.replace(\n \"://localhost:3000\",\n \"://constructs.local.dev\"\n ),\n ...opts.page,\n },\n event: {\n type: \"pageview\",\n name: opts.event.name,\n description: opts.event.description,\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [pathname, opts]\n );\n\n const track = useCallback(() => {\n return trackPageView(options);\n }, [trackPageView, options]);\n\n return track;\n};\n","import { Language } from \"../constants/languages\";\nimport { ROUTES, QUERY_PARAMS } from \"../constants/url\";\n\nconst gitSSHRegex = new RegExp(\n /git@github\\.com:([a-zA-Z-]+)+\\/?([a-zA-Z-]+)*(\\.git)?/\n);\n\nexport const getRepoUrlAndHost = (\n repoUrl: string\n): { url: string; hostname: string } | undefined => {\n try {\n let url = repoUrl;\n\n const sshUrl = repoUrl.match(gitSSHRegex);\n\n if (sshUrl) {\n const [, author, repo] = sshUrl;\n\n url = `https://github.com/${author}/${repo}`;\n }\n\n return {\n hostname: new URL(url).hostname,\n url,\n };\n } catch {\n // Invalid URL, return undefined as a signal that we should not display it\n return undefined;\n }\n};\n\nexport type SearchParamsObject = Record<\n string,\n string | number | undefined | null\n>;\n\nexport const createURLSearchParams = (\n params: SearchParamsObject,\n base?: string\n) => {\n const searchParams = new URLSearchParams(base);\n\n Object.entries(params)\n .filter(([, v]) => v != null)\n .forEach(([k, v]) => {\n searchParams.set(k, `${v}`);\n });\n\n return searchParams.toString();\n};\n\nexport const createURL = (base: string, params?: SearchParamsObject) => {\n let url = base;\n\n if (params) {\n const search = createURLSearchParams(params);\n\n if (search) {\n url += `?${search}`;\n }\n }\n\n return url;\n};\n\nexport const getSearchPath = ({\n query,\n offset,\n language,\n}: {\n query?: string;\n offset?: string | number;\n language?: Language | null;\n}) =>\n createURL(ROUTES.SEARCH, {\n [QUERY_PARAMS.SEARCH_QUERY]: query,\n [QUERY_PARAMS.LANGUAGE]: language,\n [QUERY_PARAMS.OFFSET]: offset ?? 0,\n });\n\nexport const getPackagePath = ({\n name,\n version,\n language,\n submodule,\n}: {\n name: string;\n version: string;\n language?: Language;\n submodule?: string;\n}) =>\n createURL(`${ROUTES.PACKAGES}/${name}/v/${version}`, {\n [QUERY_PARAMS.SUBMODULE]: submodule,\n [QUERY_PARAMS.LANGUAGE]: language,\n });\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\n\nexport interface CardProps extends BoxProps {}\n\n/**\n * Implements a <Box /> with simple card styles.\n */\nexport const Card = forwardRef<CardProps, \"div\">((props, ref) => {\n return (\n <Box\n bg=\"white\"\n border=\"base\"\n borderRadius=\"card\"\n boxShadow=\"base\"\n p={2}\n ref={ref}\n {...props}\n />\n );\n});\n\nCard.displayName = \"Card\";\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"catalogSearch\", [\n \"form\",\n \"input\",\n \"languageDropdown\",\n \"languageDropdownMenu\",\n \"languageDropdownValue\",\n \"languageItem\",\n \"submit\",\n] as const);\n\nexport default testIds;\n","import { Button, forwardRef, Input } from \"@chakra-ui/react\";\nimport type { ChangeEventHandler, FunctionComponent } from \"react\";\nimport {\n Language,\n TEMP_SUPPORTED_LANGUAGES,\n LANGUAGE_NAME_MAP,\n} from \"../../constants/languages\";\nimport { Dropdown, DropdownProps } from \"./Dropdown\";\nimport testIds from \"./testIds\";\n\ntype LanguageItems = Partial<Record<Language, string>>;\n\nconst languageOptions = Object.fromEntries(\n Object.entries(LANGUAGE_NAME_MAP).filter(([key]) =>\n TEMP_SUPPORTED_LANGUAGES.has(key as Language)\n )\n) as LanguageItems;\n\nconst LanguageDropdown: FunctionComponent<DropdownProps<LanguageItems>> =\n Dropdown;\n\nexport interface CatalogSearchInputsProps {\n /**\n * Controls the query state value\n */\n query: string;\n /**\n * Controls the query state change event\n */\n onQueryChange: ChangeEventHandler<HTMLInputElement>;\n /**\n * Controls the language state value\n */\n language: Language | null;\n /**\n * Controls the language state change event\n */\n onLanguageChange: (language: Language | null) => void;\n}\n\nexport const CatalogSearchInputs = forwardRef<\n CatalogSearchInputsProps,\n \"input\"\n>(({ query, onQueryChange, language, onLanguageChange }, ref) => (\n <>\n <Input\n bg=\"white\"\n borderColor=\"blue.100\"\n boxShadow=\"base\"\n data-testid={testIds.input}\n name=\"query\"\n onChange={onQueryChange}\n placeholder=\"Search Constructs...\"\n ref={ref}\n value={query}\n />\n <LanguageDropdown\n items={languageOptions}\n onSelect={onLanguageChange}\n placeholder=\"Language...\"\n selected={language}\n testIds={{\n item: testIds.languageItem,\n menu: testIds.languageDropdownMenu,\n trigger: testIds.languageDropdown,\n value: testIds.languageDropdownValue,\n }}\n />\n <Button\n boxShadow=\"base\"\n colorScheme=\"blue\"\n data-testid={testIds.submit}\n type=\"submit\"\n >\n Search\n </Button>\n </>\n));\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Menu,\n MenuButton,\n MenuItem,\n MenuList,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface DropdownProps<T = Record<string, string>> {\n testIds: {\n item: string;\n menu: string;\n trigger: string;\n value: string;\n };\n placeholder: string;\n selected: T[keyof T] | null;\n onSelect: (val: keyof T | null) => void;\n items: T;\n}\n\nexport const Dropdown: FunctionComponent<DropdownProps> = ({\n placeholder,\n items,\n onSelect,\n selected,\n testIds,\n}) => {\n const text = selected ? items[selected] : placeholder;\n const options = Object.entries(items);\n\n return (\n <Menu strategy=\"fixed\">\n <MenuButton\n as={Button}\n bg=\"white\"\n borderColor=\"blue.100\"\n boxShadow=\"base\"\n data-testid={testIds.trigger}\n rightIcon={<ChevronDownIcon color=\"blue.500\" />}\n variant=\"outline\"\n >\n <Text data-testid={testIds.value}>{text}</Text>\n </MenuButton>\n <MenuList data-testid={testIds.menu}>\n <MenuItem data-testid={testIds.item} onClick={() => onSelect(null)}>\n Any\n </MenuItem>\n {options.map(([name, displayName]) => (\n <MenuItem\n data-testid={testIds.item}\n key={name}\n onClick={() => onSelect(name)}\n >\n {displayName}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport type { FormEventHandler, FunctionComponent } from \"react\";\nimport { Form } from \"../Form\";\nimport {\n CatalogSearchInputs,\n CatalogSearchInputsProps,\n} from \"./CatalogSearchInputs\";\nimport testIds from \"./testIds\";\n\nexport interface CatalogSearchProps extends CatalogSearchInputsProps {\n /**\n * Called when the catalog search form is submitted (via enter keypress or submit click)\n */\n onSubmit: FormEventHandler<HTMLFormElement>;\n}\n\nexport const CatalogSearch: FunctionComponent<CatalogSearchProps> = ({\n onSubmit,\n ...props\n}) => {\n return (\n <Form data-testid={testIds.form} onSubmit={onSubmit}>\n <Grid\n autoRows=\"1fr\"\n gap={4}\n templateColumns={{ sm: \"1fr\", md: \"3fr 1fr 1fr\" }}\n width=\"full\"\n >\n <CatalogSearchInputs {...props} />\n </Grid>\n </Form>\n );\n};\n","import { useMemo } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { useCatalog } from \"../../contexts/Catalog\";\n\nexport interface UseCatalogResultsOptions {\n limit: number;\n offset?: number;\n query?: string;\n language?: Language | null;\n}\n\n/**\n * A hook which encapsulates logic around applying search filters\n * and determining displayable results\n */\nexport const useCatalogResults = ({\n limit,\n offset = 0,\n query = \"\",\n language = null,\n}: UseCatalogResultsOptions) => {\n const { data, loading, error } = useCatalog();\n\n const results = useMemo(() => {\n if (loading || error || !data?.packages) return [];\n\n const filtered = data.packages.filter((item) => {\n // Filter out items which do not support the current language\n if (language && language !== Language.TypeScript) {\n if (!Object.keys(item.languages).includes(language)) {\n return false;\n }\n }\n\n // Filter items which do not match the current query\n if (query.length) {\n const itemStr = JSON.stringify(item).toLowerCase();\n const queryStr = query.toLowerCase();\n\n if (!itemStr.includes(queryStr)) {\n return false;\n }\n }\n\n return true;\n });\n\n // Next sort by most recently updated. (The sort should eventually become a parameter)\n return [...filtered].sort((p1, p2) => {\n const d1 = new Date(p1.metadata.date);\n const d2 = new Date(p2.metadata.date);\n if (d1 === d2) {\n return 0;\n }\n return d1 < d2 ? 1 : -1;\n });\n }, [data?.packages, error, language, loading, query]);\n\n const pageLimit = results ? Math.floor(results.length / limit) : 0;\n\n const displayable = useMemo(() => {\n const startIndex = (offset > pageLimit ? pageLimit : offset) * limit;\n const stopIndex = startIndex + limit;\n\n return results.slice(startIndex, stopIndex);\n }, [limit, offset, pageLimit, results]);\n\n return useMemo(\n () => ({ loading, results, error, displayable, pageLimit }),\n [displayable, error, loading, pageLimit, results]\n );\n};\n","import {\n ChangeEventHandler,\n FormEventHandler,\n useCallback,\n useMemo,\n useState,\n Dispatch,\n SetStateAction,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\n\nexport interface UseCatalogSearchParams {\n defaultQuery?: string;\n defaultLanguage?: Language | null;\n}\n\nexport interface UseCatalogSearchReturn {\n /**\n * The language state for this search\n */\n language: Language | null;\n /**\n * Updates language state\n */\n onLanguageChange: (lang: Language | null) => void;\n /**\n * Input ChangeEventHandler which wraps the setQuery state setter\n */\n onQueryChange: ChangeEventHandler<HTMLInputElement>;\n /**\n * Navigates to the search query url\n */\n onSearch: () => void;\n /**\n * FormEventHandler to handle query submission\n */\n onSubmit: FormEventHandler<HTMLFormElement>;\n /**\n * The query state for this search\n */\n query: string;\n /**\n * Language state setter\n */\n setLanguage: Dispatch<SetStateAction<Language | null>>;\n /**\n * Query state setter\n */\n setQuery: Dispatch<SetStateAction<string>>;\n}\n\n/**\n * This hook provides all of the methods required to implement the functionality\n * of a client-side catalog search component. It additionally exposes lower-level methods\n * for custom components which may want to access parts of the search API\n */\nexport const useCatalogSearch = (\n options: UseCatalogSearchParams = {}\n): UseCatalogSearchReturn => {\n const [query, setQuery] = useState(options.defaultQuery ?? \"\");\n\n const [language, setLanguage] = useState<Language | null>(\n options.defaultLanguage ?? null\n );\n\n const { push } = useHistory();\n\n const onQueryChange: UseCatalogSearchReturn[\"onQueryChange\"] = (e) => {\n e.preventDefault();\n setQuery(e.target.value);\n };\n\n const onSearch = useCallback(() => {\n push(getSearchPath({ language, query }));\n }, [language, push, query]);\n\n const onSubmit: UseCatalogSearchReturn[\"onSubmit\"] = useCallback(\n (e) => {\n e?.preventDefault();\n onSearch();\n },\n [onSearch]\n );\n\n return useMemo(\n () => ({\n language,\n onLanguageChange: setLanguage,\n onQueryChange,\n onSearch,\n onSubmit,\n query,\n setLanguage,\n setQuery,\n }),\n [language, onSearch, onSubmit, query]\n );\n};\n","export const API_PATHS = {\n PACKAGES_PREFIX: \"/data\",\n CATALOG_SUFFIX: \"/catalog.json\",\n ASSEMBLY_SUFFIX: \"/assembly.json\",\n METADATA_SUFFIX: \"/metadata.json\",\n CONFIG: \"/config.json\",\n} as const;\n\nexport const QUERY_PARAMS = {\n LANGUAGE: \"lang\",\n OFFSET: \"offset\",\n SEARCH_QUERY: \"q\",\n SUBMODULE: \"submodule\",\n} as const;\n\nexport const ROUTES = {\n FAQ: \"/faq\",\n HOME: \"/\",\n PACKAGES: \"/packages\",\n SEARCH: \"/search\",\n SITE_TERMS: \"/terms\",\n};\n\ntype QueryParams = typeof QUERY_PARAMS;\n\nexport type QueryParamKey = QueryParams[keyof QueryParams];\n","import { useState, useEffect } from \"react\";\n\nexport interface UseDebounceOptions<T> {\n delay?: number;\n onChange?: (val: T) => void;\n}\n\nexport const useDebounce = <T>(\n value: T,\n options: UseDebounceOptions<T> = {}\n) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n const { delay = 250, onChange } = options;\n\n useEffect(() => {\n // Update value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n onChange?.(value);\n }, delay);\n\n // Cancel timeout when value / delay changes\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay, onChange]);\n\n return debouncedValue;\n};\n","import { HTMLChakraProps, ListItem, forwardRef } from \"@chakra-ui/react\";\nimport type { KeyboardEventHandler } from \"react\";\n\nexport interface SearchItemProps extends HTMLChakraProps<\"li\"> {\n name: string;\n onClick: () => void;\n}\n\nexport const SearchItem = forwardRef<SearchItemProps, \"li\">(\n ({ name, onClick, ...props }, ref) => {\n const onKeyDown: KeyboardEventHandler<HTMLLIElement> = (e) => {\n if (e.key === \"Enter\") {\n onClick();\n }\n };\n\n return (\n <ListItem\n alignItems=\"center\"\n display=\"flex\"\n fontSize=\"lg\"\n h={12}\n lineHeight=\"base\"\n listStyleType=\"none\"\n onClick={onClick}\n onKeyDown={onKeyDown}\n px={4}\n ref={ref}\n role=\"option\"\n sx={{ \":hover, :focus\": { bg: \"gray.100\" } }}\n tabIndex={0}\n {...props}\n >\n {name}\n </ListItem>\n );\n }\n);\n\nSearchItem.displayName = \"SearchItem\";\n","import { getLocalStoreWriter } from \"./getLocalStoreWriter\";\n\nexport interface ShortbreadOptions {\n domain?: string;\n parent?: HTMLElement;\n language?: Navigator[\"language\"];\n __storeWriter?: (cookie: Document[\"cookie\"]) => void;\n}\n\nexport interface Shortbread {\n /**\n * Call this function to be notified when you cookie category is allowed\n */\n access: (\n name: \"essential\" | \"performance\" | \"functional\" | \"advertising\",\n onAllowed: () => void\n ) => void;\n /**\n * Call to ask the user the type of cookies they'd like to receive\n */\n checkForCookieConsent: () => void;\n /**\n * Open the Customize Cookie Dialog\n */\n customizeCookies: () => void;\n /**\n * Returns the consent cookie or undefined if not yet set\n */\n getConsentCookie: () => Document[\"cookie\"] | undefined;\n /**\n * Call this to ask if the cookie has been set\n */\n hasConsent: (cookieName: string) => boolean;\n}\n\n// We only want to manage a single instance at a time\nlet instance: Shortbread | undefined;\n\n/**\n * Call to initialize the shortbread instance. Must be called before all other methods\n */\nexport const initialize = async () => {\n return new Promise<void>((resolve, reject) => {\n // Wait until page has loaded first\n window.addEventListener(\"load\", async () => {\n try {\n const options: ShortbreadOptions = {\n domain: window.location.hostname,\n language: navigator.language,\n __storeWriter: getLocalStoreWriter(),\n };\n\n // Import the shortbread source\n const { AWSCShortbread } = await import(\"./source\");\n instance = AWSCShortbread(options);\n\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n });\n};\n\n// Shortbread wrappers\n\nconst callIfDefined =\n <T extends keyof Shortbread>(method: T) =>\n (...args: Parameters<Shortbread[T]>): ReturnType<Shortbread[T]> => {\n if (!instance) {\n throw new Error(\"shortbread has not been initialized\");\n }\n\n // Annotations are correct for consumers\n return (instance[method] as any)(...args);\n };\n\n/**\n * Call this function to be notified when you cookie category is allowed\n */\nexport const access = callIfDefined(\"access\");\n/**\n * Call to ask the user the type of cookies they'd like to receive\n */\nexport const checkForCookieConsent = callIfDefined(\"checkForCookieConsent\");\n/**\n * Open the Customize Cookie Dialog\n */\nexport const customizeCookies = callIfDefined(\"customizeCookies\");\n/**\n * Returns the consent cookie or undefined if not yet set\n */\nexport const getConsentCookie = callIfDefined(\"getConsentCookie\");\n/**\n * Call this to ask if the cookie has been set\n */\nexport const hasConsent = callIfDefined(\"hasConsent\");\n","import { ReportHandler } from \"web-vitals\";\n\nexport const reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(\n ({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n },\n () => {}\n );\n }\n};\n","import { CloseIcon, InfoOutlineIcon } from \"@chakra-ui/icons\";\nimport {\n Box,\n IconButton,\n Collapse,\n Text,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../Card\";\nimport { ExternalLink } from \"../ExternalLink\";\n\nconst STORAGE_KEY = \"showing-dev-preview-banner\";\n\nexport const DevPreviewBanner: FunctionComponent = () => {\n const { isOpen, onClose } = useDisclosure({\n defaultIsOpen: JSON.parse(\n window.sessionStorage.getItem(STORAGE_KEY) ?? \"true\"\n ),\n onClose: () => window.sessionStorage.setItem(STORAGE_KEY, \"false\"),\n });\n\n return (\n <Box h=\"max-content\">\n <Collapse in={isOpen}>\n <Card\n aria-label=\"Preview Banner\"\n bg=\"blue.500\"\n border=\"none\"\n boxShadow=\"none\"\n color=\"white\"\n mt={4}\n mx={4}\n p={4}\n position=\"relative\"\n role=\"alertdialog\"\n >\n <InfoOutlineIcon h={5} left={4} position=\"absolute\" top={4} w={5} />\n <Text fontSize=\"md\" mx={8} textAlign=\"center\">\n This application is in Dev Preview. Some features may change. If you\n find any issues, please report them{\" \"}\n <ExternalLink\n color=\"inherit\"\n hasWarning={false}\n href=\"https://github.com/cdklabs/construct-hub-webapp/issues\"\n textDecoration=\"underline\"\n >\n here\n </ExternalLink>\n </Text>\n <IconButton\n aria-label=\"Dismiss banner\"\n colorScheme=\"white\"\n icon={<CloseIcon />}\n onClick={onClose}\n position=\"absolute\"\n right={4}\n size=\"xs\"\n top={3}\n variant=\"ghost\"\n />\n </Card>\n </Collapse>\n </Box>\n );\n};\n","import type { ShortbreadOptions } from \"./shortbread\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\n/**\n * This function allows for shortbread testing locally.\n * If the node env is dev and the url has a query param of sb=true,\n * it will return a __storeWriter function to pass into shortbread's options\n */\nexport const getLocalStoreWriter = (): ShortbreadOptions[\"__storeWriter\"] => {\n const search = new URLSearchParams(window.location.search);\n const shouldUseOverride = search.get(\"sb\") === \"true\";\n\n if (isDev && shouldUseOverride) {\n return (cookie) => {\n document.cookie = cookie.replace(\" secure=true;\", \"\");\n };\n }\n\n return undefined;\n};\n","import {\n createContext,\n FunctionComponent,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport * as shortbread from \"../../lib/shortbread\";\n\nconst { initialize, ...publicAPI } = shortbread;\n\nconst ShortbreadContext = createContext<Partial<typeof publicAPI>>({});\n\nexport const useShortBread = () => useContext(ShortbreadContext);\n\nexport const ShortbreadProvider: FunctionComponent = ({ children }) => {\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n let isCancelled = false;\n\n initialize()\n .then(() => {\n if (!isCancelled) {\n publicAPI.checkForCookieConsent();\n setIsReady(true);\n }\n })\n .catch((e) => {\n console.error(e);\n\n if (!isCancelled) {\n setIsReady(false);\n }\n });\n\n return () => {\n isCancelled = true;\n setIsReady(false);\n };\n }, []);\n\n return (\n <ShortbreadContext.Provider value={isReady ? publicAPI : {}}>\n {children}\n </ShortbreadContext.Provider>\n );\n};\n","import { ROUTES } from \"../../constants/url\";\n\nexport type Link = {\n display: string;\n url: string;\n testId: string;\n isExternal?: boolean;\n};\n\nexport const FOOTER_LINKS: Record<string, Link> = {\n SERVICE_TERMS: {\n display: \"AWS Service Terms\",\n url: \"https://aws.amazon.com/service-terms/\",\n testId: \"service-terms\",\n },\n PRIVACY: {\n display: \"Privacy\",\n url: \"https://aws.amazon.com/privacy/\",\n testId: \"privacy\",\n },\n SITE_TERMS: {\n display: \"Site Terms\",\n url: ROUTES.SITE_TERMS,\n testId: \"site-terms\",\n isExternal: false,\n },\n LEGAL: {\n display: \"Legal\",\n url: \"https://aws.amazon.com/legal/\",\n testId: \"legal\",\n },\n} as const;\n\nexport const DISCLAIMER = \"2021 Amazon Web Services, Inc. All rights reserved.\";\n","import { createTestIds } from \"../../util/createTestIds\";\nimport { FOOTER_LINKS } from \"./constants\";\n\nconst testIds = createTestIds(\"footer\", [\n \"container\",\n \"links\",\n \"disclaimer\",\n \"manageCookies\",\n ...Object.values(FOOTER_LINKS).map(({ testId }) => testId),\n] as const);\n\nexport default testIds;\n","import { Box, Button, Divider, Flex, SimpleGrid, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { useShortBread } from \"../../contexts/Shortbread\";\nimport { ExternalLink } from \"../ExternalLink\";\nimport { NavLink } from \"../NavLink\";\nimport { DISCLAIMER, FOOTER_LINKS } from \"./constants\";\nimport testIds from \"./testIds\";\n\nexport interface FooterProps {}\n\nexport const Footer: FunctionComponent<FooterProps> = () => {\n const { customizeCookies } = useShortBread();\n\n return (\n <Flex\n align=\"center\"\n as=\"footer\"\n bg=\"blue.800\"\n color=\"white\"\n data-testid={testIds.container}\n direction=\"column\"\n justify=\"center\"\n py={4}\n >\n <SimpleGrid columnGap={6} columns={[1, 2, 4]} data-testid={testIds.links}>\n {Object.entries(FOOTER_LINKS).map(\n ([key, { display, isExternal = true, testId, url }], index) => (\n <Flex\n align=\"center\"\n direction={{ base: \"column\", md: \"row\" }}\n key={key}\n >\n {/* Single Row Divider */}\n <Box\n display={{ base: \"none\", md: index !== 0 ? \"initial\" : \"none\" }}\n h={5}\n >\n <Divider borderColor=\"white\" mr={6} orientation=\"vertical\" />\n </Box>\n {isExternal ? (\n <ExternalLink\n color=\"currentcolor\"\n data-testid={testIds[testId]}\n hasWarning={false}\n href={url}\n lineHeight={10}\n mx=\"auto\"\n >\n {display}\n </ExternalLink>\n ) : (\n <NavLink\n color=\"currentcolor\"\n data-testid={testIds[testId]}\n lineHeight={10}\n mx=\"auto\"\n to={url}\n >\n {display}\n </NavLink>\n )}\n {/* 2 Row Divider */}\n <Box\n display={{\n base: \"none\",\n sm: index < 2 ? \"initial\" : \"none\",\n md: \"none\",\n }}\n w=\"100%\"\n >\n <Divider borderColor=\"white\" />\n </Box>\n </Flex>\n )\n )}\n </SimpleGrid>\n <Text data-testid={testIds.disclaimer} fontSize=\"xs\" mt={4}>\n {DISCLAIMER}\n </Text>\n <Button\n color=\"white\"\n data-testid={testIds.manageCookies}\n fontSize=\"xs\"\n fontWeight=\"normal\"\n mt={4}\n onClick={customizeCookies}\n variant=\"link\"\n >\n Manage Cookies\n </Button>\n </Flex>\n );\n};\n","import type { IMenuItems } from \"../components/NavPopover\";\n\nexport const DOCUMENTATION: IMenuItems = [\n { display: \"FAQ\", isNavLink: true, url: \"/faq\" },\n {\n display: \"Construct Hub on GitHub\",\n url: \"https://github.com/cdklabs/construct-hub\",\n },\n {\n display: \"Issues on GitHub\",\n url: \"https://github.com/cdklabs/construct-hub/issues\",\n },\n];\n\nexport const RESOURCES: IMenuItems = [\n {\n display: \"AWS CDK\",\n links: [\n { display: \"Home\", url: \"https://aws.amazon.com/cdk/\" },\n {\n display: \"Getting Started\",\n url: \"https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html\",\n },\n { display: \"Workshop\", url: \"https://cdkworkshop.com/\" },\n {\n display: \"Best Practices\",\n url: \"https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk\",\n },\n ],\n },\n {\n display: \"CDK for Terraform\",\n links: [\n {\n display: \"Getting Started\",\n url: \"https://learn.hashicorp.com/tutorials/terraform/cdktf\",\n },\n {\n display: \"Tutorials\",\n url: \"https://learn.hashicorp.com/collections/terraform/cdktf\",\n },\n ],\n },\n {\n display: \"CDK for Kubernetes\",\n links: [\n { display: \"Home\", url: \"https://cdk8s.io\" },\n {\n display: \"Getting Started\",\n url: \"https://cdk8s.io/docs/latest/getting-started\",\n },\n { display: \"Documentation\", url: \"https://cdk8s.io/docs/latest\" },\n {\n display: \"API Reference\",\n url: \"https://cdk8s.io/docs/latest/reference/index.html\",\n },\n ],\n },\n {\n display: \"Community\",\n links: [\n {\n display: \"Slack\",\n url: \"https://join.slack.com/t/cdk-dev/shared_invite/zt-mso6p56d-qJp7SOTBvMaQuDrx7R2wHg\",\n },\n { display: \"Community Hub\", url: \"https://cdk.dev\" },\n ],\n },\n];\n","import { Menu, MenuProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface NavPopoverProps extends MenuProps {}\n\nexport const NavPopover: FunctionComponent<NavPopoverProps> = ({\n children,\n ...menuProps\n}) => {\n return (\n <Menu colorScheme=\"blue.800\" strategy=\"fixed\" {...menuProps}>\n {children}\n </Menu>\n );\n};\n","import {\n forwardRef,\n MenuDivider,\n MenuGroup,\n MenuItem,\n MenuList,\n MenuListProps,\n} from \"@chakra-ui/react\";\nimport { Fragment, FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../ExternalLink\";\nimport { NavLink } from \"../NavLink\";\nimport type { IMenuItems, ILink } from \"./types\";\n\nexport interface NavPopoverContentProps extends MenuListProps {\n items: IMenuItems;\n}\n\nconst Link: FunctionComponent<ILink> = ({ display, isNavLink, url }) =>\n isNavLink ? (\n <NavLink color=\"blue.500\" to={url}>\n {display}\n </NavLink>\n ) : (\n <ExternalLink\n alignItems=\"center\"\n display=\"flex\"\n hasWarning={false}\n href={url}\n justifyContent=\"space-between\"\n w=\"100%\"\n >\n {display}\n </ExternalLink>\n );\n\nexport const NavPopoverContent = forwardRef<NavPopoverContentProps, \"div\">(\n ({ items, ...menuProps }, ref) => {\n return (\n <MenuList {...menuProps} ref={ref}>\n {items.map((item, idx) => {\n if (\"links\" in item) {\n return (\n <Fragment key={`${item.display}-${idx}`}>\n <MenuGroup align=\"left\" title={item.display}>\n {item.links.map((link, linkIdx) => (\n <MenuItem key={`${link.display}-${linkIdx}`}>\n <Link {...link} />\n </MenuItem>\n ))}\n </MenuGroup>\n {idx !== items.length - 1 && <MenuDivider />}\n </Fragment>\n );\n }\n\n return (\n <MenuItem key={`${item.display}-${idx}`}>\n <Link {...item} />\n </MenuItem>\n );\n })}\n </MenuList>\n );\n }\n);\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n MenuButton,\n MenuButtonProps,\n forwardRef,\n} from \"@chakra-ui/react\";\n\nexport const NavPopoverTrigger = forwardRef<MenuButtonProps, \"button\">(\n ({ children, ...props }, ref) => {\n return (\n <MenuButton\n as={Button}\n color=\"blue.800\"\n fontWeight=\"500\"\n ref={ref}\n rightIcon={<ChevronDownIcon h={6} w={6} />}\n size=\"md\"\n variant=\"link\"\n {...props}\n >\n {children}\n </MenuButton>\n );\n }\n);\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"header\", [\n \"container\",\n \"title\",\n \"gettingStartedTrigger\",\n \"gettingStartedMenu\",\n \"resourcesTrigger\",\n \"resourcesMenu\",\n \"navOpen\",\n \"navClose\",\n \"searchButton\",\n \"searchIcon\",\n \"mobileNav\",\n] as const);\n\nexport default testIds;\n","import type { FunctionComponent } from \"react\";\nimport { DOCUMENTATION } from \"../../constants/links\";\nimport {\n NavPopover,\n NavPopoverContent,\n NavPopoverTrigger,\n} from \"../NavPopover\";\nimport testIds from \"./testIds\";\n\nexport const Documentation: FunctionComponent = () => (\n <NavPopover>\n <NavPopoverTrigger data-testid={testIds.gettingStartedTrigger}>\n Getting Started\n </NavPopoverTrigger>\n <NavPopoverContent\n data-testid={testIds.gettingStartedMenu}\n items={DOCUMENTATION}\n />\n </NavPopover>\n);\n","import type { FunctionComponent } from \"react\";\nimport { RESOURCES } from \"../../constants/links\";\nimport {\n NavPopover,\n NavPopoverContent,\n NavPopoverTrigger,\n} from \"../NavPopover\";\nimport testIds from \"./testIds\";\n\nexport const Resources: FunctionComponent = () => {\n return (\n <NavPopover>\n <NavPopoverTrigger data-testid={testIds.resourcesTrigger}>\n Resources\n </NavPopoverTrigger>\n <NavPopoverContent\n data-testid={testIds.resourcesMenu}\n items={RESOURCES}\n />\n </NavPopover>\n );\n};\n","import { Box, Heading } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport testIds from \"./testIds\";\n\nexport const Title: FunctionComponent = () => (\n <Heading as=\"h1\" color=\"blue.800\" data-testid={testIds.title} size=\"lg\">\n <Link to=\"/\">\n <Box as=\"span\" color=\"blue.500\">\n Construct\n </Box>{\" \"}\n Hub\n </Link>\n </Heading>\n);\n","import {\n Drawer,\n DrawerBody,\n DrawerOverlay,\n DrawerHeader,\n DrawerContent,\n DrawerCloseButton,\n Portal,\n Stack,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Documentation } from \"./Documentation\";\nimport { Resources } from \"./Resources\";\nimport testIds from \"./testIds\";\nimport { Title } from \"./Title\";\nexport interface MobileNavProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const MobileNav: FunctionComponent<MobileNavProps> = ({\n isOpen,\n onClose,\n}) => {\n return (\n <Portal>\n <Drawer isOpen={isOpen} onClose={onClose} placement=\"left\" size=\"xs\">\n <DrawerOverlay />\n <DrawerContent data-testid={testIds.mobileNav}>\n <DrawerCloseButton />\n <DrawerHeader display=\"flex\" justifyContent=\"center\">\n <Title />\n </DrawerHeader>\n <DrawerBody>\n <Stack align=\"start\" justify=\"start\" spacing={4}>\n <Documentation />\n <Resources />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </Portal>\n );\n};\n","import { HamburgerIcon } from \"@chakra-ui/icons\";\nimport { IconButton, useDisclosure } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { MobileNav } from \"./MobileNav\";\nimport testIds from \"./testIds\";\n\nexport const NavButton: FunctionComponent = () => {\n const nav = useDisclosure();\n\n return (\n <>\n <IconButton\n aria-label=\"Navigation Menu\"\n borderRadius=\"md\"\n data-testid={testIds.navOpen}\n display={{ md: \"none\" }}\n icon={<HamburgerIcon />}\n onClick={nav.onOpen}\n variant=\"ghost\"\n />\n <MobileNav {...nav} />\n </>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"searchModal\", [\"container\"] as const);\n\nexport default testIds;\n","import {\n Divider,\n Heading,\n Modal,\n ModalBody,\n ModalCloseButton,\n ModalContent,\n ModalHeader,\n ModalOverlay,\n Portal,\n Stack,\n UnorderedList,\n} from \"@chakra-ui/react\";\nimport { FormEventHandler, FunctionComponent, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { QUERY_PARAMS, ROUTES } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useDebounce } from \"../../hooks/useDebounce\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { CatalogSearchInputs } from \"../CatalogSearch\";\nimport { Form } from \"../Form\";\nimport { SearchItem } from \"../SearchItem\";\nimport testIds from \"./testIds\";\n\nexport interface SearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const SearchModal: FunctionComponent<SearchModalProps> = ({\n isOpen,\n onClose,\n}) => {\n const { push } = useHistory();\n const [currentLanguage] = useLanguage();\n const { onSubmit: onSearchSubmit, ...searchAPI } = useCatalogSearch();\n const { query, language } = useDebounce({\n query: searchAPI.query,\n language: searchAPI.language,\n });\n\n const { displayable } = useCatalogResults({\n limit: 5,\n offset: 0,\n query,\n language,\n });\n\n const showResults = (query || language) && displayable.length > 0;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const navigate = (to: string) => {\n onClose();\n push(to);\n };\n\n const onSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n onClose();\n onSearchSubmit(e);\n };\n\n return (\n <Portal>\n <Modal initialFocusRef={inputRef} isOpen={isOpen} onClose={onClose}>\n <ModalOverlay>\n <ModalContent data-testid={testIds.container}>\n <ModalCloseButton />\n <ModalHeader>Search modules or providers</ModalHeader>\n <ModalBody>\n <Form onSubmit={onSubmit} pb={4}>\n <Stack spacing={4}>\n <CatalogSearchInputs ref={inputRef} {...searchAPI} />\n </Stack>\n </Form>\n {showResults && (\n <>\n <Divider />\n <Heading fontSize=\"md\" my={4} textAlign=\"center\">\n Suggestions\n </Heading>\n <UnorderedList>\n {displayable.map((pkg) => (\n <SearchItem\n key={pkg.name}\n name={pkg.name}\n onClick={() =>\n navigate(\n `${ROUTES.PACKAGES}/${pkg.name}/v/${pkg.version}?${\n QUERY_PARAMS.LANGUAGE\n }=${language ?? currentLanguage}`\n )\n }\n />\n ))}\n </UnorderedList>\n </>\n )}\n </ModalBody>\n </ModalContent>\n </ModalOverlay>\n </Modal>\n </Portal>\n );\n};\n","import { SearchIcon } from \"@chakra-ui/icons\";\nimport { Button, IconButton, useDisclosure } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { ROUTES } from \"../../constants/url\";\nimport { SearchModal } from \"../SearchModal\";\nimport testIds from \"./testIds\";\n\nexport const SearchButton: FunctionComponent = () => {\n const searchModal = useDisclosure();\n const { pathname } = useLocation();\n\n if ([ROUTES.HOME, ROUTES.SEARCH].some((path) => path === pathname)) {\n return null;\n }\n\n return (\n <>\n {/* Desktop / Tablet Search Trigger */}\n <Button\n align=\"center\"\n color=\"gray.600\"\n colorScheme=\"gray\"\n data-testid={testIds.searchButton}\n display={{ base: \"none\", md: \"flex\" }}\n fontWeight=\"medium\"\n justifyContent=\"space-between\"\n m=\"0 auto\"\n maxW=\"500px\"\n onClick={searchModal.onOpen}\n rightIcon={<SearchIcon color=\"gray.600\" ml={4} />}\n variant=\"outline\"\n w=\"100%\"\n >\n Search Constructs...\n </Button>\n {/* Mobile Search Trigger */}\n <IconButton\n aria-label=\"Search Icon\"\n borderRadius=\"md\"\n data-testid={testIds.searchIcon}\n display={{ base: \"initial\", md: \"none\" }}\n icon={<SearchIcon color=\"gray.600\" />}\n onClick={searchModal.onOpen}\n variant=\"ghost\"\n />\n <SearchModal {...searchModal} />\n </>\n );\n};\n","import { Box, Grid, GridItem, GridItemProps } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Documentation } from \"./Documentation\";\nimport { NavButton } from \"./NavButton\";\nimport { Resources } from \"./Resources\";\nimport { SearchButton } from \"./SearchButton\";\nimport testIds from \"./testIds\";\nimport { Title } from \"./Title\";\n\nconst HeaderItem: FunctionComponent<GridItemProps> = (props) => (\n <GridItem align=\"center\" justify=\"center\" rowStart={1} {...props} />\n);\n\nexport const Header: FunctionComponent = () => {\n return (\n <Grid\n alignItems=\"center\"\n as=\"header\"\n bg=\"white\"\n boxShadow=\"base\"\n data-testid={testIds.container}\n gap={4}\n gridTemplateColumns={{\n base: \"1fr 3fr 1fr\",\n md: \"minmax(200px, 2fr) minmax(200px, 3fr) 2fr\",\n }}\n gridTemplateRows=\"1fr\"\n maxW=\"100vw\"\n position=\"sticky\"\n px={4}\n py={4}\n top={0}\n w=\"100%\"\n zIndex=\"sticky\"\n >\n {/* Logo / Header */}\n <HeaderItem\n colStart={{ base: 2, md: 1 }}\n justifySelf={{ base: \"center\", md: \"start\" }}\n >\n <Title />\n </HeaderItem>\n\n {/* Search Trigger */}\n <HeaderItem\n colStart={{ base: 3, md: 2 }}\n justifySelf={{ base: \"end\", md: \"stretch\" }}\n >\n <SearchButton />\n </HeaderItem>\n\n {/* Navigation */}\n <HeaderItem\n colStart={{ base: 1, md: 3 }}\n justifySelf={{ base: \"start\", md: \"end\" }}\n >\n <Grid\n display={{ base: \"none\", md: \"grid\" }}\n gap={4}\n gridTemplateColumns=\"1fr 1fr\"\n gridTemplateRows=\"1fr\"\n placeItems=\"center\"\n w=\"100%\"\n >\n <Box>\n <Documentation />\n </Box>\n <Box>\n <Resources />\n </Box>\n </Grid>\n <NavButton />\n </HeaderItem>\n </Grid>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const PageLoader: FunctionComponent = () => (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n);\n","import { FunctionComponent, LazyExoticComponent, Suspense } from \"react\";\nimport { Route, RouteProps } from \"react-router-dom\";\nimport { PageLoader } from \"../PageLoader\";\n\nexport interface LazyRouteProps extends RouteProps {\n component: LazyExoticComponent<FunctionComponent>;\n}\n\n/**\n * A wrapper around the react-router-dom <Route /> which takes in a lazy loaded component\n * and wraps it with <Suspense /> and a generic <PageLoader /> fallback\n *\n * Usage:\n * ```tsx\n * import { lazy } from \"react\";\n *\n * const MyComponent = lazy(() => import(\"./path/to/MyComponent\"));\n *\n * <LazyRoute path=\"/\" component={MyComponent} />\n *\n * ```\n */\nexport const LazyRoute: FunctionComponent<LazyRouteProps> = ({\n component: Component,\n ...routeProps\n}) => (\n <Route {...routeProps}>\n <Suspense fallback={<PageLoader />}>\n <Component />\n </Suspense>\n </Route>\n);\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent, lazy } from \"react\";\nimport { Switch } from \"react-router-dom\";\nimport { DevPreviewBanner } from \"./components/DevPreviewBanner\";\nimport { Footer } from \"./components/Footer\";\nimport { Header } from \"./components/Header\";\nimport { LazyRoute } from \"./components/LazyRoute\";\nimport { PageLoader } from \"./components/PageLoader\";\nimport { ROUTES } from \"./constants/url\";\nimport { useConfig } from \"./contexts/Config\";\n\nconst FAQ = lazy(() => import(\"./views/FAQ\"));\nconst Home = lazy(() => import(\"./views/Home\"));\nconst HomeRedesign = lazy(() => import(\"./views/HomeRedesign\"));\nconst NotFound = lazy(() => import(\"./views/NotFound\"));\nconst Packages = lazy(() => import(\"./views/Packages\"));\nconst SearchResults = lazy(() => import(\"./views/SearchResults\"));\nconst SearchRedesign = lazy(() => import(\"./views/SearchRedesign\"));\nconst SiteTerms = lazy(() => import(\"./views/SiteTerms\"));\n\nexport const App: FunctionComponent = () => {\n const { data, loading } = useConfig();\n const featureFlags = data?.featureFlags ?? {};\n const isRedesign = featureFlags?.homeRedesign || featureFlags?.searchRedesign;\n\n return (\n <Grid\n as=\"main\"\n bg=\"bgPrimary\"\n gridTemplateColumns=\"1fr\"\n gridTemplateRows=\"auto auto 1fr auto\"\n h=\"100%\"\n inset={0}\n maxW=\"100vw\"\n overflow=\"hidden auto\"\n position=\"fixed\"\n >\n <Header />\n {!loading && !isRedesign ? <DevPreviewBanner /> : <div />}\n {loading ? (\n <PageLoader />\n ) : (\n <Switch>\n <LazyRoute component={FAQ} exact path={ROUTES.FAQ} />\n <LazyRoute\n component={featureFlags?.homeRedesign ? HomeRedesign : Home}\n exact\n path={ROUTES.HOME}\n />\n <LazyRoute component={SiteTerms} exact path={ROUTES.SITE_TERMS} />\n <LazyRoute component={Packages} path={ROUTES.PACKAGES} />\n <LazyRoute\n component={\n featureFlags?.searchRedesign ? SearchRedesign : SearchResults\n }\n exact\n path={ROUTES.SEARCH}\n />\n <LazyRoute component={NotFound} path=\"*\" />\n </Switch>\n )}\n <Footer />\n </Grid>\n );\n};\n","import { theme } from \"@chakra-ui/react\";\n\nconst {\n components: { Code: base },\n} = theme;\n\nexport const Code = {\n ...base,\n variants: {\n ...base.variants,\n \"code-block\": {\n ...base.variants.subtle,\n display: \"block\",\n whiteSpace: \"pre\",\n },\n },\n};\n","import type { tagAnatomy } from \"@chakra-ui/anatomy\";\nimport { theme } from \"@chakra-ui/react\";\nimport type {\n PartsStyleInterpolation,\n StyleFunctionProps,\n} from \"@chakra-ui/theme-tools\";\n\nconst createVariant =\n (\n variant: PartsStyleInterpolation<typeof tagAnatomy>,\n overrides: Record<string, any>\n ) =>\n (props: StyleFunctionProps) => {\n const varBase = typeof variant === \"function\" ? variant(props) : variant;\n return {\n ...varBase,\n container: {\n ...varBase.container,\n ...overrides,\n },\n };\n };\n\nconst {\n components: { Tag: base },\n} = theme;\n\nexport const Tag = {\n ...base,\n baseStyle: {\n container: {\n fontWeight: \"normal\",\n },\n },\n variants: {\n ...base.variants,\n subtle: createVariant(base.variants.subtle, {\n background: \"#F2F2F2\",\n color: \"blue.800\",\n }),\n official: createVariant(base.variants.subtle, {\n background: \"rgba(33, 150, 83, 0.1)\",\n color: \"#219653\",\n }),\n },\n};\n","import { theme } from \"@chakra-ui/react\";\nimport { Code } from \"./Code\";\nimport { Divider } from \"./Divider\";\nimport { Tag } from \"./Tag\";\n\nexport const components = {\n ...theme.components,\n Code,\n Divider,\n Tag,\n};\n","// TODO: Figure out why this does nothing\nexport const Divider = {\n defaultProps: {\n borderColor: \"rgba(0, 124, 253, 0.15)\",\n },\n};\n","import { borders } from \"./borders\";\nimport { colors } from \"./colors\";\nimport { radii } from \"./radius\";\nimport { shadows } from \"./shadows\";\nimport { sizes } from \"./sizes\";\n\nexport const foundations = {\n borders,\n colors,\n radii,\n sizes,\n shadows,\n};\n","export const borders = {\n base: \"1px solid rgba(0, 124, 253, 0.15)\",\n};\n","import { theme } from \"@chakra-ui/react\";\n\nexport const colors = {\n ...theme.colors,\n blue: {\n 50: \"#dcf3ff\",\n 100: \"#aed9ff\",\n 200: \"#7dbeff\",\n 300: \"#4aa4ff\",\n 400: \"#1a8aff\",\n 500: \"#0070e6\",\n 600: \"#0057b4\",\n 700: \"#003e82\",\n 800: \"#002551\",\n 900: \"#000d21\",\n },\n bgPrimary: \"#F8F8F8\",\n};\n","export const radii = {\n card: \"0.75rem\",\n};\n","// import { theme } from \"@chakra-ui/react\";\n\nexport const sizes = {\n container: {\n \"2xl\": \"1920px\",\n },\n};\n","export const shadows = {\n base: \"0px 4px 15px rgba(40, 132, 178, 0.15)\",\n};\n","import { extendTheme } from \"@chakra-ui/react\";\nimport { components } from \"./components\";\nimport { foundations } from \"./foundations\";\n\nexport const theme = extendTheme({\n ...foundations,\n components,\n});\n","import { ChakraProvider } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { theme } from \"../theme\";\n\nexport const Theme: FunctionComponent = ({ children }) => {\n return (\n <ChakraProvider resetCSS theme={theme}>\n {children}\n </ChakraProvider>\n );\n};\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\n// [::1] is the IPv6 localhost address.\n// 127.0.0.0/8 are considered localhost for IPv4.\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"[::1]\" ||\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nconst registerValidSW = (swUrl: string, config?: Config) => {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://cra.link/PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n};\n\nconst checkValidServiceWorker = (swUrl: string, config?: Config) => {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n void navigator.serviceWorker.ready.then((registration) => {\n void registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n};\n\nexport const register = (config?: Config) => {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n void navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service worker. To learn more, visit https://cra.link/PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n};\n\nexport const unregister = () => {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n void registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n};\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport \"./index.css\";\nimport { App } from \"./App\";\nimport { AnalyticsProvider } from \"./contexts/Analytics\";\nimport { CatalogProvider } from \"./contexts/Catalog\";\nimport { ConfigProvider } from \"./contexts/Config\";\nimport { ExternalLinkWarningProvider } from \"./contexts/ExternalLinkWarning\";\nimport { ShortbreadProvider } from \"./contexts/Shortbread\";\nimport { Theme } from \"./contexts/Theme\";\nimport { register } from \"./register-service-worker\";\nimport { reportWebVitals } from \"./reportWebVitals\";\n\nReactDOM.render(\n <React.StrictMode>\n <ConfigProvider>\n <ShortbreadProvider>\n <Router>\n <AnalyticsProvider>\n <Theme>\n <ExternalLinkWarningProvider>\n <CatalogProvider>\n <App />\n </CatalogProvider>\n </ExternalLinkWarningProvider>\n </Theme>\n </AnalyticsProvider>\n </Router>\n </ShortbreadProvider>\n </ConfigProvider>\n </React.StrictMode>,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n\n// Register service worker for PWA functionality.\nregister();\n","import type { PropsOf, Icon } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { DotNetIcon } from \"../icons/DotNetIcon\";\nimport { GoIcon } from \"../icons/GoIcon\";\nimport { JavaIcon } from \"../icons/JavaIcon\";\nimport { PythonIcon } from \"../icons/PythonIcon\";\nimport { TSIcon } from \"../icons/TSIcon\";\n\nexport enum Language {\n DotNet = \"dotnet\",\n TypeScript = \"typescript\",\n Python = \"python\",\n Go = \"golang\",\n Java = \"java\",\n}\n\n/**\n * The sorted list of all available languages.\n */\nexport const LANGUAGES: readonly Language[] = [\n Language.TypeScript,\n Language.Python,\n Language.Java,\n Language.Go,\n Language.DotNet,\n];\n\nexport const LANGUAGE_NAME_MAP: { readonly [key in Language]: string } = {\n [Language.TypeScript]: \"TypeScript\",\n [Language.Python]: \"Python\",\n [Language.Java]: \"Java\",\n [Language.Go]: \"Go\",\n [Language.DotNet]: \".NET\",\n};\n\nexport const TEMP_SUPPORTED_LANGUAGES: ReadonlySet<Language> = new Set([\n Language.Python,\n Language.TypeScript,\n]);\n\nexport const LANGUAGE_RENDER_MAP: {\n readonly [key in Language]: {\n readonly name: string;\n readonly icon: FunctionComponent<PropsOf<typeof Icon>>;\n };\n} = {\n [Language.TypeScript]: {\n name: LANGUAGE_NAME_MAP.typescript,\n icon: TSIcon,\n },\n [Language.Python]: {\n name: LANGUAGE_NAME_MAP.python,\n icon: PythonIcon,\n },\n [Language.Java]: {\n name: LANGUAGE_NAME_MAP.java,\n icon: JavaIcon,\n },\n [Language.Go]: {\n name: LANGUAGE_NAME_MAP.golang,\n icon: GoIcon,\n },\n [Language.DotNet]: {\n name: LANGUAGE_NAME_MAP.dotnet,\n icon: DotNetIcon,\n },\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const TSIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M0 128v128h256V0H0z\" fill=\"#007ACC\" />\n <path\n d=\"M56.611 128.85l-.081 10.483h33.32v94.68h23.57v-94.68h33.32v-10.28c0-5.69-.122-10.444-.284-10.566-.122-.162-20.399-.244-44.983-.203l-44.739.122-.122 10.443zM206.567 118.108c6.501 1.626 11.459 4.51 16.01 9.224 2.357 2.52 5.851 7.112 6.136 8.209.08.325-11.053 7.802-17.798 11.987-.244.163-1.22-.894-2.317-2.52-3.291-4.794-6.745-6.867-12.028-7.232-7.76-.529-12.759 3.535-12.718 10.32 0 1.992.284 3.17 1.097 4.796 1.707 3.535 4.876 5.648 14.832 9.955 18.326 7.884 26.168 13.085 31.045 20.48 5.445 8.25 6.664 21.415 2.966 31.208-4.063 10.646-14.14 17.88-28.323 20.277-4.388.772-14.79.65-19.504-.203-10.28-1.829-20.033-6.908-26.047-13.572-2.357-2.601-6.949-9.387-6.664-9.875.122-.162 1.178-.812 2.356-1.503 1.138-.65 5.446-3.13 9.509-5.486l7.355-4.267 1.544 2.276c2.154 3.291 6.867 7.802 9.712 9.305 8.167 4.308 19.383 3.698 24.909-1.26 2.357-2.153 3.332-4.388 3.332-7.68 0-2.966-.366-4.266-1.91-6.5-1.99-2.845-6.054-5.243-17.595-10.24-13.206-5.69-18.895-9.225-24.096-14.833-3.007-3.25-5.852-8.452-7.03-12.8-.975-3.616-1.22-12.678-.447-16.335 2.723-12.76 12.353-21.658 26.25-24.3 4.51-.853 14.994-.528 19.424.57z\"\n fill=\"#FFF\"\n />\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const PythonIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon {...props} version=\"1.0\" viewBox=\"0 0 110.421 109.846\">\n <defs>\n <linearGradient id=\"a\">\n <stop offset=\"0\" stopColor=\"#ffe052\" />\n <stop offset=\"1\" stopColor=\"#ffc331\" />\n </linearGradient>\n <linearGradient\n gradientUnits=\"userSpaceOnUse\"\n id=\"d\"\n x1=\"89.137\"\n x2=\"147.777\"\n xlinkHref=\"#a\"\n y1=\"111.921\"\n y2=\"168.101\"\n />\n <linearGradient id=\"b\">\n <stop offset=\"0\" stopColor=\"#387eb8\" />\n <stop offset=\"1\" stopColor=\"#366994\" />\n </linearGradient>\n <linearGradient\n gradientUnits=\"userSpaceOnUse\"\n id=\"c\"\n x1=\"55.549\"\n x2=\"110.149\"\n xlinkHref=\"#b\"\n y1=\"77.07\"\n y2=\"131.853\"\n />\n </defs>\n <g color=\"#000\">\n <path\n d=\"M99.75 67.469c-28.032 0-26.281 12.156-26.281 12.156l.031 12.594h26.75V96H62.875s-17.938-2.034-17.938 26.25 15.657 27.281 15.657 27.281h9.343v-13.125s-.503-15.656 15.407-15.656h26.531s14.906.241 14.906-14.406V82.125s2.263-14.656-27.031-14.656zM85 75.938a4.808 4.808 0 014.813 4.812A4.808 4.808 0 0185 85.563a4.808 4.808 0 01-4.813-4.813A4.808 4.808 0 0185 75.937z\"\n fill=\"url(#c)\"\n overflow=\"visible\"\n style={{ marker: \"none\" }}\n transform=\"translate(-44.938 -67.469)\"\n />\n <path\n d=\"M100.546 177.315c28.032 0 26.281-12.156 26.281-12.156l-.03-12.594h-26.75v-3.781h37.374s17.938 2.034 17.938-26.25c0-28.285-15.657-27.282-15.657-27.282h-9.343v13.125s.503 15.657-15.407 15.657h-26.53s-14.907-.241-14.907 14.406v24.219s-2.263 14.656 27.031 14.656zm14.75-8.469a4.808 4.808 0 01-4.812-4.812 4.808 4.808 0 014.812-4.813 4.808 4.808 0 014.813 4.813 4.808 4.808 0 01-4.813 4.812z\"\n fill=\"url(#d)\"\n overflow=\"visible\"\n style={{ marker: \"none\" }}\n transform=\"translate(-44.938 -67.469)\"\n />\n </g>\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const JavaIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 256 346\"\n >\n <path\n d=\"M82.554 267.473s-13.198 7.675 9.393 10.272c27.369 3.122 41.356 2.675 71.517-3.034 0 0 7.93 4.972 19.003 9.279-67.611 28.977-153.019-1.679-99.913-16.517M74.292 229.659s-14.803 10.958 7.805 13.296c29.236 3.016 52.324 3.263 92.276-4.43 0 0 5.526 5.602 14.215 8.666-81.747 23.904-172.798 1.885-114.296-17.532\"\n fill=\"#5382A1\"\n />\n <path\n d=\"M143.942 165.515c16.66 19.18-4.377 36.44-4.377 36.44s42.301-21.837 22.874-49.183c-18.144-25.5-32.059-38.172 43.268-81.858 0 0-118.238 29.53-61.765 94.6\"\n fill=\"#E76F00\"\n />\n <path\n d=\"M233.364 295.442s9.767 8.047-10.757 14.273c-39.026 11.823-162.432 15.393-196.714.471-12.323-5.36 10.787-12.8 18.056-14.362 7.581-1.644 11.914-1.337 11.914-1.337-13.705-9.655-88.583 18.957-38.034 27.15 137.853 22.356 251.292-10.066 215.535-26.195M88.9 190.48s-62.771 14.91-22.228 20.323c17.118 2.292 51.243 1.774 83.03-.89 25.978-2.19 52.063-6.85 52.063-6.85s-9.16 3.923-15.787 8.448c-63.744 16.765-186.886 8.966-151.435-8.183 29.981-14.492 54.358-12.848 54.358-12.848M201.506 253.422c64.8-33.672 34.839-66.03 13.927-61.67-5.126 1.066-7.411 1.99-7.411 1.99s1.903-2.98 5.537-4.27c41.37-14.545 73.187 42.897-13.355 65.647 0 .001 1.003-.895 1.302-1.697\"\n fill=\"#5382A1\"\n />\n <path\n d=\"M162.439.371s35.887 35.9-34.037 91.101c-56.071 44.282-12.786 69.53-.023 98.377-32.73-29.53-56.75-55.526-40.635-79.72C111.395 74.612 176.918 57.393 162.439.37\"\n fill=\"#E76F00\"\n />\n <path\n d=\"M95.268 344.665c62.199 3.982 157.712-2.209 159.974-31.64 0 0-4.348 11.158-51.404 20.018-53.088 9.99-118.564 8.824-157.399 2.421.001 0 7.95 6.58 48.83 9.201\"\n fill=\"#5382A1\"\n />\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const GoIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 512 192\"\n >\n <path\n d=\"M292.533 13.295l1.124.75c13.212 8.725 22.685 20.691 28.917 35.15 1.496 2.243.499 3.49-2.493 4.237l-5.063 1.296c-11.447 2.949-20.53 5.429-31.827 8.378l-6.443 1.678c-2.32.574-2.96.333-5.428-2.477l-.348-.399c-3.519-3.988-6.155-6.652-10.817-9.03l-.899-.443c-15.705-7.727-30.911-5.484-45.12 3.74-16.952 10.968-25.677 27.172-25.428 47.364.25 19.942 13.96 36.395 33.654 39.137 16.951 2.244 31.16-3.739 42.378-16.452 2.244-2.743 4.238-5.734 6.73-9.224h-48.11c-5.235 0-6.481-3.24-4.736-7.478l.864-2.035c3.204-7.454 8.173-18.168 11.4-24.294l.704-1.319c.862-1.494 2.612-3.513 5.977-3.513h80.224c3.603-11.415 9.449-22.201 17.246-32.407 18.198-23.931 40.135-36.396 69.8-41.63 25.427-4.488 49.359-1.995 71.046 12.713 19.694 13.461 31.909 31.66 35.15 55.59 4.237 33.654-5.485 61.075-28.668 84.508-16.453 16.702-36.645 27.172-59.829 31.908-6.73 1.247-13.461 1.496-19.942 2.244-22.685-.499-43.376-6.98-60.826-21.937-12.273-10.61-20.727-23.648-24.928-38.828a104.937 104.937 0 01-10.47 16.89c-17.949 23.683-41.381 38.39-71.046 42.38-24.43 3.24-47.115-1.497-67.058-16.454-18.447-13.96-28.917-32.407-31.66-55.34-3.24-27.173 4.737-51.603 21.19-73.041 17.7-23.184 41.132-37.891 69.8-43.126 22.999-4.16 45.037-1.595 64.936 11.464zM411.12 49.017l-.798.178c-23.183 5.235-38.14 19.942-43.624 43.375-4.488 19.444 4.985 39.138 22.934 47.115 13.71 5.983 27.421 5.235 40.633-1.496 19.694-10.22 30.413-26.175 31.66-47.613-.25-3.24-.25-5.734-.749-8.227-4.436-24.401-26.664-38.324-50.056-33.332zM116.416 94.564c.997 0 1.496.748 1.496 1.745l-.499 5.983c0 .997-.997 1.745-1.745 1.745l-54.344-.249c-.997 0-1.246-.748-.748-1.496l3.49-6.232c.499-.748 1.496-1.496 2.493-1.496h49.857zM121.9 71.63c.997 0 1.496.748 1.247 1.496l-1.995 5.983c-.249.997-1.246 1.495-2.243 1.495l-117.912.25c-.997 0-1.246-.499-.748-1.247l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247H121.9zm12.963-22.934c.997 0 1.246.748.748 1.496l-4.238 6.481c-.499.748-1.745 1.496-2.493 1.496l-90.24-.25c-.998 0-1.247-.498-.749-1.246l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247h88.995z\"\n fill=\"#00ACD7\"\n />\n </Icon>\n );\n};\n","import { Icon, PropsOf } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const DotNetIcon: FunctionComponent<PropsOf<typeof Icon>> = (props) => {\n return (\n <Icon\n {...props}\n aria-hidden=\"true\"\n transform=\"rotate(360)\"\n viewBox=\"0 0 32 32\"\n >\n <path\n d=\"M4.224 10.089v11.667h1.365v-8.438a12.58 12.58 0 00-.068-1.599h.052c.099.255.224.5.37.729l6 9.302h1.672V10.089h-1.359v8.203c-.016.573.016 1.146.083 1.714h-.031a13.986 13.986 0 00-.474-.781L5.995 10.09zm12.417 0v11.667h6.203l.005-1.281h-4.813v-4.047h4.214v-1.229h-4.214v-3.875h4.521V10.09zm7.25 0v1.234h3.354v10.432h1.365V11.323h3.391v-1.234zm-23.021 10a.86.86 0 00-.609.276.91.91 0 00-.26.641.901.901 0 001.542.641c.172-.167.271-.401.271-.641s-.099-.474-.271-.641a.876.876 0 00-.641-.276H.871z\"\n fill=\"#626262\"\n />\n </Icon>\n );\n};\n","import { ExternalLinkIcon } from \"@chakra-ui/icons\";\nimport { forwardRef, Link, LinkProps } from \"@chakra-ui/react\";\nimport { useExternalLinkWarning } from \"../../contexts/ExternalLinkWarning\";\n\nexport interface ExternalLinkProps extends LinkProps {\n /**\n * Shows an external link icon. `true` by default\n */\n hasIcon?: boolean;\n /**\n * Prompts the user to confirm leaving the site. `true` by default\n */\n hasWarning?: boolean;\n /**\n * Adds the nofollow annotation to the anchor's rel attribute\n */\n noFollow?: boolean;\n}\n\nexport const ExternalLink = forwardRef<ExternalLinkProps, \"a\">(\n (\n {\n children,\n hasIcon = true,\n hasWarning = true,\n href,\n onClick,\n noFollow,\n ...props\n },\n ref\n ) => {\n const withPrompt = useExternalLinkWarning();\n\n let rel = \"noopener noreferrer\";\n\n if (hasWarning || noFollow) {\n rel += \" nofollow\";\n }\n\n return (\n <Link\n color=\"blue.500\"\n href={href}\n isExternal\n onClick={hasWarning ? withPrompt({ href, onClick }) : onClick}\n ref={ref}\n rel={rel}\n {...props}\n >\n {children} {hasIcon && <ExternalLinkIcon mb={1} ml={2} />}\n </Link>\n );\n }\n);\n\nExternalLink.displayName = \"ExternalLink\";\n","type TestIds<T extends Readonly<string[]>> = {\n [key in T[number]]: string;\n};\n\n/**\n * A helper to create scoped test ids across components which can be re-used\n * in e2e and unit tests.\n */\nexport const createTestIds = <T extends Readonly<string[]>>(\n scope: string,\n ids: T\n): TestIds<T> =>\n ids.reduce<Record<string, string>>((acc, curr) => {\n acc[curr] = `${scope}-${curr}`;\n return acc;\n }, {}) as TestIds<T>;\n","import { Link as ChakraLink, PropsOf } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nexport type NavLinkProps = PropsOf<typeof ChakraLink> &\n PropsOf<typeof RouterLink>;\n\nexport const NavLink: FunctionComponent<NavLinkProps> = (props) => {\n return <ChakraLink as={RouterLink} {...props} />;\n};\n","import { chakra, HTMLChakraProps, forwardRef } from \"@chakra-ui/react\";\n\nexport interface FormProps extends HTMLChakraProps<\"form\"> {}\n\nexport const Form = forwardRef<FormProps, \"form\">((props, ref) => (\n <chakra.form {...props} ref={ref} />\n));\n\nForm.displayName = \"Form\";\n","import { Language } from \"../../constants/languages\";\nimport { API_PATHS } from \"../../constants/url\";\nimport { Metadata } from \"./metadata\";\n\nexport interface Author {\n readonly name: string;\n readonly url: string;\n}\n\nexport interface CatalogPackage {\n name: string;\n languages: Partial<Record<Language, Record<string, unknown>>>;\n version: string;\n description: string;\n author: Author | string;\n keywords: string[];\n metadata: Metadata;\n}\n\nexport interface Packages {\n packages: CatalogPackage[];\n}\n\n/**\n * Fetch the catalog of all packages from the backend.\n */\nexport const fetchPackages = async (): Promise<Packages> => {\n const response = await fetch(API_PATHS.CATALOG_SUFFIX);\n\n if (!response.ok) {\n console.error(response.statusText);\n throw new Error(`Failed fetching packages index: ${response.statusText}`);\n }\n\n return response.json();\n};\n","import { createContext, FunctionComponent, useContext, useEffect } from \"react\";\nimport { fetchPackages, Packages } from \"../../api/package/packages\";\nimport { useRequest, UseRequestResponse } from \"../../hooks/useRequest\";\n\nconst CatalogContext = createContext<UseRequestResponse<Packages>>({\n loading: false,\n data: undefined,\n error: undefined,\n});\n\nexport const useCatalog = () => useContext(CatalogContext);\n\nexport const CatalogProvider: FunctionComponent = ({ children }) => {\n const [requestPackages, catalogResponse] = useRequest(fetchPackages);\n\n useEffect(() => {\n void requestPackages();\n }, [requestPackages]);\n\n return (\n <CatalogContext.Provider value={catalogResponse}>\n {children}\n </CatalogContext.Provider>\n );\n};\n","import { API_PATHS } from \"../../constants/url\";\n\nexport interface PackageLinksConfig {\n name: string;\n value: string;\n displayText?: string;\n}\n\nexport interface FeatureFlags {\n homeRedesign?: boolean;\n searchRedesign?: boolean;\n}\n\nexport interface Config {\n featureFlags?: FeatureFlags;\n packageLinks?: PackageLinksConfig[];\n}\n\nconst defaultConfig: Config = {};\n\nexport const fetchConfig = async (): Promise<Config> => {\n const response = await fetch(API_PATHS.CONFIG);\n\n if (!response.ok) {\n console.log(\"Failed to fetch application config, using default values\");\n return defaultConfig;\n }\n\n return response.json().catch((err) => {\n console.error(err);\n console.log(\"Invalid config response, using default values\");\n return defaultConfig;\n });\n};\n","import { createContext, FunctionComponent, useContext, useEffect } from \"react\";\nimport { fetchConfig, Config } from \"../../api/config\";\nimport { useRequest, UseRequestResponse } from \"../../hooks/useRequest\";\n\nconst ConfigContext = createContext<UseRequestResponse<Config>>({\n loading: false,\n data: undefined,\n error: undefined,\n});\n\nexport const useConfig = () => useContext(ConfigContext);\n\nexport const ConfigProvider: FunctionComponent = ({ children }) => {\n const [requestConfig, configResponse] = useRequest(fetchConfig);\n\n useEffect(() => {\n void requestConfig();\n }, [requestConfig]);\n\n return (\n <ConfigContext.Provider value={configResponse}>\n {children}\n </ConfigContext.Provider>\n );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\n// Possible utility types for re-use\ntype PromiseFn = (...args: any[]) => Promise<any>;\ntype Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T;\ntype AwaitedReturn<T extends PromiseFn> = Awaited<ReturnType<T>>;\n\nexport interface UseRequestOptions<T> {\n initialValue?: T;\n onError?: (err: Error) => void;\n onSuccess?: (res: T) => void;\n}\n\nexport interface UseRequestResponse<T> {\n loading: boolean;\n error: Error | undefined;\n data: T | undefined;\n}\n\nexport type UseRequestReturn<T extends (...args: any[]) => Promise<T>> = [\n (...args: Parameters<T>) => Promise<void>,\n UseRequestResponse<AwaitedReturn<T>>\n];\n\n/**\n * Provides an API to statefully interact with promises. This hook\n * prevents state updates if promise has not resolved before component unmounts.\n * It will return a tuple with a request() function, and an object representing the state\n */\nexport const useRequest = <T extends PromiseFn>(\n requestFn: T,\n options: UseRequestOptions<AwaitedReturn<T>> = {}\n): UseRequestReturn<T> => {\n const { initialValue, onSuccess, onError } = options;\n\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState<AwaitedReturn<T> | undefined>(initialValue);\n const [error, setError] = useState<Error | undefined>();\n\n const mountedRef = useRef(false);\n\n useEffect(() => {\n mountedRef.current = true;\n\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const statefulFetch = useCallback(\n async (...args: Parameters<T>): Promise<void> => {\n if (!mountedRef.current) return;\n\n setLoading(true);\n setError(undefined);\n\n try {\n const res = await requestFn(...args);\n onSuccess?.(res);\n\n if (mountedRef.current) {\n setData(res);\n setLoading(false);\n }\n } catch (e: any) {\n console.error(e);\n onError?.(e);\n\n if (mountedRef.current) {\n setData(initialValue);\n setError(e);\n setLoading(false);\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [onError, onSuccess]\n );\n\n return useMemo(\n () => [\n statefulFetch,\n {\n data,\n loading,\n error,\n },\n ],\n [statefulFetch, data, loading, error]\n );\n};\n","import type { MouseEventHandler } from \"react\";\n\nexport interface ExternalLinkPromptOptions {\n href?: string;\n onClick?: MouseEventHandler<HTMLAnchorElement>;\n}\n\nexport type ExternalLinkPrompt = ({\n href,\n onClick,\n}: ExternalLinkPromptOptions) => typeof onClick;\n\nexport const PREFERS_WARN_ON_EXTERNAL_LINK_CLICK =\n \"prefersWarnOnExternalLinkClick\";\n","import { ExternalLinkIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Checkbox,\n Modal,\n ModalBody,\n ModalContent,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n Text,\n Tooltip,\n} from \"@chakra-ui/react\";\nimport {\n ChangeEventHandler,\n FunctionComponent,\n MouseEventHandler,\n useState,\n} from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\nimport {\n ExternalLinkPromptOptions,\n PREFERS_WARN_ON_EXTERNAL_LINK_CLICK,\n} from \"./constants\";\n\nexport interface ExternalLinkWarningModalProps\n extends ExternalLinkPromptOptions {\n isOpen: boolean;\n onClose: () => void;\n setShouldWarn: (shouldWarn: boolean) => void;\n}\n\nexport const ExternalLinkWarningModal: FunctionComponent<ExternalLinkWarningModalProps> =\n ({ href, isOpen, onClick, onClose, setShouldWarn }) => {\n // Track a final state for showing warnings that will only be updated if a user chooses to proceed\n const [finalShouldWarn, setFinalShouldWarn] = useState(true);\n\n // Update intermediate state when preference checkmark is updated\n const onPreferenceUpdated: ChangeEventHandler<HTMLInputElement> = (e) => {\n const shouldWarn = !e.target.checked;\n setFinalShouldWarn(shouldWarn);\n };\n\n const onCancel = () => {\n // If user cancelled the navigation, reset final warning state\n setFinalShouldWarn(true);\n onClose();\n };\n\n const onProceed: MouseEventHandler<HTMLAnchorElement> = (e) => {\n // If a user decided to not show warnings in the future, update localStorage & state to reflect their decision\n if (!finalShouldWarn) {\n setShouldWarn(finalShouldWarn);\n\n try {\n localStorage.setItem(\n PREFERS_WARN_ON_EXTERNAL_LINK_CLICK,\n JSON.stringify(finalShouldWarn)\n );\n } catch {}\n }\n\n onClick?.(e);\n onClose();\n };\n\n return (\n <Modal closeOnOverlayClick={false} isOpen={isOpen} onClose={onClose}>\n <ModalOverlay>\n <ModalContent color=\"blue.800\">\n <ModalHeader>Confirm</ModalHeader>\n <ModalBody>\n <Text fontSize=\"lg\" mb={2}>\n This link is taking you to an external site\n </Text>\n <Text\n bg=\"gray.100\"\n borderRadius=\"sm\"\n color=\"blue.500\"\n fontSize=\"sm\"\n mb={4}\n p={1}\n >\n {href}\n </Text>\n <Checkbox onChange={onPreferenceUpdated}>\n Do not show this warning again.\n </Checkbox>\n </ModalBody>\n <ModalFooter>\n <Button onClick={onCancel} variant=\"ghost\">\n Cancel\n </Button>\n\n <Tooltip hasArrow label={href} placement=\"top\">\n <ExternalLink\n hasIcon={false}\n hasWarning={false}\n href={href}\n noFollow\n onClick={onProceed}\n >\n <Button\n colorScheme=\"blue\"\n ml={4}\n rightIcon={<ExternalLinkIcon />}\n tabIndex={0}\n variant=\"ghost\"\n >\n Proceed\n </Button>\n </ExternalLink>\n </Tooltip>\n </ModalFooter>\n </ModalContent>\n </ModalOverlay>\n </Modal>\n );\n };\n","import { useDisclosure } from \"@chakra-ui/react\";\nimport {\n useContext,\n useState,\n createContext,\n FunctionComponent,\n MouseEventHandler,\n useCallback,\n} from \"react\";\nimport {\n PREFERS_WARN_ON_EXTERNAL_LINK_CLICK,\n ExternalLinkPrompt,\n ExternalLinkPromptOptions,\n} from \"./constants\";\nimport { ExternalLinkWarningModal } from \"./ExternalLinkWarningModal\";\n\nconst ExternalLinkWarningContext = createContext<ExternalLinkPrompt>(\n ({ onClick }) => onClick\n);\n\nexport const useExternalLinkWarning = () =>\n useContext(ExternalLinkWarningContext);\n\nexport const ExternalLinkWarningProvider: FunctionComponent = ({\n children,\n}) => {\n const [modalOption, setModalOptions] =\n useState<ExternalLinkPromptOptions | null>(null);\n\n const { isOpen, onOpen, onClose } = useDisclosure({\n // Reset the modal options when closed\n onClose: () => {\n setModalOptions(null);\n },\n });\n\n // Determines initial state from localStorage. If no value is found, default to showing warning\n const [shouldWarn, setShouldWarn] = useState(() => {\n try {\n const saved =\n localStorage.getItem(PREFERS_WARN_ON_EXTERNAL_LINK_CLICK) ?? \"true\";\n return JSON.parse(saved);\n } catch {\n return true;\n }\n });\n\n // Takes in an href & onClick to set options for modal. If it should warn the user, it will wrap the onClick\n // With additional logic to show the modal\n const withPrompt = useCallback<ExternalLinkPrompt>(\n ({ href, onClick }) => {\n if (!shouldWarn) return onClick;\n\n const handler: MouseEventHandler<HTMLAnchorElement> = (e) => {\n setModalOptions({ href, onClick });\n e.preventDefault();\n onOpen();\n };\n\n return handler;\n },\n [onOpen, shouldWarn]\n );\n\n return (\n <ExternalLinkWarningContext.Provider value={withPrompt}>\n {children}\n <ExternalLinkWarningModal\n isOpen={isOpen}\n onClose={onClose}\n setShouldWarn={setShouldWarn}\n {...modalOption}\n />\n </ExternalLinkWarningContext.Provider>\n );\n};\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ !function(e){function t(t){for(var n,a,c=t[0],i=t[1],f=t[2],p=0,s=[];p<c.length;p++)a=c[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(l&&l(t);s.length;)s.shift()();return u.push.apply(u,f||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,c=1;c<r.length;c++){var i=r[c];0!==o[i]&&(n=!1)}n&&(u.splice(t--,1),e=a(a.s=r[0]))}return e}var n={},o={3:0},u=[];function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,a.nc&&c.setAttribute("nonce",a.nc),c.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{0:"074504b3",1:"272635ed",4:"53a8d553",6:"f37a117e",7:"a4739ebc",8:"b0c4d0d8",9:"dcbf33c2",10:"d664efc4",11:"6f7f0c4b",12:"c21a676e",13:"8635b63a",14:"86414212",15:"78ca2283"}[e]+".chunk.js"}(e);var i=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",i.name="ChunkLoadError",i.type=n,i.request=u,r[1](i)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},a.m=e,a.c=n,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(r,n,function(t){return e[t]}.bind(null,n));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/",a.oe=function(e){throw console.error(e),e};var c=this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[],i=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var l=i;r()}([]);
2
+ //# sourceMappingURL=runtime-main.fa5c7ad1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.fa5c7ad1.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + {\"0\":\"074504b3\",\"1\":\"272635ed\",\"4\":\"53a8d553\",\"6\":\"f37a117e\",\"7\":\"a4739ebc\",\"8\":\"b0c4d0d8\",\"9\":\"dcbf33c2\",\"10\":\"d664efc4\",\"11\":\"6f7f0c4b\",\"12\":\"c21a676e\",\"13\":\"8635b63a\",\"14\":\"86414212\",\"15\":\"78ca2283\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonpconstruct-hub-webapp\"] = this[\"webpackJsonpconstruct-hub-webapp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[1],{568:function(t,e,n){"use strict";n.d(e,"a",(function(){return h})),n.d(e,"b",(function(){return f}));var r=n(99),a=n(21),i=n(66),o=n(43),u=n(72),s=n(25),c=n(8),d=n(0);function l(){return l=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},l.apply(this,arguments)}var h=Object(a.a)((function(t,e){var n=Object(i.a)("Tag",t),r=Object(o.b)(t),a=l({display:"inline-flex",verticalAlign:"top",alignItems:"center",maxWidth:"100%"},n.container);return d.createElement(u.b,{value:n},d.createElement(s.a.span,l({ref:e},r,{__css:a})))}));c.a&&(h.displayName="Tag");var f=Object(a.a)((function(t,e){var n=Object(u.d)();return d.createElement(s.a.span,l({ref:e,isTruncated:!0},t,{__css:n.label}))}));c.a&&(f.displayName="TagLabel");var m=Object(a.a)((function(t,e){return d.createElement(r.a,l({ref:e,verticalAlign:"top",marginEnd:"0.5rem"},t))}));c.a&&(m.displayName="TagLeftIcon");var g=Object(a.a)((function(t,e){return d.createElement(r.a,l({ref:e,verticalAlign:"top",marginStart:"0.5rem"},t))}));c.a&&(g.displayName="TagRightIcon");var w=function(t){return d.createElement(r.a,l({verticalAlign:"inherit",viewBox:"0 0 512 512"},t),d.createElement("path",{fill:"currentColor",d:"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z"}))};c.a&&(w.displayName="TagCloseIcon");c.a},569:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n(73),a=Object(r.a)({d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",displayName:"ChevronRightIcon"})},582:function(t,e,n){"use strict";function r(t,e){if(e.length<t)throw new TypeError(t+" argument"+(t>1?"s":"")+" required, but only "+e.length+" present")}function a(t){return r(1,arguments),t instanceof Date||"object"===typeof t&&"[object Date]"===Object.prototype.toString.call(t)}function i(t){r(1,arguments);var e=Object.prototype.toString.call(t);return t instanceof Date||"object"===typeof t&&"[object Date]"===e?new Date(t.getTime()):"number"===typeof t||"[object Number]"===e?new Date(t):("string"!==typeof t&&"[object String]"!==e||"undefined"===typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}function o(t){if(r(1,arguments),!a(t)&&"number"!==typeof t)return!1;var e=i(t);return!isNaN(Number(e))}n.d(e,"a",(function(){return ut}));var u={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},s=function(t,e,n){var r,a=u[t];return r="string"===typeof a?a:1===e?a.one:a.other.replace("{{count}}",e.toString()),null!==n&&void 0!==n&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function c(t){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.width?String(e.width):t.defaultWidth,r=t.formats[n]||t.formats[t.defaultWidth];return r}}var d={date:c({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:c({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:c({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},l={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},h=function(t,e,n,r){return l[t]};function f(t){return function(e,n){var r,a=n||{};if("formatting"===(a.context?String(a.context):"standalone")&&t.formattingValues){var i=t.defaultFormattingWidth||t.defaultWidth,o=a.width?String(a.width):i;r=t.formattingValues[o]||t.formattingValues[i]}else{var u=t.defaultWidth,s=a.width?String(a.width):t.defaultWidth;r=t.values[s]||t.values[u]}return r[t.argumentCallback?t.argumentCallback(e):e]}}var m={ordinalNumber:function(t,e){var n=Number(t),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:f({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:f({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(t){return t-1}}),month:f({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:f({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:f({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})};function g(t){return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.width,a=r&&t.matchPatterns[r]||t.matchPatterns[t.defaultMatchWidth],i=e.match(a);if(!i)return null;var o,u=i[0],s=r&&t.parsePatterns[r]||t.parsePatterns[t.defaultParseWidth],c=Array.isArray(s)?v(s,(function(t){return t.test(u)})):w(s,(function(t){return t.test(u)}));o=t.valueCallback?t.valueCallback(c):c,o=n.valueCallback?n.valueCallback(o):o;var d=e.slice(u.length);return{value:o,rest:d}}}function w(t,e){for(var n in t)if(t.hasOwnProperty(n)&&e(t[n]))return n}function v(t,e){for(var n=0;n<t.length;n++)if(e(t[n]))return n}var b,y={ordinalNumber:(b={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(t){return parseInt(t,10)}},function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.match(b.matchPattern);if(!n)return null;var r=n[0],a=t.match(b.parsePattern);if(!a)return null;var i=b.valueCallback?b.valueCallback(a[0]):a[0];i=e.valueCallback?e.valueCallback(i):i;var o=t.slice(r.length);return{value:i,rest:o}}),era:g({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:g({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(t){return t+1}}),month:g({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:g({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:g({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},p={code:"en-US",formatDistance:s,formatLong:d,formatRelative:h,localize:m,match:y,options:{weekStartsOn:0,firstWeekContainsDate:1}};function T(t){if(null===t||!0===t||!1===t)return NaN;var e=Number(t);return isNaN(e)?e:e<0?Math.ceil(e):Math.floor(e)}function C(t,e){r(2,arguments);var n=i(t).getTime(),a=T(e);return new Date(n+a)}function M(t,e){r(2,arguments);var n=T(e);return C(t,-n)}function D(t,e){for(var n=t<0?"-":"",r=Math.abs(t).toString();r.length<e;)r="0"+r;return n+r}var x={y:function(t,e){var n=t.getUTCFullYear(),r=n>0?n:1-n;return D("yy"===e?r%100:r,e.length)},M:function(t,e){var n=t.getUTCMonth();return"M"===e?String(n+1):D(n+1,2)},d:function(t,e){return D(t.getUTCDate(),e.length)},a:function(t,e){var n=t.getUTCHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:function(t,e){return D(t.getUTCHours()%12||12,e.length)},H:function(t,e){return D(t.getUTCHours(),e.length)},m:function(t,e){return D(t.getUTCMinutes(),e.length)},s:function(t,e){return D(t.getUTCSeconds(),e.length)},S:function(t,e){var n=e.length,r=t.getUTCMilliseconds();return D(Math.floor(r*Math.pow(10,n-3)),e.length)}},U=864e5;function k(t){r(1,arguments);var e=1,n=i(t),a=n.getUTCDay(),o=(a<e?7:0)+a-e;return n.setUTCDate(n.getUTCDate()-o),n.setUTCHours(0,0,0,0),n}function P(t){r(1,arguments);var e=i(t),n=e.getUTCFullYear(),a=new Date(0);a.setUTCFullYear(n+1,0,4),a.setUTCHours(0,0,0,0);var o=k(a),u=new Date(0);u.setUTCFullYear(n,0,4),u.setUTCHours(0,0,0,0);var s=k(u);return e.getTime()>=o.getTime()?n+1:e.getTime()>=s.getTime()?n:n-1}function S(t){r(1,arguments);var e=P(t),n=new Date(0);n.setUTCFullYear(e,0,4),n.setUTCHours(0,0,0,0);var a=k(n);return a}var W=6048e5;function O(t,e){r(1,arguments);var n=e||{},a=n.locale,o=a&&a.options&&a.options.weekStartsOn,u=null==o?0:T(o),s=null==n.weekStartsOn?u:T(n.weekStartsOn);if(!(s>=0&&s<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var c=i(t),d=c.getUTCDay(),l=(d<s?7:0)+d-s;return c.setUTCDate(c.getUTCDate()-l),c.setUTCHours(0,0,0,0),c}function Y(t,e){r(1,arguments);var n=i(t,e),a=n.getUTCFullYear(),o=e||{},u=o.locale,s=u&&u.options&&u.options.firstWeekContainsDate,c=null==s?1:T(s),d=null==o.firstWeekContainsDate?c:T(o.firstWeekContainsDate);if(!(d>=1&&d<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var l=new Date(0);l.setUTCFullYear(a+1,0,d),l.setUTCHours(0,0,0,0);var h=O(l,e),f=new Date(0);f.setUTCFullYear(a,0,d),f.setUTCHours(0,0,0,0);var m=O(f,e);return n.getTime()>=h.getTime()?a+1:n.getTime()>=m.getTime()?a:a-1}function E(t,e){r(1,arguments);var n=e||{},a=n.locale,i=a&&a.options&&a.options.firstWeekContainsDate,o=null==i?1:T(i),u=null==n.firstWeekContainsDate?o:T(n.firstWeekContainsDate),s=Y(t,e),c=new Date(0);c.setUTCFullYear(s,0,u),c.setUTCHours(0,0,0,0);var d=O(c,e);return d}var N=6048e5;var j="midnight",q="noon",H="morning",F="afternoon",L="evening",z="night",A={G:function(t,e,n){var r=t.getUTCFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(t,e,n){if("yo"===e){var r=t.getUTCFullYear(),a=r>0?r:1-r;return n.ordinalNumber(a,{unit:"year"})}return x.y(t,e)},Y:function(t,e,n,r){var a=Y(t,r),i=a>0?a:1-a;return"YY"===e?D(i%100,2):"Yo"===e?n.ordinalNumber(i,{unit:"year"}):D(i,e.length)},R:function(t,e){return D(P(t),e.length)},u:function(t,e){return D(t.getUTCFullYear(),e.length)},Q:function(t,e,n){var r=Math.ceil((t.getUTCMonth()+1)/3);switch(e){case"Q":return String(r);case"QQ":return D(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(t,e,n){var r=Math.ceil((t.getUTCMonth()+1)/3);switch(e){case"q":return String(r);case"qq":return D(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(t,e,n){var r=t.getUTCMonth();switch(e){case"M":case"MM":return x.M(t,e);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(t,e,n){var r=t.getUTCMonth();switch(e){case"L":return String(r+1);case"LL":return D(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(t,e,n,a){var o=function(t,e){r(1,arguments);var n=i(t),a=O(n,e).getTime()-E(n,e).getTime();return Math.round(a/N)+1}(t,a);return"wo"===e?n.ordinalNumber(o,{unit:"week"}):D(o,e.length)},I:function(t,e,n){var a=function(t){r(1,arguments);var e=i(t),n=k(e).getTime()-S(e).getTime();return Math.round(n/W)+1}(t);return"Io"===e?n.ordinalNumber(a,{unit:"week"}):D(a,e.length)},d:function(t,e,n){return"do"===e?n.ordinalNumber(t.getUTCDate(),{unit:"date"}):x.d(t,e)},D:function(t,e,n){var a=function(t){r(1,arguments);var e=i(t),n=e.getTime();e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0);var a=e.getTime(),o=n-a;return Math.floor(o/U)+1}(t);return"Do"===e?n.ordinalNumber(a,{unit:"dayOfYear"}):D(a,e.length)},E:function(t,e,n){var r=t.getUTCDay();switch(e){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(t,e,n,r){var a=t.getUTCDay(),i=(a-r.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return D(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(a,{width:"short",context:"formatting"});default:return n.day(a,{width:"wide",context:"formatting"})}},c:function(t,e,n,r){var a=t.getUTCDay(),i=(a-r.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return D(i,e.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(a,{width:"narrow",context:"standalone"});case"cccccc":return n.day(a,{width:"short",context:"standalone"});default:return n.day(a,{width:"wide",context:"standalone"})}},i:function(t,e,n){var r=t.getUTCDay(),a=0===r?7:r;switch(e){case"i":return String(a);case"ii":return D(a,e.length);case"io":return n.ordinalNumber(a,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(t,e,n){var r=t.getUTCHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(t,e,n){var r,a=t.getUTCHours();switch(r=12===a?q:0===a?j:a/12>=1?"pm":"am",e){case"b":case"bb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(t,e,n){var r,a=t.getUTCHours();switch(r=a>=17?L:a>=12?F:a>=4?H:z,e){case"B":case"BB":case"BBB":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(t,e,n){if("ho"===e){var r=t.getUTCHours()%12;return 0===r&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return x.h(t,e)},H:function(t,e,n){return"Ho"===e?n.ordinalNumber(t.getUTCHours(),{unit:"hour"}):x.H(t,e)},K:function(t,e,n){var r=t.getUTCHours()%12;return"Ko"===e?n.ordinalNumber(r,{unit:"hour"}):D(r,e.length)},k:function(t,e,n){var r=t.getUTCHours();return 0===r&&(r=24),"ko"===e?n.ordinalNumber(r,{unit:"hour"}):D(r,e.length)},m:function(t,e,n){return"mo"===e?n.ordinalNumber(t.getUTCMinutes(),{unit:"minute"}):x.m(t,e)},s:function(t,e,n){return"so"===e?n.ordinalNumber(t.getUTCSeconds(),{unit:"second"}):x.s(t,e)},S:function(t,e){return x.S(t,e)},X:function(t,e,n,r){var a=(r._originalDate||t).getTimezoneOffset();if(0===a)return"Z";switch(e){case"X":return B(a);case"XXXX":case"XX":return G(a);default:return G(a,":")}},x:function(t,e,n,r){var a=(r._originalDate||t).getTimezoneOffset();switch(e){case"x":return B(a);case"xxxx":case"xx":return G(a);default:return G(a,":")}},O:function(t,e,n,r){var a=(r._originalDate||t).getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+Q(a,":");default:return"GMT"+G(a,":")}},z:function(t,e,n,r){var a=(r._originalDate||t).getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+Q(a,":");default:return"GMT"+G(a,":")}},t:function(t,e,n,r){var a=r._originalDate||t;return D(Math.floor(a.getTime()/1e3),e.length)},T:function(t,e,n,r){return D((r._originalDate||t).getTime(),e.length)}};function Q(t,e){var n=t>0?"-":"+",r=Math.abs(t),a=Math.floor(r/60),i=r%60;if(0===i)return n+String(a);var o=e||"";return n+String(a)+o+D(i,2)}function B(t,e){return t%60===0?(t>0?"-":"+")+D(Math.abs(t)/60,2):G(t,e)}function G(t,e){var n=e||"",r=t>0?"-":"+",a=Math.abs(t);return r+D(Math.floor(a/60),2)+n+D(a%60,2)}var R=A;function X(t,e){switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}}function I(t,e){switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}}var J={p:I,P:function(t,e){var n,r=t.match(/(P+)(p+)?/),a=r[1],i=r[2];if(!i)return X(t,e);switch(a){case"P":n=e.dateTime({width:"short"});break;case"PP":n=e.dateTime({width:"medium"});break;case"PPP":n=e.dateTime({width:"long"});break;default:n=e.dateTime({width:"full"})}return n.replace("{{date}}",X(a,e)).replace("{{time}}",I(i,e))}},_=J;function V(t){var e=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return e.setUTCFullYear(t.getFullYear()),t.getTime()-e.getTime()}var K=["D","DD"],$=["YY","YYYY"];function Z(t){return-1!==K.indexOf(t)}function tt(t){return-1!==$.indexOf(t)}function et(t,e,n){if("YYYY"===t)throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(e,"`) for formatting years to the input `").concat(n,"`; see: https://git.io/fxCyr"));if("YY"===t)throw new RangeError("Use `yy` instead of `YY` (in `".concat(e,"`) for formatting years to the input `").concat(n,"`; see: https://git.io/fxCyr"));if("D"===t)throw new RangeError("Use `d` instead of `D` (in `".concat(e,"`) for formatting days of the month to the input `").concat(n,"`; see: https://git.io/fxCyr"));if("DD"===t)throw new RangeError("Use `dd` instead of `DD` (in `".concat(e,"`) for formatting days of the month to the input `").concat(n,"`; see: https://git.io/fxCyr"))}var nt=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,rt=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,at=/^'([^]*?)'?$/,it=/''/g,ot=/[a-zA-Z]/;function ut(t,e,n){r(2,arguments);var a=String(e),u=n||{},s=u.locale||p,c=s.options&&s.options.firstWeekContainsDate,d=null==c?1:T(c),l=null==u.firstWeekContainsDate?d:T(u.firstWeekContainsDate);if(!(l>=1&&l<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var h=s.options&&s.options.weekStartsOn,f=null==h?0:T(h),m=null==u.weekStartsOn?f:T(u.weekStartsOn);if(!(m>=0&&m<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!s.localize)throw new RangeError("locale must contain localize property");if(!s.formatLong)throw new RangeError("locale must contain formatLong property");var g=i(t);if(!o(g))throw new RangeError("Invalid time value");var w=V(g),v=M(g,w),b={firstWeekContainsDate:l,weekStartsOn:m,locale:s,_originalDate:g},y=a.match(rt).map((function(t){var e=t[0];return"p"===e||"P"===e?(0,_[e])(t,s.formatLong,b):t})).join("").match(nt).map((function(n){if("''"===n)return"'";var r=n[0];if("'"===r)return st(n);var a=R[r];if(a)return!u.useAdditionalWeekYearTokens&&tt(n)&&et(n,e,t),!u.useAdditionalDayOfYearTokens&&Z(n)&&et(n,e,t),a(v,n,s.localize,b);if(r.match(ot))throw new RangeError("Format string contains an unescaped latin alphabet character `"+r+"`");return n})).join("");return y}function st(t){return t.match(at)[1].replace(it,"'")}}}]);
2
- //# sourceMappingURL=1.bd0a2241.chunk.js.map
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[10],{228:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n(0),o=n(239),a={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"}}},c=n(109),i=n(1),s=function(e){var t=e.children,n=e.meta,s=e.pageName,l=Object(c.b)(a[s]);Object(r.useEffect)((function(){l()}),[l]);var d=n.suffix,u=void 0===d||d,h=n.title,b=n.description,p=u?"".concat(h," - Construct Hub"):h;return Object(i.jsxs)(i.Fragment,{children:[Object(i.jsxs)(o.a,{children:[!1,Object(i.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(i.jsx)("meta",{charSet:"utf-8"}),Object(i.jsx)("title",{children:p}),Object(i.jsx)("meta",{content:p,property:"og:title"}),Object(i.jsx)("meta",{content:p,name:"twitter:title"}),Object(i.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(i.jsx)("meta",{content:b,name:"description"}),Object(i.jsx)("meta",{content:b,property:"og:description"}),Object(i.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},585:function(e,t,n){"use strict";n.r(t),n.d(t,"FAQ",(function(){return ne})),n.d(t,"default",(function(){return ne}));var r=n(184),o=n(205),a=n(4),c=n(99),i=n(21),s=n(66),l=n(43),d=n(72),u=n(25),h=n(195),b=n(20),p=n(8),j=n(28),m=n(146),f=n(0),g=n(217),O=n(136),y=n(139),x=n(135),v=n(186),w=n(91),C=n(167);function k(){return k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},k.apply(this,arguments)}function I(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var D=Object(g.a)(),A=Object(a.a)(D,4),P=A[0],H=(A[1],A[2]),T=A[3];function K(e){var t=e.onChange,n=e.defaultIndex,r=e.index,o=e.allowMultiple,c=e.allowToggle,i=I(e,["onChange","defaultIndex","index","allowMultiple","allowToggle"]);!function(e){var t=e.index||e.defaultIndex,n=!Object(p.l)(t)&&!Object(p.b)(t)&&e.allowMultiple;Object(j.f)({condition:!!n,message:"If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: "+typeof t+","})}(e),function(e){Object(j.f)({condition:!(!e.allowMultiple||!e.allowToggle),message:"If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not"})}(e);var s=H(),l=Object(f.useState)(-1),d=Object(a.a)(l,2),u=d[0],h=d[1];Object(O.a)((function(){h(-1)}));var b=Object(y.b)({value:r,defaultValue:function(){return o?null!=n?n:[]:null!=n?n:-1},onChange:t}),m=Object(a.a)(b,2),g=m[0],x=m[1];return{index:g,setIndex:x,htmlProps:i,getAccordionItemProps:function(e){var t=!1;null!==e&&(t=Object(p.b)(g)?g.includes(e):g===e);return{isOpen:t,onChange:function(t){if(null!==e)if(o&&Object(p.b)(g)){var n=t?Object(w.a)(g,e):Object(w.d)(g,e);x(n)}else t?x(e):c&&x(-1)}}},focusedIndex:u,setFocusedIndex:h,descendants:s}}var S=Object(m.a)({name:"AccordionContext",errorMessage:"useAccordionContext: `context` is undefined. Seems you forgot to wrap the accordion components in `<Accordion />`"}),q=Object(a.a)(S,2),M=q[0],E=q[1];function F(e){var t=e.isDisabled,n=e.isFocusable,r=e.id,o=I(e,["isDisabled","isFocusable","id"]),c=E(),i=c.getAccordionItemProps,s=c.setFocusedIndex,l=Object(f.useRef)(null),d=Object(x.c)(r,"accordion-button","accordion-panel"),u=Object(a.a)(d,2),h=u[0],p=u[1];!function(e){Object(j.f)({condition:!(!e.isFocusable||e.isDisabled),message:"Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well.\n "})}(e);var m=T({disabled:t&&!n}),g=m.register,O=m.index,y=m.descendants,w=i(-1===O?null:O),D=w.isOpen,A=w.onChange;!function(e){Object(j.f)({condition:e.isOpen&&!!e.isDisabled,message:"Cannot open a disabled accordion item"})}({isOpen:D,isDisabled:t});var P=Object(f.useCallback)((function(){null==A||A(!D),s(O)}),[O,s,D,A]),H=Object(f.useCallback)((function(e){var t={ArrowDown:function(){var e=y.nextEnabled(O);e&&Object(C.a)(e.node)},ArrowUp:function(){var e=y.prevEnabled(O);e&&Object(C.a)(e.node)},Home:function(){var e=y.firstEnabled();e&&Object(C.a)(e.node)},End:function(){var e=y.lastEnabled();e&&Object(C.a)(e.node)}}[Object(b.m)(e)];t&&(e.preventDefault(),t(e))}),[y,O]),K=Object(f.useCallback)((function(){s(O)}),[s,O]),S=Object(f.useCallback)((function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),k({},e,{type:"button",ref:Object(v.a)(g,l,n),id:h,disabled:!!t,"aria-expanded":!!D,"aria-controls":p,onClick:Object(j.b)(e.onClick,P),onFocus:Object(j.b)(e.onFocus,K),onKeyDown:Object(j.b)(e.onKeyDown,H)})}),[h,t,D,P,K,H,p,g]),q=Object(f.useCallback)((function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),k({},e,{ref:t,role:"region",id:p,"aria-labelledby":h,hidden:!D})}),[h,D,p]);return{isOpen:D,isDisabled:t,isFocusable:n,onOpen:function(){null==A||A(!0)},onClose:function(){null==A||A(!1)},getButtonProps:S,getPanelProps:q,htmlProps:o}}function W(){return W=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},W.apply(this,arguments)}function N(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var _=Object(i.a)((function(e,t){var n=e.children,r=e.reduceMotion,o=N(e,["children","reduceMotion"]),a=Object(s.a)("Accordion",o),c=K(Object(l.b)(o)),i=c.htmlProps,h=c.descendants,p=N(c,["htmlProps","descendants"]),j=f.useMemo((function(){return W({},p,{reduceMotion:!!r})}),[p,r]);return f.createElement(P,{value:h},f.createElement(M,{value:j},f.createElement(d.b,{value:a},f.createElement(u.a.div,W({ref:t},i,{className:Object(b.d)("chakra-accordion",o.className)}),n))))}));p.a&&(_.displayName="Accordion");var z=Object(m.a)({name:"AccordionItemContext",errorMessage:"useAccordionItemContext: `context` is undefined. Seems you forgot to wrap the accordion item parts in `<AccordionItem />` "}),B=Object(a.a)(z,2),J=B[0],L=B[1],Y=Object(i.a)((function(e,t){var n=e.children,r=e.className,o=F(e),a=o.htmlProps,c=N(o,["htmlProps"]),i=W({},Object(d.d)().container,{overflowAnchor:"none"}),s=f.useMemo((function(){return c}),[c]);return f.createElement(J,{value:s},f.createElement(u.a.div,W({ref:t},a,{className:Object(b.d)("chakra-accordion__item",r),__css:i}),Object(j.e)(n,{isExpanded:!!c.isOpen,isDisabled:!!c.isDisabled})))}));p.a&&(Y.displayName="AccordionItem");var G=Object(i.a)((function(e,t){var n=(0,L().getButtonProps)(e,t),r=W({display:"flex",alignItems:"center",width:"100%",outline:0},Object(d.d)().button);return f.createElement(u.a.button,W({},n,{className:Object(b.d)("chakra-accordion__button",e.className),__css:r}))}));p.a&&(G.displayName="AccordionButton");var R=Object(i.a)((function(e,t){var n=E().reduceMotion,r=L(),o=r.getPanelProps,a=r.isOpen,c=o(e,t),i=Object(b.d)("chakra-accordion__panel",e.className),s=Object(d.d)();n||delete c.hidden;var l=f.createElement(u.a.div,W({},c,{__css:s.panel,className:i}));return n?l:f.createElement(h.a,{in:a},l)}));p.a&&(R.displayName="AccordionPanel");var Q=function(e){var t=L(),n=t.isOpen,r=t.isDisabled,o=E().reduceMotion,a=Object(b.d)("chakra-accordion__icon",e.className),i=W({opacity:r?.4:1,transform:n?"rotate(-180deg)":void 0,transition:o?void 0:"transform 0.2s",transformOrigin:"center"},Object(d.d)().icon);return f.createElement(c.a,W({viewBox:"0 0 24 24","aria-hidden":!0,className:a,__css:i},e),f.createElement("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"}))};p.a&&(Q.displayName="AccordionIcon");var U=n(228),V=n(189),X=n(1),Z=function(e){var t=e.question,n=e.children;return Object(X.jsxs)(Y,{children:[Object(X.jsxs)(G,{children:[Object(X.jsx)(r.a,{flex:"1",py:2,textAlign:"left",children:Object(X.jsx)(o.a,{as:"h3",ml:8,size:"sm",children:t})}),Object(X.jsx)(Q,{})]}),Object(X.jsx)(R,{px:12,py:4,children:Object(X.jsx)(V.a,{color:"gray.800",fontSize:"md",sx:{p:{marginTop:"0",marginBottom:"4"}},children:n})})]})},$=n(55),ee=function(e){var t=e.href,n=e.children;return Object(X.jsx)($.a,{color:"inherit",hasWarning:!1,href:t,textDecoration:"underline",children:n})},te=function(e){var t=e.heading,n=e.children;return Object(X.jsxs)(Y,{children:[Object(X.jsxs)(G,{children:[Object(X.jsx)(r.a,{flex:"1",textAlign:"left",children:Object(X.jsx)(o.a,{as:"h2",ml:4,size:"lg",children:t})}),Object(X.jsx)(Q,{})]}),Object(X.jsx)(R,{p:0,children:Object(X.jsx)(_,{allowMultiple:!0,w:"100%",children:n})})]})},ne=function(){return Object(X.jsx)(U.a,{meta:{title:"FAQ",description:"Frequently Asked Questions"},pageName:"faq",children:Object(X.jsxs)(r.a,{bg:"white",color:"blue.800",h:"100%",w:"100%",children:[Object(X.jsx)(r.a,{bg:"gray.50",py:20,width:"100%",children:Object(X.jsx)(o.a,{as:"h1",mx:"auto",textAlign:"center",children:"Frequently Asked Questions"})}),Object(X.jsxs)(_,{allowMultiple:!0,defaultIndex:[0,1],children:[Object(X.jsxs)(te,{heading:"General",children:[Object(X.jsx)(Z,{question:"What is Construct Hub?",children:Object(X.jsx)("p",{children:"It is a central destination to discover and share cloud application design patterns and reference architectures defined for the AWS CDK, CDK for Kubernetes (CDK8s), CDK for Terraform (CDKtf) and any other construct-based tool."})}),Object(X.jsxs)(Z,{question:"Why should I use Construct Hub?",children:[Object(X.jsx)("p",{children:"Construct Hub is built to serve the community that uses the constructs programming model (CPM) and to allow them find publicly available constructs they can reuse. Before the Construct Hub, developers did not have an easy way to discover construct libraries created by the community since they were published across various package managers and without a central index."}),Object(X.jsx)("p",{children:"The Construct Hub is a central, trusted venue CDK developers can use to discover published constructs to help them build their applications. In the Dev Preview Construct Hub you can discover constructs in TypeScript and Python and read their documentation and improved API reference in the programming language that the package supports."})]}),Object(X.jsxs)(Z,{question:"How can I add my construct to the Construct Hub?",children:[Object(X.jsxs)("p",{children:["In order to add your construct to the Construct Hub, you will need to publish it to the"," ",Object(X.jsx)(ee,{href:"https://www.npmjs.com/",children:"npmjs.com"})," ","registry, use a permissive license (Apache, BSD, MIT), and annotate it with one of the supported keywords (aws-cdk, cdk8s or cdktf)."]}),Object(X.jsxs)("p",{children:["Additionally, since one of the main goals of the Construct Hub is to enable an ecosystem of constructs that can be consumed by all CDK languages, your library ",Object(X.jsx)("strong",{children:"must"})," be compiled with"," ",Object(X.jsx)(ee,{href:"https://aws.github.io/jsii/",children:"JSII"}),", which is a TypeScript-based, which is a TypeScript-based programming language for creating multi-language libraries. The Construct Hub leverages the type information produced by the JSII compiler in order to render the rich multi-language API reference displayed at the Construct Hub."]}),Object(X.jsx)("p",{children:"The Construct Hub monitors all updates to the npm Registry and will list any packages that meet the above requirements within 5-10 minutes. If your package does not appear in the Construct Hub, please file an issue on our GitHub repository."}),Object(X.jsxs)("p",{children:["There\u2019s some great community content about publishing construct libraries. Check out"," ",Object(X.jsx)(ee,{href:"https://dev.to/aws-builders/a-beginner-s-guide-to-create-aws-cdk-construct-library-with-projen-5eh4",children:'"A Beginner\'s Guide to Create AWS CDK Construct Library with projen"'})," ","by ",Object(X.jsx)(ee,{href:"https://hayao-k.dev/",children:"hayao-k"}),"."]}),Object(X.jsxs)("p",{children:["If you already have a library written in TypeScript and you are looking for information on how to migrate to JSII, see the"," ",Object(X.jsx)(ee,{href:"https://aws.github.io/jsii/user-guides/#library-author-guide",children:"JSII library author guide"}),"."]})]}),Object(X.jsx)(Z,{question:"What is a construct?",children:Object(X.jsxs)("p",{children:["The Constructs Programming Model (CPM) introduces the notion of"," ",Object(X.jsx)("strong",{children:"constructs"}),", which represent cloud building blocks that can be used to assemble complete applications of any complexity. AWS, enterprises, start-ups, and individual developers use CDK constructs to share proven architecture patterns as reusable code libraries, so that everyone can benefit from the collective wisdom of the community."]})}),Object(X.jsx)(Z,{question:"Who owns the constructs in the Construct Hub?",children:Object(X.jsx)("p",{children:"The constructs are owned by the publishers of the packages. Constructs are user generated content that are governed by their own license terms which is displayed in the search results and can be accessed directly through the hyperlinked package page."})}),Object(X.jsx)(Z,{question:"Is the content served in Construct Hub meant to be consumed programmatically?",children:Object(X.jsxs)("p",{children:["No. The content displayed in the site is user generated, with some display formatting. We do not advise that you consume constructs from the search results programmatically. Please note that Construct Hub is a search engine intended to surface third party content from a public endpoint and we provide these results for your convenience AS-IS in accordance with our"," ",Object(X.jsx)(ee,{href:"https://constructs.dev/terms",children:"Site Terms"}),"."]})}),Object(X.jsx)(Z,{question:"Which CDK types are available on the Construct Hub?",children:Object(X.jsx)("p",{children:"AWS CDK, CDK for Kubernetes (CDK8s) and CDK for Terraform (CDKtf)."})}),Object(X.jsx)(Z,{question:"What is AWS CDK?",children:Object(X.jsxs)("p",{children:["AWS CDK is an open-source software development framework for defining applications on AWS and reusable abstractions using familiar programming languages and rich object-oriented APIs. AWS CDK apps synthesize intostandard CloudFormation templates which can be deployed to create infrastructure on AWS. For more information, click"," ",Object(X.jsx)(ee,{href:"https://docs.aws.amazon.com/cdk/latest/guide/home.html",children:"here"}),"."]})}),Object(X.jsx)(Z,{question:"What is CDK8s?",children:Object(X.jsxs)("p",{children:["CDK8s is an open-source software development framework for defining Kubernetes applications and reusable abstractions using familiar programming languages and rich object-oriented APIs."," ",Object(X.jsx)("strong",{children:"cdk8s"})," apps synthesize into standard Kubernetes manifests which can be applied to any Kubernetes cluster. For more information, click"," ",Object(X.jsx)(ee,{href:"https://cdk8s.io/",children:"here"}),"."]})}),Object(X.jsx)(Z,{question:"What is CDKtf?",children:Object(X.jsxs)("p",{children:["The community preview of the"," ",Object(X.jsx)(ee,{href:"https://aws.amazon.com/cdk/",children:"Cloud Development Kit"}),"for Terraform allows you to define infrastructure using a familiar programming language such as TypeScript, Python, or Go, while leveraging the hundreds of providers and thousands of module definitions provided by Terraform and the Terraform ecosystem. For more information, click"," ",Object(X.jsx)(ee,{href:"https://learn.hashicorp.com/tutorials/terraform/cdktf",children:"here"}),"."]})}),Object(X.jsx)(Z,{question:"What programming languages are supported in Dev Preview?",children:Object(X.jsx)("p",{children:"The Construct Hub Dev Preview supports Python and TypeScript."})}),Object(X.jsx)(Z,{question:"Is the support for .NET, Java and Go in the roadmap?",children:Object(X.jsx)("p",{children:"Yes."})}),Object(X.jsx)(Z,{question:"Can I view the source code of a construct?",children:Object(X.jsx)("p",{children:"For each package you can click the repository link that the publisher provided with the package. Theoretically this link should redirect your to the package\u2019s repository. However, we noticed that sometimes the code in the repository can be more or less updated than the package\u2019s code. Please take that into account."})}),Object(X.jsx)(Z,{question:"How can I install a package?",children:Object(X.jsx)("p",{children:"Press \u201cInstall\u201d in the package page and you\u2019ll see the installation instructions."})}),Object(X.jsx)(Z,{question:"How can I report a package?",children:Object(X.jsxs)("p",{children:['You can report a package by clicking "Report a package" from the package page. For claims of copyright infringement, read here:'," ",Object(X.jsx)(ee,{href:"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement",children:"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement"}),"."]})}),Object(X.jsx)(Z,{question:"How can I open a bug or send a PR for a package?",children:Object(X.jsx)("p",{children:"The package is owned by the publisher. To report a bug or send a PR, you should go to the repository link the publisher provided and open a ticket there"})}),Object(X.jsx)(Z,{question:"Why isn\u2019t my package displayed in the Construct Hub?",children:Object(X.jsx)("p",{children:"The Construct Hub displays only publicly available constructs that are JSII compatible and that were published on a public npm registry with an open source license. The package should be published on npm registry with the one of the following Keywords: aws-cdk, cdk8s or cdktf."})}),Object(X.jsx)(Z,{question:"Can I update my package after it has been displayed?",children:Object(X.jsx)("p",{children:"Yes. You should publish a new valid version to the public npm registry. We will detect the new version and display it on the Construct Hub."})}),Object(X.jsx)(Z,{question:"How does the Construct Hub relates to the Construct Catalog?",children:Object(X.jsxs)("p",{children:["The Construct Catalog was built by the CDK community in collaboration with the AWS CDK team. The Construct Hub is the official version for the Construct Catalog."," ",Object(X.jsx)(ee,{href:"https://awscdk.io",children:"https://awscdk.io"})," now redirects to the Construct Hub."]})}),Object(X.jsx)(Z,{question:"How can I participate in the Construct Hub community?",children:Object(X.jsxs)("p",{children:["The Construct Hub is built as a public construct. Please join the"," ",Object(X.jsx)(ee,{href:"https://github.com/cdklabs/construct-hub-webapp",children:"Construct Hub GitHub community"}),". You are also welcome to join the #construct-hub-dev channel in the ",Object(X.jsx)(ee,{href:"https://cdk.dev/",children:"CDK community"})," Slack workspace."]})}),Object(X.jsx)(Z,{question:"Is there a community slack channel for the CDK community?",children:Object(X.jsxs)("p",{children:["Please join the CDK Slack channel (",Object(X.jsx)(ee,{href:"https://cdk.dev/",children:"https://cdk.dev/"}),"). This Slack channel is managed by the CDK community for the CDK community."]})})]}),Object(X.jsxs)(te,{heading:"Getting Started",children:[Object(X.jsx)(Z,{question:"Do I need a user for the Construct Hub?",children:Object(X.jsx)("p",{children:"No. The Construct Hub doesn\u2019t require any signup."})}),Object(X.jsx)(Z,{question:"How do I get started?",children:Object(X.jsx)("p",{children:"Use our home page to discover publicly available packages. You may run a search to find packages you\u2019re interested in and mention your preferred programming language. For each package you will find helpful information such as README and API reference for the supported programming languages. You will also find links and keywords that the publisher provided with the package and installation instructions."})})]})]})]})})}}}]);
2
- //# sourceMappingURL=10.32615aa0.chunk.js.map