construct-hub 0.2.1 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/.jsii +2 -2
  2. package/lib/backend/transliterator/transliterator.bundle/Dockerfile +7 -3
  3. package/lib/backend/transliterator/transliterator.bundle/index.js +495 -238
  4. package/lib/construct-hub.js +1 -1
  5. package/lib/package-sources/code-artifact.js +1 -1
  6. package/lib/package-sources/npmjs.js +1 -1
  7. package/lib/spdx-license.js +1 -1
  8. package/package.json +9 -9
  9. package/website/asset-manifest.json +38 -34
  10. package/website/assets/aws-cdk.png +0 -0
  11. package/website/assets/kubernetes.png +0 -0
  12. package/website/assets/terraform.png +0 -0
  13. package/website/index.html +1 -1
  14. package/website/service-worker.js +1 -1
  15. package/website/service-worker.js.map +1 -1
  16. package/website/static/js/{0.ff9d42f8.chunk.js → 0.074504b3.chunk.js} +2 -2
  17. package/website/static/js/{0.ff9d42f8.chunk.js.map → 0.074504b3.chunk.js.map} +1 -1
  18. package/website/static/js/1.272635ed.chunk.js +2 -0
  19. package/website/static/js/{1.bd0a2241.chunk.js.map → 1.272635ed.chunk.js.map} +1 -1
  20. package/website/static/js/10.d664efc4.chunk.js +2 -0
  21. package/website/static/js/10.d664efc4.chunk.js.map +1 -0
  22. package/website/static/js/11.6f7f0c4b.chunk.js +2 -0
  23. package/website/static/js/{10.32615aa0.chunk.js.map → 11.6f7f0c4b.chunk.js.map} +1 -1
  24. package/website/static/js/12.c21a676e.chunk.js +2 -0
  25. package/website/static/js/12.c21a676e.chunk.js.map +1 -0
  26. package/website/static/js/{11.051d89fc.chunk.js → 13.8635b63a.chunk.js} +2 -2
  27. package/website/static/js/{11.051d89fc.chunk.js.map → 13.8635b63a.chunk.js.map} +1 -1
  28. package/website/static/js/{12.e96b82dd.chunk.js → 14.86414212.chunk.js} +3 -3
  29. package/website/static/js/{12.e96b82dd.chunk.js.LICENSE.txt → 14.86414212.chunk.js.LICENSE.txt} +0 -0
  30. package/website/static/js/{12.e96b82dd.chunk.js.map → 14.86414212.chunk.js.map} +1 -1
  31. package/website/static/js/{13.fb054c47.chunk.js → 15.78ca2283.chunk.js} +2 -2
  32. package/website/static/js/{13.fb054c47.chunk.js.map → 15.78ca2283.chunk.js.map} +1 -1
  33. package/website/static/js/4.53a8d553.chunk.js +3 -0
  34. package/website/static/js/{4.7cd92fab.chunk.js.LICENSE.txt → 4.53a8d553.chunk.js.LICENSE.txt} +0 -0
  35. package/website/static/js/4.53a8d553.chunk.js.map +1 -0
  36. package/website/static/js/5.5d827820.chunk.js +3 -0
  37. package/website/static/js/{5.0da0a8ef.chunk.js.LICENSE.txt → 5.5d827820.chunk.js.LICENSE.txt} +0 -0
  38. package/website/static/js/{5.0da0a8ef.chunk.js.map → 5.5d827820.chunk.js.map} +1 -1
  39. package/website/static/js/6.f37a117e.chunk.js +2 -0
  40. package/website/static/js/{6.c0e3f99c.chunk.js.map → 6.f37a117e.chunk.js.map} +1 -1
  41. package/website/static/js/{7.11632168.chunk.js → 7.a4739ebc.chunk.js} +2 -2
  42. package/website/static/js/{7.11632168.chunk.js.map → 7.a4739ebc.chunk.js.map} +1 -1
  43. package/website/static/js/{8.8af79a83.chunk.js → 8.b0c4d0d8.chunk.js} +2 -2
  44. package/website/static/js/{8.8af79a83.chunk.js.map → 8.b0c4d0d8.chunk.js.map} +1 -1
  45. package/website/static/js/9.dcbf33c2.chunk.js +2 -0
  46. package/website/static/js/9.dcbf33c2.chunk.js.map +1 -0
  47. package/website/static/js/main.e289a3fc.chunk.js +2 -0
  48. package/website/static/js/main.e289a3fc.chunk.js.map +1 -0
  49. package/website/static/js/runtime-main.fa5c7ad1.js +2 -0
  50. package/website/static/js/runtime-main.fa5c7ad1.js.map +1 -0
  51. package/website/static/js/1.bd0a2241.chunk.js +0 -2
  52. package/website/static/js/10.32615aa0.chunk.js +0 -2
  53. package/website/static/js/4.7cd92fab.chunk.js +0 -3
  54. package/website/static/js/4.7cd92fab.chunk.js.map +0 -1
  55. package/website/static/js/5.0da0a8ef.chunk.js +0 -3
  56. package/website/static/js/6.c0e3f99c.chunk.js +0 -2
  57. package/website/static/js/9.2b21526e.chunk.js +0 -2
  58. package/website/static/js/9.2b21526e.chunk.js.map +0 -1
  59. package/website/static/js/main.f1390607.chunk.js +0 -2
  60. package/website/static/js/main.f1390607.chunk.js.map +0 -1
  61. package/website/static/js/runtime-main.2f83ac68.js +0 -2
  62. package/website/static/js/runtime-main.2f83ac68.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageTag/PackageTag.tsx","components/Time/Time.tsx","../../../src/link-box.tsx","components/CatalogCard/testIds.ts","components/CatalogCard/CatalogCardContainer.tsx","components/CatalogCard/CatalogCardSkeleton.tsx","components/CatalogCard/CatalogCard.tsx","components/Results/ResultsGrid.tsx","components/Results/ResultsSkeleton.tsx","components/Results/Results.tsx","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","../../../src/skeleton.tsx","../../../src/use-previous.ts","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/components/NextPage.tsx","views/SearchResults/components/PageControls.tsx","views/SearchResults/components/ShowingDetails.tsx","views/SearchResults/SearchResults.tsx","views/SearchResults/constants.ts"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","PackageTag","value","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","Time","forwardRef","ref","date","formatString","format","boxProps","as","dateTime","toISOString","displayName","LinkOverlay","className","cx","rel","isExternal","target","__css","position","cursor","display","top","left","width","height","LinkBox","testIds","createTestIds","CardContainer","Card","h","p","w","overflow","templateColumns","templateRows","CatalogCardContainer","isLink","bg","container","CatalogCardSkeleton","spacing","align","direction","px","py","CatalogCard","currentLanguage","pkg","publishDate","metadata","Date","fontSize","author","languages","targets","Object","keys","getUrl","params","getPackagePath","version","authorName","maxH","maxW","Link","color","fontWeight","isTruncated","ml","Flex","tags","flexWrap","startsWith","mr","variant","keywords","filter","Boolean","slice","map","tag","noOfLines","Stack","entries","LANGUAGE_RENDER_MAP","sort","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","opacity","ResultsGrid","columns","base","sm","md","lg","xl","ResultsSkeletonComponent","noOfItems","skeletons","i","push","ResultsSkeleton","memo","ResultsComponent","results","skeleton","loading","idx","Results","ArrowForwardIcon","createIcon","d","ChevronLeftIcon","StyledSkeleton","chakra","baseStyle","boxShadow","backgroundClip","pointerEvents","userSelect","visibility","fade","keyframes","from","Skeleton","styles","useStyleConfig","isFirstRender","React","useIsFirstRender","omitThemingProps","wasPreviouslyLoaded","useRef","usePrevious","_className","animation","fadeDuration","speed","ArrowButton","offset","getPageUrl","props","borderRadius","borderColor","colorScheme","mx","undefined","disabled","GoToPage","pageLimit","useState","toString","inputValue","setInputValue","useHistory","onSubmit","e","preventDefault","parseInt","max","min","onChange","textAlign","type","btnProps","rightIcon","ArrowForward","NextPage","nextPageUrl","PageControls","nextOffset","prevOffset","alignItems","pt","colStart","justifySelf","justify","ChevronRightIcon","Em","ShowingDetails","limit","count","filtered","first","last","SearchResults","queryParams","useQueryParams","searchQuery","decodeURIComponent","get","QUERY_PARAMS","SEARCH_QUERY","languageQuery","LANGUAGE","searchAPI","useCatalogSearch","defaultQuery","defaultLanguage","val","result","toNum","OFFSET","useCatalogResults","displayable","q","length","setQuery","CatalogSearch","pb"],"mappings":"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","file":"static/js/8.8af79a83.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\n );\n };\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { chakra, forwardRef, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { cx } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface LinkOverlayProps extends HTMLChakraProps<\"a\"> {\n /**\n * If `true`, the link will open in new tab\n */\n isExternal?: boolean\n}\n\nexport const LinkOverlay = forwardRef<LinkOverlayProps, \"a\">((props, ref) => {\n const { isExternal, target, rel, className, ...rest } = props\n return (\n <chakra.a\n {...rest}\n ref={ref}\n className={cx(\"chakra-linkbox__overlay\", className)}\n rel={isExternal ? \"noopener noreferrer\" : rel}\n target={isExternal ? \"_blank\" : target}\n __css={{\n position: \"static\",\n \"&::before\": {\n content: \"''\",\n cursor: \"inherit\",\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 0,\n width: \"100%\",\n height: \"100%\",\n },\n }}\n />\n )\n})\n\nexport interface LinkBoxProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * `LinkBox` is used to wrap content areas within a link while ensuring semantic html\n *\n * @see Docs https://chakra-ui.com/docs/navigation/link-overlay\n * @see Resources https://www.sarasoueidan.com/blog/nested-links\n */\nexport const LinkBox = forwardRef<LinkBoxProps, \"div\">((props, ref) => {\n const { className, ...rest } = props\n\n return (\n <chakra.div\n ref={ref}\n position=\"relative\"\n {...rest}\n className={cx(\"chakra-linkbox\", className)}\n __css={{\n /* Elevate the links and abbreviations up */\n \"a[href]:not(.chakra-linkbox__overlay), abbr[title]\": {\n position: \"relative\",\n zIndex: 1,\n },\n }}\n />\n )\n})\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"catalogCard\", [\n \"container\",\n \"name\",\n \"version\",\n \"tags\",\n \"description\",\n \"date\",\n \"author\",\n \"languages\",\n] as const);\n\nexport default testIds;\n","import { Grid, LinkBox } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../Card\";\nimport testIds from \"./testIds\";\n\nconst CardContainer: FunctionComponent = ({ children }) => (\n <Card h={64} p={0} w=\"100%\">\n <Grid\n as=\"article\"\n h=\"100%\"\n overflow=\"hidden\"\n templateColumns=\"1fr\"\n templateRows=\"2fr 1fr\"\n >\n {children}\n </Grid>\n </Card>\n);\n\nexport const CatalogCardContainer: FunctionComponent<{ isLink?: boolean }> = ({\n children,\n isLink,\n}) => {\n return isLink ? (\n <LinkBox\n _hover={{\n \"> :first-child\": {\n bg: \"gray.50\",\n },\n }}\n data-testid={testIds.container}\n >\n <CardContainer>{children}</CardContainer>\n </LinkBox>\n ) : (\n <CardContainer>{children}</CardContainer>\n );\n};\n","import { Box, Divider, Skeleton, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const CatalogCardSkeleton: FunctionComponent = () => (\n <>\n <Stack p={4} spacing={4}>\n <Skeleton h={5} w=\"50%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n <Skeleton h={3} w=\"75%\" />\n <Skeleton h={3} w=\"50%\" />\n </Stack>\n <Box>\n <Divider />\n <Stack px={4} py={2} spacing={2}>\n <Skeleton h={5} w=\"25%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n </Stack>\n </Box>\n </>\n);\n","import {\n Box,\n Divider,\n Flex,\n LinkBox,\n Link as UILink,\n LinkOverlay,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath, getSearchPath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\nimport { PackageTag } from \"../PackageTag\";\nimport { Time } from \"../Time\";\nimport { CatalogCardContainer } from \"./CatalogCardContainer\";\nimport { CatalogCardSkeleton } from \"./CatalogCardSkeleton\";\nimport testIds from \"./testIds\";\n\nexport interface CatalogCardProps {\n /**\n * Specifies the language to link to by default\n */\n language?: Language;\n /**\n * If undefined, will render a skeleton\n */\n pkg?: CatalogPackage;\n}\n\nexport const CatalogCard: FunctionComponent<CatalogCardProps> = ({\n language: currentLanguage,\n pkg,\n}) => {\n if (!pkg) {\n return (\n <CatalogCardContainer>\n <CatalogCardSkeleton />\n </CatalogCardContainer>\n );\n }\n\n const publishDate = pkg.metadata?.date ? (\n <Time\n date={new Date(pkg.metadata.date)}\n fontSize=\"sm\"\n format=\"MMMM dd, yyyy\"\n />\n ) : null;\n\n const author = pkg.author ?? {};\n const languages = pkg.languages ?? {};\n const targets = Object.keys(languages) as Language[];\n\n const getUrl = (params?: Partial<Parameters<typeof getPackagePath>[0]>) =>\n getPackagePath({\n name: pkg.name,\n version: pkg.version,\n language: currentLanguage,\n ...params,\n });\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <CatalogCardContainer isLink>\n <Stack maxH=\"100%\" maxW=\"100%\" overflow=\"hidden\" p={4} spacing={0}>\n {/* Name & Version */}\n <LinkOverlay as={Link} to={getUrl()}>\n <Text\n color=\"blue.800\"\n data-testid={testIds.name}\n fontWeight=\"semibold\"\n isTruncated\n >\n {pkg.name}\n\n <Text\n as=\"span\"\n color=\"blue.500\"\n data-testid={testIds.version}\n fontSize=\"xs\"\n ml={2}\n >\n {pkg.version}\n </Text>\n </Text>\n </LinkOverlay>\n\n {/* Tags */}\n <LinkBox\n as={Flex}\n data-testid={testIds.tags}\n flexWrap=\"wrap\"\n maxH={6}\n overflow=\"hidden\"\n >\n {[\n pkg.name.startsWith(\"@aws-cdk/\") ? (\n <PackageTag\n key=\"official\"\n label=\"official\"\n language={currentLanguage}\n mr={1}\n value=\"@aws-cdk\"\n variant=\"official\"\n >\n Official\n </PackageTag>\n ) : null,\n ...pkg.keywords\n .filter(Boolean)\n .slice(0, 3)\n .map((tag) => {\n return (\n <PackageTag\n key={tag}\n language={currentLanguage}\n mr={1}\n value={`\"${tag}\"`}\n zIndex=\"0 !important\"\n >\n {tag}\n </PackageTag>\n );\n }),\n ]}\n </LinkBox>\n <Text data-testid={testIds.description} fontSize=\"sm\" noOfLines={2}>\n {pkg.description}\n </Text>\n </Stack>\n\n {/* Bottom Details */}\n <Box>\n <Divider />\n <Stack maxW=\"100%\" overflow=\"hidden\" px={4} py={2} spacing={2}>\n <Text data-testid={testIds.date} fontSize=\"sm\" isTruncated>\n {publishDate}\n </Text>\n\n <UILink\n as={Link}\n color=\"blue.500\"\n data-testid={testIds.author}\n fontSize=\"sm\"\n to={getSearchPath({ query: authorName })}\n >\n {authorName}\n </UILink>\n\n {/* Language Support Icons */}\n <LinkBox\n align=\"center\"\n as={Stack}\n data-testid={testIds.languages}\n direction=\"row\"\n >\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript ||\n targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n h={6}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={6}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getUrl({ language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </LinkBox>\n </Stack>\n </Box>\n </CatalogCardContainer>\n );\n};\n","import { SimpleGrid } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const ResultsGrid: FunctionComponent = ({ children }) => (\n <SimpleGrid\n columns={{\n base: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n \"2xl\": 6,\n }}\n spacing={6}\n >\n {children}\n </SimpleGrid>\n);\n","import { FunctionComponent, memo } from \"react\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\n\nexport interface ResultsSkeletonProps {\n noOfItems: number;\n}\n\nconst ResultsSkeletonComponent: FunctionComponent<ResultsSkeletonProps> = ({\n noOfItems,\n}) => {\n const skeletons = [];\n\n for (let i = 0; i < noOfItems; i += 1) {\n skeletons.push(<CatalogCard key={i} />);\n }\n\n return <ResultsGrid>{skeletons}</ResultsGrid>;\n};\n\nexport const ResultsSkeleton = memo(\n ResultsSkeletonComponent\n) as typeof ResultsSkeletonComponent;\n","import { FunctionComponent, memo } from \"react\";\nimport { Packages } from \"../../api/package/packages\";\nimport { Language } from \"../../constants/languages\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\nimport { ResultsSkeleton } from \"./ResultsSkeleton\";\n\nexport interface ResultsProps {\n language?: Language;\n results: Packages[\"packages\"];\n skeleton?: {\n loading: boolean;\n noOfItems: number;\n };\n}\n\nconst ResultsComponent: FunctionComponent<ResultsProps> = ({\n language,\n results,\n skeleton,\n}) => {\n if (skeleton?.loading) {\n return <ResultsSkeleton noOfItems={skeleton.noOfItems} />;\n }\n\n return (\n <ResultsGrid>\n {results.map((pkg, idx) => (\n <CatalogCard key={`${pkg.name}-${idx}`} language={language} pkg={pkg} />\n ))}\n </ResultsGrid>\n );\n};\n\nexport const Results = memo(ResultsComponent) as typeof ResultsComponent;\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ArrowForwardIcon = createIcon({\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\",\n displayName: \"ArrowForwardIcon\",\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronLeftIcon = createIcon({\n d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\",\n displayName: \"ChevronLeftIcon\",\n})\n","import { useBreakpointValue } from \"@chakra-ui/media-query\"\nimport {\n chakra,\n forwardRef,\n keyframes,\n omitThemingProps,\n ThemingProps,\n useStyleConfig,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { usePrevious } from \"@chakra-ui/hooks\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface SkeletonOptions {\n /**\n * The color at the animation start\n */\n startColor?: string\n /**\n * The color at the animation end\n */\n endColor?: string\n /**\n * If `true`, it'll render its children with a nice fade transition\n */\n isLoaded?: boolean\n /**\n * The animation speed in seconds\n * @default\n * 0.8\n */\n speed?: number\n /**\n * The fadeIn duration in seconds\n *\n * @default\n * 0.4\n */\n fadeDuration?: number\n}\n\nconst StyledSkeleton = chakra(\"div\", {\n baseStyle: {\n boxShadow: \"none\",\n backgroundClip: \"padding-box\",\n cursor: \"default\",\n color: \"transparent\",\n pointerEvents: \"none\",\n userSelect: \"none\",\n \"&::before, &::after, *\": {\n visibility: \"hidden\",\n },\n },\n})\n\nexport type ISkeleton = SkeletonOptions\n\nexport interface SkeletonProps\n extends HTMLChakraProps<\"div\">,\n SkeletonOptions,\n ThemingProps<\"Skeleton\"> {}\n\nconst fade = keyframes({\n from: { opacity: 0 },\n to: { opacity: 1 },\n})\n\nconst useIsFirstRender = () => {\n const isFirstRender = React.useRef(true)\n\n React.useEffect(() => {\n isFirstRender.current = false\n }, [])\n\n return isFirstRender.current\n}\n\nexport const Skeleton = forwardRef<SkeletonProps, \"div\">((props, ref) => {\n const styles = useStyleConfig(\"Skeleton\", props)\n const isFirstRender = useIsFirstRender()\n\n const {\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n className,\n ...rest\n } = omitThemingProps(props)\n\n const wasPreviouslyLoaded = usePrevious(isLoaded)\n\n const _className = cx(\"chakra-skeleton\", className)\n\n if (isLoaded) {\n const animation =\n isFirstRender || wasPreviouslyLoaded ? \"none\" : `${fade} ${fadeDuration}s`\n\n return (\n <chakra.div\n ref={ref}\n className={_className}\n __css={{ animation }}\n {...rest}\n />\n )\n }\n\n return (\n <StyledSkeleton ref={ref} className={_className} {...rest} __css={styles} />\n )\n})\n\nSkeleton.defaultProps = {\n fadeDuration: 0.4,\n speed: 0.8,\n}\n\nif (__DEV__) {\n Skeleton.displayName = \"Skeleton\"\n}\n\nfunction range(count: number) {\n return Array(count)\n .fill(1)\n .map((_, index) => index + 1)\n}\n\nexport interface SkeletonTextProps extends SkeletonProps {\n spacing?: SkeletonProps[\"margin\"]\n skeletonHeight?: SkeletonProps[\"height\"]\n startColor?: SkeletonProps[\"startColor\"]\n endColor?: SkeletonProps[\"endColor\"]\n isLoaded?: SkeletonProps[\"isLoaded\"]\n}\n\nconst defaultNoOfLines = 3\n\nexport const SkeletonText: React.FC<SkeletonTextProps> = (props) => {\n const {\n noOfLines = defaultNoOfLines,\n spacing = \"0.5rem\",\n skeletonHeight = \"0.5rem\",\n className,\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n children,\n ...rest\n } = props\n\n const noOfLinesValue =\n useBreakpointValue(\n typeof noOfLines === \"number\" ? [noOfLines] : noOfLines,\n ) || defaultNoOfLines\n const numbers = range(noOfLinesValue)\n\n const getWidth = (index: number) => {\n if (noOfLinesValue > 1) {\n return index === numbers.length ? \"80%\" : \"100%\"\n }\n return \"100%\"\n }\n\n const _className = cx(\"chakra-skeleton__group\", className)\n\n return (\n <chakra.div className={_className} {...rest}>\n {numbers.map((number, index) => {\n if (isLoaded && index > 0) {\n // skip other lines\n return null\n }\n\n const sizeProps = isLoaded\n ? null\n : {\n mb: number === numbers.length ? \"0\" : spacing,\n width: getWidth(number),\n height: skeletonHeight,\n }\n\n return (\n <Skeleton\n key={numbers.length.toString() + number}\n startColor={startColor}\n endColor={endColor}\n isLoaded={isLoaded}\n fadeDuration={fadeDuration}\n speed={speed}\n {...sizeProps}\n >\n {\n // allows animating the children\n index === 0 ? children : undefined\n }\n </Skeleton>\n )\n })}\n </chakra.div>\n )\n}\n\nif (__DEV__) {\n SkeletonText.displayName = \"SkeletonText\"\n}\n\nexport const SkeletonCircle: React.FC<SkeletonProps> = ({\n size = \"2rem\",\n ...rest\n}) => <Skeleton borderRadius=\"full\" boxSize={size} {...rest} />\n\nif (__DEV__) {\n SkeletonCircle.displayName = \"SkeletonCircle\"\n}\n","import { useRef, useEffect } from \"react\"\n\nexport function usePrevious<T>(value: T) {\n const ref = useRef<T | undefined>()\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current as T\n}\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport interface GoToPageProps {\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n pageLimit,\n offset,\n getPageUrl,\n}) => {\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n const { push } = useHistory();\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n push(getPageUrl({ offset: parseInt(inputValue) - 1 }));\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n colorScheme=\"blue\"\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ArrowForwardIcon } from \"@chakra-ui/icons\";\nimport { Button } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NextPageProps {\n nextPageUrl?: string;\n}\n\nconst btnProps = {\n children: \"Next Page\",\n colorScheme: \"blue\",\n rightIcon: <ArrowForwardIcon color=\"white\" />,\n};\n\nexport const NextPage: FunctionComponent<NextPageProps> = ({ nextPageUrl }) => {\n if (!nextPageUrl) {\n return <Button {...btnProps} disabled />;\n }\n\n return <Button {...btnProps} as={Link} to={nextPageUrl} />;\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Flex, Grid, GridItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { GoToPage } from \"./GoToPage\";\nimport { NextPage } from \"./NextPage\";\n\nexport interface PageControlsProps {\n limit: number;\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n getPageUrl,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Grid\n alignItems=\"center\"\n pt={4}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <NextPage\n nextPageUrl={\n nextOffset ? getPageUrl({ offset: nextOffset }) : undefined\n }\n />\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <GoToPage\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface ShowingDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"em\" color=\"blue.500\" fontWeight=\"bold\">\n {children}\n </Text>\n);\n\nexport const ShowingDetails: FunctionComponent<ShowingDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n return (\n <Text>\n Displaying{\" \"}\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em> {filtered ? \"search results\" : \"constructs\"}.\n </Text>\n );\n};\n","import { Box, Divider, Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Results } from \"../../components/Results\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { getSearchPath } from \"../../util/url\";\nimport { PageControls } from \"./components/PageControls\";\nimport { ShowingDetails } from \"./components/ShowingDetails\";\nimport { LIMIT, SearchQueryParam } from \"./constants\";\n\nconst toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const SearchResults: FunctionComponent = () => {\n const queryParams = useQueryParams();\n\n const searchQuery = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languageQuery = queryParams.get(\n QUERY_PARAMS.LANGUAGE\n ) as Language | null;\n\n const searchAPI = useCatalogSearch({\n defaultQuery: searchQuery,\n defaultLanguage: languageQuery,\n });\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const { push } = useHistory();\n\n const { results, displayable, loading, pageLimit } = useCatalogResults({\n query: searchQuery,\n offset,\n limit: LIMIT,\n language: languageQuery,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n query: (params.q ?? searchQuery) as string,\n language: languageQuery,\n offset: params.offset ?? offset,\n });\n };\n\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (!loading && results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, results, pageLimit, offset]);\n\n useEffect(() => {\n // Reflect changes to queryParam to search input (specifically for tag clicks)\n if (searchQuery !== searchAPI.query) {\n searchAPI.setQuery(searchQuery);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery]);\n\n return (\n <Page\n meta={{\n title: searchQuery || \"Search\",\n description: searchQuery\n ? `${results.length} results for ${searchQuery} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Flex direction=\"column\" maxW=\"100vw\">\n <Box p={4}>\n <CatalogSearch {...searchAPI} />\n </Box>\n <Divider />\n <Box p={4}>\n <Box pb={4}>\n <ShowingDetails\n count={results.length}\n filtered={!!searchQuery}\n limit={LIMIT}\n offset={offset}\n />\n </Box>\n <Results\n language={languageQuery ?? undefined}\n results={displayable}\n skeleton={{ loading, noOfItems: LIMIT }}\n />\n <PageControls\n getPageUrl={getUrl}\n limit={LIMIT}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Flex>\n </Page>\n );\n};\n","import type { QueryParamKey } from \"../../constants/url\";\n\nexport const LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageTag/PackageTag.tsx","components/Time/Time.tsx","../../../src/link-box.tsx","components/CatalogCard/testIds.ts","components/CatalogCard/CatalogCardContainer.tsx","components/CatalogCard/CatalogCardSkeleton.tsx","components/CatalogCard/CatalogCard.tsx","components/Results/ResultsGrid.tsx","components/Results/ResultsSkeleton.tsx","components/Results/Results.tsx","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","../../../src/skeleton.tsx","../../../src/use-previous.ts","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/components/NextPage.tsx","views/SearchResults/components/PageControls.tsx","views/SearchResults/components/ShowingDetails.tsx","views/SearchResults/SearchResults.tsx","views/SearchResults/constants.ts"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","PackageTag","value","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","Time","forwardRef","ref","date","formatString","format","boxProps","as","dateTime","toISOString","displayName","LinkOverlay","className","cx","rel","isExternal","target","__css","position","cursor","display","top","left","width","height","LinkBox","testIds","createTestIds","CardContainer","Card","h","p","w","overflow","templateColumns","templateRows","CatalogCardContainer","isLink","bg","container","CatalogCardSkeleton","spacing","align","direction","px","py","CatalogCard","currentLanguage","pkg","publishDate","metadata","Date","fontSize","author","languages","targets","Object","keys","getUrl","params","getPackagePath","version","authorName","maxH","maxW","Link","color","fontWeight","isTruncated","ml","Flex","tags","flexWrap","startsWith","mr","variant","keywords","filter","Boolean","slice","map","tag","noOfLines","Stack","entries","LANGUAGE_RENDER_MAP","sort","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","opacity","ResultsGrid","columns","base","sm","md","lg","xl","ResultsSkeletonComponent","noOfItems","skeletons","i","push","ResultsSkeleton","memo","ResultsComponent","results","skeleton","loading","idx","Results","ArrowForwardIcon","createIcon","d","ChevronLeftIcon","StyledSkeleton","chakra","baseStyle","boxShadow","backgroundClip","pointerEvents","userSelect","visibility","fade","keyframes","from","Skeleton","styles","useStyleConfig","isFirstRender","React","useIsFirstRender","omitThemingProps","wasPreviouslyLoaded","useRef","usePrevious","_className","animation","fadeDuration","speed","ArrowButton","offset","getPageUrl","props","borderRadius","borderColor","colorScheme","mx","undefined","disabled","GoToPage","pageLimit","useState","toString","inputValue","setInputValue","useHistory","onSubmit","e","preventDefault","parseInt","max","min","onChange","textAlign","type","btnProps","rightIcon","ArrowForward","NextPage","nextPageUrl","PageControls","nextOffset","prevOffset","alignItems","pt","colStart","justifySelf","justify","ChevronRightIcon","Em","ShowingDetails","limit","count","filtered","first","last","SearchResults","queryParams","useQueryParams","searchQuery","decodeURIComponent","get","QUERY_PARAMS","SEARCH_QUERY","languageQuery","LANGUAGE","searchAPI","useCatalogSearch","defaultQuery","defaultLanguage","val","result","toNum","OFFSET","useCatalogResults","displayable","q","length","setQuery","CatalogSearch","pb"],"mappings":"0LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,+FCtCMe,EACX,SAAC,GAA4B,IAA1Bf,EAAyB,EAAzBA,SAAUgB,EAAe,EAAfA,SAGX,OAFoBC,IAAyBC,IAAIF,GAGxC,mCAAGhB,IAIV,cAAC,IAAD,CACEmB,UAAQ,EACRC,MAAK,oCAA+BC,IAAkBL,GAAjD,oBACLM,UAAU,YAHZ,SAKE,+BAAOtB,Q,0KCbFuB,EAAiD,SAAC,GAOxD,IANLvB,EAMI,EANJA,SACAgB,EAKI,EALJA,SACAQ,EAII,EAJJA,MAII,IAHJJ,aAGI,MAHII,EAGJ,EAFJC,EAEI,EAFJA,OACGC,EACC,iBACJ,OACE,cAACC,EAAA,EAAD,CACE,4BAAoBP,GACpBQ,GAAIC,YAAc,CAAEC,MAAM,GAAD,OAAKN,GAASR,aACvCS,OAAQA,EAHV,SAKE,cAAC,IAAD,yBACEM,OAAQ,CACNC,eAAgB,cAEdN,GAJN,aAME,cAAC,IAAD,UAAW1B,W,2ICvBNiC,EAAOC,aAClB,WAA8CC,GAAS,IAApDC,EAAmD,EAAnDA,KAAcC,EAAqC,EAA7CC,OAAyBC,EAAoB,iBACpD,OACE,cAAC,IAAD,yBAAKC,GAAG,OAAOC,SAAUL,EAAKM,cAAeP,IAAKA,GAASI,GAA3D,aACGD,YAAOF,EAAMC,SAMtBJ,EAAKU,YAAc,Q,2dCTZ,IAAMC,EAAcV,aAAkC,cAC3D,IAAM,EAAN,EAAM,aAAN,EAAM,SAAN,EAAM,IAA2BW,EAAjC,EAAiCA,UAAjC,iDACA,OACE,gBAAC,IAAD,UAEEV,IAFF,EAGEU,UAAWC,YAAG,0BAHhB,GAIEC,IAAKC,EAAa,sBAJpB,EAKEC,OAAQD,EAAa,SALvB,EAMEE,MAAO,CACLC,SADK,SAEL,YAAa,CACXvC,QADW,KAEXwC,OAFW,UAGXC,QAHW,QAIXF,SAJW,WAKXG,IALW,EAMXC,KANW,EAOX9B,OAPW,EAQX+B,MARW,OASXC,OAAQ,eAeLC,EAAUxB,aAAgC,cAC/C,IAAEW,EAAR,EAAQA,UAAR,qBAEA,OACE,gBAAC,IAAD,OACEV,IADF,EAEEgB,SAAS,YAFX,GAIEN,UAAWC,YAAG,iBAJhB,GAKEI,MAAO,CAEL,qDAAsD,CACpDC,SADoD,WAEpD1B,OAAQ,U,2HC9CHkC,EAXCC,YAAc,cAAe,CAC3C,YACA,OACA,UACA,OACA,cACA,OACA,SACA,c,OCLIC,EAAmC,SAAC,GAAD,IAAG7D,EAAH,EAAGA,SAAH,OACvC,cAAC8D,EAAA,EAAD,CAAMC,EAAG,GAAIC,EAAG,EAAGC,EAAE,OAArB,SACE,cAAC,IAAD,CACEzB,GAAG,UACHuB,EAAE,OACFG,SAAS,SACTC,gBAAgB,MAChBC,aAAa,UALf,SAOGpE,OAKMqE,EAAgE,SAAC,GAGvE,IAFLrE,EAEI,EAFJA,SAGA,OADI,EADJsE,OAGE,cAACZ,EAAD,CACE3B,OAAQ,CACN,iBAAkB,CAChBwC,GAAI,YAGR,cAAaZ,EAAQa,UANvB,SAQE,cAAC,EAAD,UAAgBxE,MAGlB,cAAC,EAAD,UAAgBA,K,SChCPyE,EAAyC,kBACpD,qCACE,eAAC,IAAD,CAAOT,EAAG,EAAGU,QAAS,EAAtB,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAE,QAClB,eAAC,IAAD,CAAOU,MAAM,SAASC,UAAU,MAAMF,QAAS,EAA/C,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,QAErB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAE,QAClB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAE,WAEpB,eAAC,IAAD,WACE,cAAC,IAAD,IACA,eAAC,IAAD,CAAOY,GAAI,EAAGC,GAAI,EAAGJ,QAAS,EAA9B,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAE,QAClB,eAAC,IAAD,CAAOU,MAAM,SAASC,UAAU,MAAMF,QAAS,EAA/C,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,kBCehBc,EAAmD,SAAC,GAG1D,IAAD,MAFMC,EAEN,EAFJhE,SACAiE,EACI,EADJA,IAEA,IAAKA,EACH,OACE,cAAC,EAAD,UACE,cAAC,EAAD,MAKN,IAAMC,GAAc,UAAAD,EAAIE,gBAAJ,eAAc/C,MAChC,cAACH,EAAA,EAAD,CACEG,KAAM,IAAIgD,KAAKH,EAAIE,SAAS/C,MAC5BiD,SAAS,KACT/C,OAAO,kBAEP,KAEEgD,EAAM,UAAGL,EAAIK,cAAP,QAAiB,GACvBC,EAAS,UAAGN,EAAIM,iBAAP,QAAoB,GAC7BC,EAAUC,OAAOC,KAAKH,GAEtBI,EAAS,SAACC,GAAD,OACbC,YAAe,aACbtG,KAAM0F,EAAI1F,KACVuG,QAASb,EAAIa,QACb9E,SAAUgE,GACPY,KAGDG,EAA+B,kBAAXT,EAAsBA,EAASA,EAAO/F,KAEhE,OACE,eAAC,EAAD,CAAsB+E,QAAM,EAA5B,UACE,eAAC,IAAD,CAAO0B,KAAK,OAAOC,KAAK,OAAO/B,SAAS,SAASF,EAAG,EAAGU,QAAS,EAAhE,UAEE,cAAC9B,EAAD,CAAaJ,GAAI0D,IAAMtE,GAAI+D,IAA3B,SACE,eAAC,IAAD,CACEQ,MAAM,WACN,cAAaxC,EAAQpE,KACrB6G,WAAW,WACXC,aAAW,EAJb,UAMGpB,EAAI1F,KAEL,cAAC,IAAD,CACEiD,GAAG,OACH2D,MAAM,WACN,cAAaxC,EAAQmC,QACrBT,SAAS,KACTiB,GAAI,EALN,SAOGrB,EAAIa,eAMX,cAACpC,EAAD,CACElB,GAAI+D,IACJ,cAAa5C,EAAQ6C,KACrBC,SAAS,OACTT,KAAM,EACN9B,SAAS,SALX,UAQIe,EAAI1F,KAAKmH,WAAW,aAClB,cAACnF,EAAA,EAAD,CAEEH,MAAM,WACNJ,SAAUgE,EACV2B,GAAI,EACJnF,MAAM,WACNoF,QAAQ,WANV,qBACM,YASJ,MAnBR,mBAoBO3B,EAAI4B,SACJC,OAAOC,SACPC,MAAM,EAAG,GACTC,KAAI,SAACC,GACJ,OACE,cAAC3F,EAAA,EAAD,CAEEP,SAAUgE,EACV2B,GAAI,EACJnF,MAAK,WAAM0F,EAAN,KACLzF,OAAO,eALT,SAOGyF,GANIA,UAYjB,cAAC,IAAD,CAAM,cAAavD,EAAQnD,YAAa6E,SAAS,KAAK8B,UAAW,EAAjE,SACGlC,EAAIzE,iBAKT,eAAC,IAAD,WACE,cAAC,IAAD,IACA,eAAC,IAAD,CAAOyF,KAAK,OAAO/B,SAAS,SAASW,GAAI,EAAGC,GAAI,EAAGJ,QAAS,EAA5D,UACE,cAAC,IAAD,CAAM,cAAaf,EAAQvB,KAAMiD,SAAS,KAAKgB,aAAW,EAA1D,SACGnB,IAGH,cAAC,IAAD,CACE1C,GAAI0D,IACJC,MAAM,WACN,cAAaxC,EAAQ2B,OACrBD,SAAS,KACTzD,GAAIC,YAAc,CAAEC,MAAOiE,IAL7B,SAOGA,IAIH,cAACrC,EAAD,CACEiB,MAAM,SACNnC,GAAI4E,IACJ,cAAazD,EAAQ4B,UACrBX,UAAU,MAJZ,SAMGa,OAAO4B,QAAQC,KAEbC,MACC,kBAAEhE,EAAF,oBAAUiE,EAAV,2BACEC,IAAUC,QAAQnE,GAClBkE,IAAUC,QAAQF,MAErBP,KAAI,YAAmB,IAAD,mBAAhBU,EAAgB,KAAVC,EAAU,KACf5G,EAAW2G,EAEXE,EACJ7G,IAAa8G,IAASC,YACtBvC,EAAQwC,SAAShH,GAEbiH,EACJjH,IAAa8G,IAASC,YAEtB9G,IAAyBC,IAAIF,GAE/B,IAAK6G,EAAsB,OAAO,KAElC,IAAQtI,EAAqBqI,EAArBrI,KAAY2I,EAASN,EAAfO,KAERA,EACJ,cAACD,EAAD,CACE,gCAAwB3I,GACxBwE,EAAG,EACHqE,QAASH,EAA4B,EAAI,GACzChE,EAAG,IAIP,OACE,cAAClD,EAAA,EAAD,CAAuCC,SAAUA,EAAjD,SACGiH,EACC,cAAC,IAAD,CACE,6CAAqCjH,GACrCY,GAAI+D,EAAO,CAAE3E,aAFf,SAIGmH,IAGHA,GATyBnH,kB,SCpMlCqH,EAAiC,SAAC,GAAD,IAAGrI,EAAH,EAAGA,SAAH,OAC5C,cAAC,IAAD,CACEsI,QAAS,CACPC,KAAM,EACNC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJ,MAAO,GAETjE,QAAS,EATX,SAWG1E,KCPC4I,EAAoE,SAAC,GAKzE,IAHK,IADLC,EACI,EADJA,UAEMC,EAAY,GAETC,EAAI,EAAGA,EAAIF,EAAWE,GAAK,EAClCD,EAAUE,KAAK,cAAC,EAAD,GAAkBD,IAGnC,OAAO,cAAC,EAAD,UAAcD,KAGVG,EAAkBC,eAC7BN,GCLIO,EAAoD,SAAC,GAIpD,IAHLnI,EAGI,EAHJA,SACAoI,EAEI,EAFJA,QACAC,EACI,EADJA,SAEA,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAUC,SACL,cAACL,EAAD,CAAiBJ,UAAWQ,EAASR,YAI5C,cAAC,EAAD,UACGO,EAAQnC,KAAI,SAAChC,EAAKsE,GAAN,OACX,cAAC,EAAD,CAAwCvI,SAAUA,EAAUiE,IAAKA,GAAjE,UAAqBA,EAAI1F,KAAzB,YAAiCgK,UAM5BC,EAAUN,eAAKC,I,iCClC5B,8CAEaM,EAAmBC,YAAW,CACzCC,EADyC,4DAEzChH,YAAa,sB,iCCJf,8CAEaiH,EAAkBF,YAAW,CACxCC,EADwC,gDAExChH,YAAa,qB,sgBCsCf,IAAMkH,EAAiBC,YAAO,MAAO,CACnCC,UAAW,CACTC,UADS,OAETC,eAFS,cAGT7G,OAHS,UAIT+C,MAJS,cAKT+D,cALS,OAMTC,WANS,OAOT,yBAA0B,CACxBC,WAAY,aAYZC,EAAOC,YAAU,CACrBC,KAAM,CAAEnC,QAAS,GACjBxG,GAAI,CAAEwG,QAAS,KAaJoC,EAAWtI,aAAiC,cACvD,IAAMuI,EAASC,YAAe,WAA9B,GACMC,EAZiB,WACvB,IAAMA,EAAgBC,UAAtB,GAMA,OAJAA,aAAgB,WACdD,eADFC,IAIOD,EAAP,QAKsBE,GAEtB,EAQIC,YARJ,GAAM,EAAN,EAAM,WAAN,EAAM,aAMJjI,EANF,EAMEA,UANF,+EAUMkI,EC1FD,YACL,IAAM5I,EAAM6I,mBAMZ,OAJA3K,qBAAU,WACR8B,cACC,CAFH9B,IAIO8B,EAAP,QDmF4B8I,CAA5B,GAEMC,EAAapI,YAAG,kBAAtB,GAEA,KAAc,CACZ,IAAMqI,EACJR,YAAmDN,EAAnDM,MADF,IAGA,OACE,gBAAC,IAAD,OACExI,IADF,EAEEU,UAFF,EAGEK,MAAO,CAAEiI,cAJb,IAUF,OACE,qBAAgBhJ,IAAhB,EAA0BU,UAAWqI,GAArC,GAA2DhI,MAAOuH,QAItED,eAAwB,CACtBY,aADsB,GAEtBC,MAAO,IAGL,EAAJ,IACEb,0BAsFE,EAAJ,EASI,EAAJ,G,6SE9Mac,EAAmD,SAAC,GAI1D,IAHCpD,EAGF,EAHJC,KACAoD,EAEI,EAFJA,OACAC,EACI,EADJA,WAIMC,EAAQ,CACZ,aAHS,eAAWF,EAAX,SAITG,aAAc,KACdC,YAAa,WACbC,YAAa,OACbzD,KAAM,cAACD,EAAD,CAAM/B,MAAM,WAAWpC,EAAG,EAAGE,EAAG,IACtC4H,GAAI,EACJ9H,EAAG,GACHE,EAAG,GACH2C,QAAS,WAGX,YAAekF,IAAXP,EACK,cAAC,IAAD,2BAAgBE,GAAhB,IAAuBjJ,GAAI0D,IAAMtE,GAAI4J,EAAW,CAAED,cAGpD,cAAC,IAAD,2BAAgBE,GAAhB,IAAuBM,UAAQ,M,yBCjB3BC,EAA6C,SAAC,GAIpD,IAHLC,EAGI,EAHJA,UACAV,EAEI,EAFJA,OACAC,EACI,EADJA,WAEA,EAAoCU,oBAAUX,EAAS,GAAGY,YAA1D,mBAAOC,EAAP,KAAmBC,EAAnB,KACQrD,EAASsD,cAATtD,KAER3I,qBAAU,WACRgM,GAAed,EAAS,GAAGY,cAC1B,CAACZ,IAYJ,OACE,eAAC,IAAD,CAAM5G,MAAM,SAASnC,GAAG,OAAOqJ,GAAI,EAAGU,SANa,SAACC,GACpDA,EAAEC,iBACFzD,EAAKwC,EAAW,CAAED,OAAQmB,SAASN,GAAc,MAIjD,UACE,cAAC,IAAD,CACER,YAAY,OACZ7H,EAAG,GACH4I,IAAKV,EAAY,EACjBW,IAAK,EACLrN,KAAK,OACLsN,SAlBgB,SAACL,GACrBA,EAAEC,iBACFJ,EAAeG,EAAEvJ,OAA4BzB,QAiBzCwC,EAAG,EACH8I,UAAU,SACVC,KAAK,SACLvL,MAAO4K,EACPnI,EAAG,KAEL,eAAC,IAAD,CAAMqC,GAAI,EAAGrC,EAAE,cAAf,gBACMgI,EAAY,S,kBC7ClBe,EAAW,CACfhN,SAAU,YACV4L,YAAa,OACbqB,UAAW,cAACC,EAAA,EAAD,CAAkB/G,MAAM,WAGxBgH,EAA6C,SAAC,GAAqB,IAAnBC,EAAkB,EAAlBA,YAC3D,OAAKA,EAIE,cAAC,IAAD,2BAAYJ,GAAZ,IAAsBxK,GAAI0D,IAAMtE,GAAIwL,KAHlC,cAAC,IAAD,2BAAYJ,GAAZ,IAAsBjB,UAAQ,MCH5BsB,EAAqD,SAAC,GAI5D,IAHL9B,EAGI,EAHJA,OACAU,EAEI,EAFJA,UACAT,EACI,EADJA,WAEM8B,EAAa/B,EAASU,EAAYV,EAAS,OAAIO,EAC/CyB,EAAahC,EAAS,EAAIA,EAAS,OAAIO,EAE7C,OACE,eAAC,IAAD,CACE0B,WAAW,SACXC,GAAI,EACJtJ,gBAAgB,iBAChBC,aAAa,MAJf,UAME,cAAC,IAAD,CAAUsJ,SAAU,EAAGC,YAAY,SAAnC,SACE,cAAC,EAAD,CACEP,YACEE,EAAa9B,EAAW,CAAED,OAAQ+B,SAAgBxB,MAIxD,cAAC,IAAD,CAAU4B,SAAU,EAAGC,YAAY,MAAnC,SACE,eAAC,IAAD,CAAMhJ,MAAM,SAASiJ,QAAQ,SAAS9I,GAAI,EAA1C,UACE,cAAC,EAAD,CACE0G,WAAYA,EACZD,OAAQA,EACRU,UAAWA,IAEb,cAAC,EAAD,CACET,WAAYA,EACZrD,KAAMyB,IACN2B,OAAQgC,IAEV,cAAC,EAAD,CACE/B,WAAYA,EACZrD,KAAM0F,IACNtC,OAAQ+B,aCzCdQ,EAAwB,SAAC,GAAD,IAAG9N,EAAH,EAAGA,SAAH,OAC5B,cAAC,IAAD,CAAMwC,GAAG,KAAK2D,MAAM,WAAWC,WAAW,OAA1C,SACGpG,KAIQ+N,EAAyD,SAAC,GAKhE,IAJLC,EAII,EAJJA,MACAzC,EAGI,EAHJA,OACA0C,EAEI,EAFJA,MACAC,EACI,EADJA,SAEMC,EAAQH,EAAQzC,EAChB6C,EAAOD,EAAQH,EACrB,OACE,eAAC,IAAD,wBACa,IACX,eAAC,EAAD,WACGC,EAAQE,EAAQ,EAAIF,EADvB,MACiCG,EAAOH,EAAQA,EAAQG,KAClD,IAJR,MAKK,cAAC,EAAD,UAAKH,IALV,IAKuBC,EAAW,iBAAmB,aALrD,QCCSG,EAAmC,WAAO,IAAD,IAC9CC,EAAcC,cAEdC,EAAcC,mBAAkB,UACpCH,EAAYI,IAAIC,IAAaC,qBADO,QACU,IAG1CC,EAAgBP,EAAYI,IAChCC,IAAaG,UAGTC,EAAYC,YAAiB,CACjCC,aAAcT,EACdU,gBAAiBL,IAGbtD,EA1BM,SAAC4D,GACb,IAAMC,EAAS1C,SAASyC,GAExB,MAAoB,QAAhB,UAAGC,GACE,EAGFA,EAmBQC,CAAK,UAACf,EAAYI,IAAIC,IAAaW,eAA9B,QAAyC,KAErDtG,EAASsD,cAATtD,KAER,EAAqDuG,YAAkB,CACrEzN,MAAO0M,EACPjD,SACAyC,MC/CmB,GDgDnBhN,SAAU6N,IAJJzF,EAAR,EAAQA,QAASoG,EAAjB,EAAiBA,YAAalG,EAA9B,EAA8BA,QAAS2C,EAAvC,EAAuCA,UAOjCtG,EAAS,SACbC,GACI,IAAD,IACH,OAAO/D,YAAc,CACnBC,MAAK,UAAG8D,EAAO6J,SAAV,QAAejB,EACpBxN,SAAU6N,EACVtD,OAAM,UAAE3F,EAAO2F,cAAT,QAAmBA,KA0B7B,OAtBAlL,qBAAU,YAEHiJ,GAAWF,EAAQsG,SAAWnE,EAAS,GAAKA,EAASU,IAGtDjD,EAAKrD,EADH4F,EAAS,EACC,CAAEA,OAAQ,GAGV,CAAEA,OAAQU,OAIzB,CAAC3C,EAASF,EAAS6C,EAAWV,IAEjClL,qBAAU,WAEJmO,IAAgBO,EAAUjN,OAC5BiN,EAAUY,SAASnB,KAGpB,CAACA,IAGF,cAACzO,EAAA,EAAD,CACEE,KAAM,CACJM,MAAOiO,GAAe,SACtBhO,YAAagO,EAAW,UACjBpF,EAAQsG,OADS,wBACalB,EADb,qBAEpB,yDAENtO,SAAS,SAPX,SASE,eAAC,IAAD,CAAM0E,UAAU,SAASqB,KAAK,QAA9B,UACE,cAAC,IAAD,CAAKjC,EAAG,EAAR,SACE,cAAC4L,EAAA,EAAD,eAAmBb,MAErB,cAAC,IAAD,IACA,eAAC,IAAD,CAAK/K,EAAG,EAAR,UACE,cAAC,IAAD,CAAK6L,GAAI,EAAT,SACE,cAAC,EAAD,CACE5B,MAAO7E,EAAQsG,OACfxB,WAAYM,EACZR,MCvGS,GDwGTzC,OAAQA,MAGZ,cAAC/B,EAAA,EAAD,CACExI,SAAQ,OAAE6N,QAAF,IAAEA,SAAiB/C,EAC3B1C,QAASoG,EACTnG,SAAU,CAAEC,UAAST,UC9GV,MDgHb,cAAC,EAAD,CACE2C,WAAY7F,EACZqI,MClHW,GDmHXzC,OAAQA,EACRU,UAAWA","file":"static/js/8.b0c4d0d8.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\n );\n };\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { chakra, forwardRef, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { cx } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface LinkOverlayProps extends HTMLChakraProps<\"a\"> {\n /**\n * If `true`, the link will open in new tab\n */\n isExternal?: boolean\n}\n\nexport const LinkOverlay = forwardRef<LinkOverlayProps, \"a\">((props, ref) => {\n const { isExternal, target, rel, className, ...rest } = props\n return (\n <chakra.a\n {...rest}\n ref={ref}\n className={cx(\"chakra-linkbox__overlay\", className)}\n rel={isExternal ? \"noopener noreferrer\" : rel}\n target={isExternal ? \"_blank\" : target}\n __css={{\n position: \"static\",\n \"&::before\": {\n content: \"''\",\n cursor: \"inherit\",\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 0,\n width: \"100%\",\n height: \"100%\",\n },\n }}\n />\n )\n})\n\nexport interface LinkBoxProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * `LinkBox` is used to wrap content areas within a link while ensuring semantic html\n *\n * @see Docs https://chakra-ui.com/docs/navigation/link-overlay\n * @see Resources https://www.sarasoueidan.com/blog/nested-links\n */\nexport const LinkBox = forwardRef<LinkBoxProps, \"div\">((props, ref) => {\n const { className, ...rest } = props\n\n return (\n <chakra.div\n ref={ref}\n position=\"relative\"\n {...rest}\n className={cx(\"chakra-linkbox\", className)}\n __css={{\n /* Elevate the links and abbreviations up */\n \"a[href]:not(.chakra-linkbox__overlay), abbr[title]\": {\n position: \"relative\",\n zIndex: 1,\n },\n }}\n />\n )\n})\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"catalogCard\", [\n \"container\",\n \"name\",\n \"version\",\n \"tags\",\n \"description\",\n \"date\",\n \"author\",\n \"languages\",\n] as const);\n\nexport default testIds;\n","import { Grid, LinkBox } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../Card\";\nimport testIds from \"./testIds\";\n\nconst CardContainer: FunctionComponent = ({ children }) => (\n <Card h={64} p={0} w=\"100%\">\n <Grid\n as=\"article\"\n h=\"100%\"\n overflow=\"hidden\"\n templateColumns=\"1fr\"\n templateRows=\"2fr 1fr\"\n >\n {children}\n </Grid>\n </Card>\n);\n\nexport const CatalogCardContainer: FunctionComponent<{ isLink?: boolean }> = ({\n children,\n isLink,\n}) => {\n return isLink ? (\n <LinkBox\n _hover={{\n \"> :first-child\": {\n bg: \"gray.50\",\n },\n }}\n data-testid={testIds.container}\n >\n <CardContainer>{children}</CardContainer>\n </LinkBox>\n ) : (\n <CardContainer>{children}</CardContainer>\n );\n};\n","import { Box, Divider, Skeleton, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const CatalogCardSkeleton: FunctionComponent = () => (\n <>\n <Stack p={4} spacing={4}>\n <Skeleton h={5} w=\"50%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n <Skeleton h={3} w=\"75%\" />\n <Skeleton h={3} w=\"50%\" />\n </Stack>\n <Box>\n <Divider />\n <Stack px={4} py={2} spacing={2}>\n <Skeleton h={5} w=\"25%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n </Stack>\n </Box>\n </>\n);\n","import {\n Box,\n Divider,\n Flex,\n LinkBox,\n Link as UILink,\n LinkOverlay,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath, getSearchPath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\nimport { PackageTag } from \"../PackageTag\";\nimport { Time } from \"../Time\";\nimport { CatalogCardContainer } from \"./CatalogCardContainer\";\nimport { CatalogCardSkeleton } from \"./CatalogCardSkeleton\";\nimport testIds from \"./testIds\";\n\nexport interface CatalogCardProps {\n /**\n * Specifies the language to link to by default\n */\n language?: Language;\n /**\n * If undefined, will render a skeleton\n */\n pkg?: CatalogPackage;\n}\n\nexport const CatalogCard: FunctionComponent<CatalogCardProps> = ({\n language: currentLanguage,\n pkg,\n}) => {\n if (!pkg) {\n return (\n <CatalogCardContainer>\n <CatalogCardSkeleton />\n </CatalogCardContainer>\n );\n }\n\n const publishDate = pkg.metadata?.date ? (\n <Time\n date={new Date(pkg.metadata.date)}\n fontSize=\"sm\"\n format=\"MMMM dd, yyyy\"\n />\n ) : null;\n\n const author = pkg.author ?? {};\n const languages = pkg.languages ?? {};\n const targets = Object.keys(languages) as Language[];\n\n const getUrl = (params?: Partial<Parameters<typeof getPackagePath>[0]>) =>\n getPackagePath({\n name: pkg.name,\n version: pkg.version,\n language: currentLanguage,\n ...params,\n });\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <CatalogCardContainer isLink>\n <Stack maxH=\"100%\" maxW=\"100%\" overflow=\"hidden\" p={4} spacing={0}>\n {/* Name & Version */}\n <LinkOverlay as={Link} to={getUrl()}>\n <Text\n color=\"blue.800\"\n data-testid={testIds.name}\n fontWeight=\"semibold\"\n isTruncated\n >\n {pkg.name}\n\n <Text\n as=\"span\"\n color=\"blue.500\"\n data-testid={testIds.version}\n fontSize=\"xs\"\n ml={2}\n >\n {pkg.version}\n </Text>\n </Text>\n </LinkOverlay>\n\n {/* Tags */}\n <LinkBox\n as={Flex}\n data-testid={testIds.tags}\n flexWrap=\"wrap\"\n maxH={6}\n overflow=\"hidden\"\n >\n {[\n pkg.name.startsWith(\"@aws-cdk/\") ? (\n <PackageTag\n key=\"official\"\n label=\"official\"\n language={currentLanguage}\n mr={1}\n value=\"@aws-cdk\"\n variant=\"official\"\n >\n Official\n </PackageTag>\n ) : null,\n ...pkg.keywords\n .filter(Boolean)\n .slice(0, 3)\n .map((tag) => {\n return (\n <PackageTag\n key={tag}\n language={currentLanguage}\n mr={1}\n value={`\"${tag}\"`}\n zIndex=\"0 !important\"\n >\n {tag}\n </PackageTag>\n );\n }),\n ]}\n </LinkBox>\n <Text data-testid={testIds.description} fontSize=\"sm\" noOfLines={2}>\n {pkg.description}\n </Text>\n </Stack>\n\n {/* Bottom Details */}\n <Box>\n <Divider />\n <Stack maxW=\"100%\" overflow=\"hidden\" px={4} py={2} spacing={2}>\n <Text data-testid={testIds.date} fontSize=\"sm\" isTruncated>\n {publishDate}\n </Text>\n\n <UILink\n as={Link}\n color=\"blue.500\"\n data-testid={testIds.author}\n fontSize=\"sm\"\n to={getSearchPath({ query: authorName })}\n >\n {authorName}\n </UILink>\n\n {/* Language Support Icons */}\n <LinkBox\n align=\"center\"\n as={Stack}\n data-testid={testIds.languages}\n direction=\"row\"\n >\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript ||\n targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n h={6}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={6}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getUrl({ language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </LinkBox>\n </Stack>\n </Box>\n </CatalogCardContainer>\n );\n};\n","import { SimpleGrid } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const ResultsGrid: FunctionComponent = ({ children }) => (\n <SimpleGrid\n columns={{\n base: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n \"2xl\": 6,\n }}\n spacing={6}\n >\n {children}\n </SimpleGrid>\n);\n","import { FunctionComponent, memo } from \"react\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\n\nexport interface ResultsSkeletonProps {\n noOfItems: number;\n}\n\nconst ResultsSkeletonComponent: FunctionComponent<ResultsSkeletonProps> = ({\n noOfItems,\n}) => {\n const skeletons = [];\n\n for (let i = 0; i < noOfItems; i += 1) {\n skeletons.push(<CatalogCard key={i} />);\n }\n\n return <ResultsGrid>{skeletons}</ResultsGrid>;\n};\n\nexport const ResultsSkeleton = memo(\n ResultsSkeletonComponent\n) as typeof ResultsSkeletonComponent;\n","import { FunctionComponent, memo } from \"react\";\nimport { Packages } from \"../../api/package/packages\";\nimport { Language } from \"../../constants/languages\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\nimport { ResultsSkeleton } from \"./ResultsSkeleton\";\n\nexport interface ResultsProps {\n language?: Language;\n results: Packages[\"packages\"];\n skeleton?: {\n loading: boolean;\n noOfItems: number;\n };\n}\n\nconst ResultsComponent: FunctionComponent<ResultsProps> = ({\n language,\n results,\n skeleton,\n}) => {\n if (skeleton?.loading) {\n return <ResultsSkeleton noOfItems={skeleton.noOfItems} />;\n }\n\n return (\n <ResultsGrid>\n {results.map((pkg, idx) => (\n <CatalogCard key={`${pkg.name}-${idx}`} language={language} pkg={pkg} />\n ))}\n </ResultsGrid>\n );\n};\n\nexport const Results = memo(ResultsComponent) as typeof ResultsComponent;\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ArrowForwardIcon = createIcon({\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\",\n displayName: \"ArrowForwardIcon\",\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronLeftIcon = createIcon({\n d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\",\n displayName: \"ChevronLeftIcon\",\n})\n","import { useBreakpointValue } from \"@chakra-ui/media-query\"\nimport {\n chakra,\n forwardRef,\n keyframes,\n omitThemingProps,\n ThemingProps,\n useStyleConfig,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { usePrevious } from \"@chakra-ui/hooks\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface SkeletonOptions {\n /**\n * The color at the animation start\n */\n startColor?: string\n /**\n * The color at the animation end\n */\n endColor?: string\n /**\n * If `true`, it'll render its children with a nice fade transition\n */\n isLoaded?: boolean\n /**\n * The animation speed in seconds\n * @default\n * 0.8\n */\n speed?: number\n /**\n * The fadeIn duration in seconds\n *\n * @default\n * 0.4\n */\n fadeDuration?: number\n}\n\nconst StyledSkeleton = chakra(\"div\", {\n baseStyle: {\n boxShadow: \"none\",\n backgroundClip: \"padding-box\",\n cursor: \"default\",\n color: \"transparent\",\n pointerEvents: \"none\",\n userSelect: \"none\",\n \"&::before, &::after, *\": {\n visibility: \"hidden\",\n },\n },\n})\n\nexport type ISkeleton = SkeletonOptions\n\nexport interface SkeletonProps\n extends HTMLChakraProps<\"div\">,\n SkeletonOptions,\n ThemingProps<\"Skeleton\"> {}\n\nconst fade = keyframes({\n from: { opacity: 0 },\n to: { opacity: 1 },\n})\n\nconst useIsFirstRender = () => {\n const isFirstRender = React.useRef(true)\n\n React.useEffect(() => {\n isFirstRender.current = false\n }, [])\n\n return isFirstRender.current\n}\n\nexport const Skeleton = forwardRef<SkeletonProps, \"div\">((props, ref) => {\n const styles = useStyleConfig(\"Skeleton\", props)\n const isFirstRender = useIsFirstRender()\n\n const {\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n className,\n ...rest\n } = omitThemingProps(props)\n\n const wasPreviouslyLoaded = usePrevious(isLoaded)\n\n const _className = cx(\"chakra-skeleton\", className)\n\n if (isLoaded) {\n const animation =\n isFirstRender || wasPreviouslyLoaded ? \"none\" : `${fade} ${fadeDuration}s`\n\n return (\n <chakra.div\n ref={ref}\n className={_className}\n __css={{ animation }}\n {...rest}\n />\n )\n }\n\n return (\n <StyledSkeleton ref={ref} className={_className} {...rest} __css={styles} />\n )\n})\n\nSkeleton.defaultProps = {\n fadeDuration: 0.4,\n speed: 0.8,\n}\n\nif (__DEV__) {\n Skeleton.displayName = \"Skeleton\"\n}\n\nfunction range(count: number) {\n return Array(count)\n .fill(1)\n .map((_, index) => index + 1)\n}\n\nexport interface SkeletonTextProps extends SkeletonProps {\n spacing?: SkeletonProps[\"margin\"]\n skeletonHeight?: SkeletonProps[\"height\"]\n startColor?: SkeletonProps[\"startColor\"]\n endColor?: SkeletonProps[\"endColor\"]\n isLoaded?: SkeletonProps[\"isLoaded\"]\n}\n\nconst defaultNoOfLines = 3\n\nexport const SkeletonText: React.FC<SkeletonTextProps> = (props) => {\n const {\n noOfLines = defaultNoOfLines,\n spacing = \"0.5rem\",\n skeletonHeight = \"0.5rem\",\n className,\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n children,\n ...rest\n } = props\n\n const noOfLinesValue =\n useBreakpointValue(\n typeof noOfLines === \"number\" ? [noOfLines] : noOfLines,\n ) || defaultNoOfLines\n const numbers = range(noOfLinesValue)\n\n const getWidth = (index: number) => {\n if (noOfLinesValue > 1) {\n return index === numbers.length ? \"80%\" : \"100%\"\n }\n return \"100%\"\n }\n\n const _className = cx(\"chakra-skeleton__group\", className)\n\n return (\n <chakra.div className={_className} {...rest}>\n {numbers.map((number, index) => {\n if (isLoaded && index > 0) {\n // skip other lines\n return null\n }\n\n const sizeProps = isLoaded\n ? null\n : {\n mb: number === numbers.length ? \"0\" : spacing,\n width: getWidth(number),\n height: skeletonHeight,\n }\n\n return (\n <Skeleton\n key={numbers.length.toString() + number}\n startColor={startColor}\n endColor={endColor}\n isLoaded={isLoaded}\n fadeDuration={fadeDuration}\n speed={speed}\n {...sizeProps}\n >\n {\n // allows animating the children\n index === 0 ? children : undefined\n }\n </Skeleton>\n )\n })}\n </chakra.div>\n )\n}\n\nif (__DEV__) {\n SkeletonText.displayName = \"SkeletonText\"\n}\n\nexport const SkeletonCircle: React.FC<SkeletonProps> = ({\n size = \"2rem\",\n ...rest\n}) => <Skeleton borderRadius=\"full\" boxSize={size} {...rest} />\n\nif (__DEV__) {\n SkeletonCircle.displayName = \"SkeletonCircle\"\n}\n","import { useRef, useEffect } from \"react\"\n\nexport function usePrevious<T>(value: T) {\n const ref = useRef<T | undefined>()\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current as T\n}\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport interface GoToPageProps {\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n pageLimit,\n offset,\n getPageUrl,\n}) => {\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n const { push } = useHistory();\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n push(getPageUrl({ offset: parseInt(inputValue) - 1 }));\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n colorScheme=\"blue\"\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ArrowForwardIcon } from \"@chakra-ui/icons\";\nimport { Button } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NextPageProps {\n nextPageUrl?: string;\n}\n\nconst btnProps = {\n children: \"Next Page\",\n colorScheme: \"blue\",\n rightIcon: <ArrowForwardIcon color=\"white\" />,\n};\n\nexport const NextPage: FunctionComponent<NextPageProps> = ({ nextPageUrl }) => {\n if (!nextPageUrl) {\n return <Button {...btnProps} disabled />;\n }\n\n return <Button {...btnProps} as={Link} to={nextPageUrl} />;\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Flex, Grid, GridItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { GoToPage } from \"./GoToPage\";\nimport { NextPage } from \"./NextPage\";\n\nexport interface PageControlsProps {\n limit: number;\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n getPageUrl,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Grid\n alignItems=\"center\"\n pt={4}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <NextPage\n nextPageUrl={\n nextOffset ? getPageUrl({ offset: nextOffset }) : undefined\n }\n />\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <GoToPage\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface ShowingDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"em\" color=\"blue.500\" fontWeight=\"bold\">\n {children}\n </Text>\n);\n\nexport const ShowingDetails: FunctionComponent<ShowingDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n return (\n <Text>\n Displaying{\" \"}\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em> {filtered ? \"search results\" : \"constructs\"}.\n </Text>\n );\n};\n","import { Box, Divider, Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Results } from \"../../components/Results\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { getSearchPath } from \"../../util/url\";\nimport { PageControls } from \"./components/PageControls\";\nimport { ShowingDetails } from \"./components/ShowingDetails\";\nimport { LIMIT, SearchQueryParam } from \"./constants\";\n\nconst toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const SearchResults: FunctionComponent = () => {\n const queryParams = useQueryParams();\n\n const searchQuery = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languageQuery = queryParams.get(\n QUERY_PARAMS.LANGUAGE\n ) as Language | null;\n\n const searchAPI = useCatalogSearch({\n defaultQuery: searchQuery,\n defaultLanguage: languageQuery,\n });\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const { push } = useHistory();\n\n const { results, displayable, loading, pageLimit } = useCatalogResults({\n query: searchQuery,\n offset,\n limit: LIMIT,\n language: languageQuery,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n query: (params.q ?? searchQuery) as string,\n language: languageQuery,\n offset: params.offset ?? offset,\n });\n };\n\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (!loading && results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, results, pageLimit, offset]);\n\n useEffect(() => {\n // Reflect changes to queryParam to search input (specifically for tag clicks)\n if (searchQuery !== searchAPI.query) {\n searchAPI.setQuery(searchQuery);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery]);\n\n return (\n <Page\n meta={{\n title: searchQuery || \"Search\",\n description: searchQuery\n ? `${results.length} results for ${searchQuery} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Flex direction=\"column\" maxW=\"100vw\">\n <Box p={4}>\n <CatalogSearch {...searchAPI} />\n </Box>\n <Divider />\n <Box p={4}>\n <Box pb={4}>\n <ShowingDetails\n count={results.length}\n filtered={!!searchQuery}\n limit={LIMIT}\n offset={offset}\n />\n </Box>\n <Results\n language={languageQuery ?? undefined}\n results={displayable}\n skeleton={{ loading, noOfItems: LIMIT }}\n />\n <PageControls\n getPageUrl={getUrl}\n limit={LIMIT}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Flex>\n </Page>\n );\n};\n","import type { QueryParamKey } from \"../../constants/url\";\n\nexport const LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[9],{224:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(0),a=n(233),c={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(109),s=n(1),o=function(e){var t=e.children,n=e.meta,o=e.pageName,l=Object(i.b)(c[o]);Object(r.useEffect)((function(){l()}),[l]);var u=n.suffix,d=void 0===u||u,b=n.title,j=n.description,h=d?"".concat(b," - Construct Hub"):b;return Object(s.jsxs)(s.Fragment,{children:[Object(s.jsxs)(a.a,{children:[!1,Object(s.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(s.jsx)("meta",{charSet:"utf-8"}),Object(s.jsx)("title",{children:h}),Object(s.jsx)("meta",{content:h,property:"og:title"}),Object(s.jsx)("meta",{content:h,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:j,name:"description"}),Object(s.jsx)("meta",{content:j,property:"og:description"}),Object(s.jsx)("meta",{content:j,name:"twitter:description"})]}),t]})}},240:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var r=n(6),a=n(22),c=n(21),i=n(184),s=n(287),o=n(1),l=["sources"],u=Object(c.a)((function(e,t){var n=e.sources,c=Object(a.a)(e,l);return Object(o.jsxs)(i.a,{as:"picture",children:[null===n||void 0===n?void 0:n.map((function(e,t){return Object(o.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(o.jsx)(s.a,Object(r.a)({ref:t},c))]})}));u.displayName="Picture"},287:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(21),a=n(25),c=n(27),i=n(8),s=n(0),o=n(4),l=n(138);function u(){return u=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},u.apply(this,arguments)}function d(e,t){if(null==e)return{};var n,r,a={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}var b=s.forwardRef((function(e,t){var n=e.htmlWidth,r=e.htmlHeight,a=e.alt,c=d(e,["htmlWidth","htmlHeight","alt"]);return s.createElement("img",u({width:n,height:r,ref:t,alt:a},c))})),j=Object(r.a)((function(e,t){var n=e.fallbackSrc,r=e.fallback,i=e.src,j=e.align,h=e.fit,f=e.loading,m=e.ignoreFallback,p=e.crossOrigin,O=d(e,["fallbackSrc","fallback","src","align","fit","loading","ignoreFallback","crossOrigin"]),g=null!=f||m,v=function(e){var t=e.src,n=e.srcSet,r=e.onLoad,a=e.onError,c=e.crossOrigin,i=e.sizes,u=e.ignoreFallback,d=Object(s.useState)("pending"),b=Object(o.a)(d,2),j=b[0],h=b[1];Object(s.useEffect)((function(){h(t?"loading":"pending")}),[t]);var f=Object(s.useRef)(),m=Object(s.useCallback)((function(){if(t){p();var e=new Image;e.src=t,c&&(e.crossOrigin=c),n&&(e.srcset=n),i&&(e.sizes=i),e.onload=function(e){p(),h("loaded"),null==r||r(e)},e.onerror=function(e){p(),h("failed"),null==a||a(e)},f.current=e}}),[t,c,n,i,r,a]),p=function(){f.current&&(f.current.onload=null,f.current.onerror=null,f.current=null)};return Object(l.a)((function(){if(!u)return"loading"===j&&m(),function(){p()}}),[j,m,u]),u?"loaded":j}(u({},e,{ignoreFallback:g})),x=u({ref:t,objectFit:h,objectPosition:j},g?O:Object(c.g)(O,["onError","onLoad"]));return"loaded"!==v?r||s.createElement(a.a.img,u({as:b,className:"chakra-image__placeholder",src:n},x)):s.createElement(a.a.img,u({as:b,src:i,crossOrigin:p,loading:f,className:"chakra-image"},x))}));i.a&&(j.displayName="Image")},342:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(21),a=n(66),c=n(43),i=n(25),s=n(72),o=n(20),l=n(8),u=n(169),d=n(0);function b(){return b=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},b.apply(this,arguments)}var j=Object(r.a)((function(e,t){var n=Object(a.a)("Input",e),r=Object(c.b)(e),l=r.children,j=r.className,h=function(e,t){if(null==e)return{};var n,r,a={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(r,["children","className"]),f=Object(o.d)("chakra-input__group",j),m={},p=Object(u.a)(l),O=n.field;p.forEach((function(e){if(n){var t,r;if(O&&"InputLeftElement"===e.type.id)m.paddingStart=null!=(t=O.height)?t:O.h;if(O&&"InputRightElement"===e.type.id)m.paddingEnd=null!=(r=O.height)?r:O.h;"InputRightAddon"===e.type.id&&(m.borderEndRadius=0),"InputLeftAddon"===e.type.id&&(m.borderStartRadius=0)}}));var g=p.map((function(t){var n,r,a={size:(null==(n=t.props)?void 0:n.size)||e.size,variant:(null==(r=t.props)?void 0:r.variant)||e.variant};return"Input"!==t.type.id?d.cloneElement(t,a):d.cloneElement(t,Object.assign(a,m,t.props))}));return d.createElement(i.a.div,b({className:f,ref:t,__css:{width:"100%",display:"flex",position:"relative"}},h),d.createElement(s.b,{value:n},g))}));l.a&&(j.displayName="InputGroup")},343:function(e,t,n){"use strict";n.d(t,"a",(function(){return h})),n.d(t,"b",(function(){return f}));var r=n(5),a=n(25),c=n(21),i=n(72),s=n(8),o=n(20),l=n(0);function u(){return u=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},u.apply(this,arguments)}function d(e,t){if(null==e)return{};var n,r,a={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}var b=Object(a.a)("div",{baseStyle:{display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",top:"0",zIndex:2}}),j=Object(c.a)((function(e,t){var n,a,c,s=e.placement,o=void 0===s?"left":s,j=d(e,["placement"]),h=Object(i.d)().field,f="left"===o?"insetStart":"insetEnd",m=(n={},Object(r.a)(n,f,"0"),Object(r.a)(n,"width",null!=(a=null==h?void 0:h.height)?a:null==h?void 0:h.h),Object(r.a)(n,"height",null!=(c=null==h?void 0:h.height)?c:null==h?void 0:h.h),Object(r.a)(n,"fontSize",null==h?void 0:h.fontSize),n);return l.createElement(b,u({ref:t,__css:m},j))}));j.id="InputElement",s.a&&(j.displayName="InputElement");var h=Object(c.a)((function(e,t){var n=e.className,r=d(e,["className"]),a=Object(o.d)("chakra-input__left-element",n);return l.createElement(j,u({ref:t,placement:"left",className:a},r))}));h.id="InputLeftElement",s.a&&(h.displayName="InputLeftElement");var f=Object(c.a)((function(e,t){var n=e.className,r=d(e,["className"]),a=Object(o.d)("chakra-input__right-element",n);return l.createElement(j,u({ref:t,placement:"right",className:a},r))}));f.id="InputRightElement",s.a&&(f.displayName="InputRightElement")},586:function(e,t,n){"use strict";n.r(t),n.d(t,"HomeRedesign",(function(){return w})),n.d(t,"default",(function(){return w}));var r=n(199),a=n(141),c=n(224),i=n(208),s=n(205),o=n(184),l=n(221),u=n(194),d=n(342),b=n(216),j=n(343),h=n(81),f=n(1),m=function(){return Object(f.jsxs)(r.a,{align:"center",bg:"blue.800",color:"white",direction:"column",justify:"center",py:12,children:[Object(f.jsx)(s.a,{as:"h1",size:"xl",children:"Build cloud infrastructure with reusable components"}),Object(f.jsxs)(s.a,{as:"h2",mt:2,size:"lg",children:["Provided by the"," ",Object(f.jsx)(o.a,{as:"span",color:"yellow.400",children:"community"}),", backed by"," ",Object(f.jsx)(o.a,{as:"span",color:"yellow.400",children:"AWS"}),"."]}),Object(f.jsxs)(r.a,{direction:"column",mt:8,children:[Object(f.jsxs)(l.a,{direction:"row",spacing:7,children:[Object(f.jsx)(u.a,{borderBottom:"1px solid",borderBottomColor:"yellow.400",children:"All CDKs"}),Object(f.jsx)(u.a,{children:"AWS CDK"}),Object(f.jsx)(u.a,{children:"CDK for Terraform"}),Object(f.jsx)(u.a,{children:"CDK for Kubernetes"})]}),Object(f.jsx)(h.a,{mt:4,children:Object(f.jsxs)(d.a,{children:[Object(f.jsx)(b.a,{bg:"white",placeholder:"Search over 600 construct libraries for all CDKS",variant:"filled"}),Object(f.jsx)(j.b,{children:Object(f.jsx)(i.a,{color:"gray.500"})})]})})]})]})},p=n(201),O=n(111),g=n(240),v=n(189),x=function(e){var t=e.title,n=e.description,r=e.children;return Object(f.jsxs)(l.a,{color:"blue.800",spacing:4,children:[Object(f.jsx)(s.a,{as:"h3",size:"md",children:t}),Object(f.jsx)(v.a,{size:"sm",children:n}),r]})},y=function(){return Object(f.jsx)(O.a,{borderRadius:"none",boxShadow:"none",h:"full",p:8,children:Object(f.jsxs)(l.a,{spacing:8,children:[Object(f.jsx)(x,{description:Object(f.jsxs)(f.Fragment,{children:["The construct hub is a"," ",Object(f.jsx)("strong",{children:"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."]}),title:"What is Construct Hub?",children:Object(f.jsxs)(r.a,{align:"center",justifyItems:"start",sx:{"& > *":{mt:4,mr:4}},wrap:"wrap",children:[Object(f.jsx)(g.a,{alt:"AWS CDK logo",src:"/assets/aws-cdk.png"}),Object(f.jsx)(g.a,{alt:"Terraform logo",src:"/assets/terraform.png"}),Object(f.jsx)(g.a,{alt:"Kubernetes logo",src:"/assets/kubernetes.png"})]})}),Object(f.jsx)(p.a,{}),Object(f.jsx)(x,{description:Object(f.jsxs)(f.Fragment,{children:["Constructs are ",Object(f.jsx)("strong",{children:"cloud building blocks"})," introduced by the Constructs Programming Model (CPM) that can be"," ",Object(f.jsx)("strong",{children:"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."]}),title:"What is a construct?"}),Object(f.jsx)(p.a,{}),Object(f.jsx)(x,{description:Object(f.jsxs)(f.Fragment,{children:["Construct Hub is built to ",Object(f.jsx)("strong",{children:"serve the community"})," ","that uses the constructs programming model (CPM) and to allow them"," ",Object(f.jsx)("strong",{children:"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."]}),title:"Why should I use this?"})]})})},w=function(){return Object(f.jsx)(c.a,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.",suffix:!1},pageName:"home",children:Object(f.jsxs)(r.a,{direction:"column",children:[Object(f.jsx)(m,{}),Object(f.jsxs)(a.a,{h:"full",p:3,templateColumns:"2fr 1fr",templateRows:"1fr",children:[Object(f.jsx)(r.a,{mx:"auto",children:"\ud83d\udea7 This section is under construction \ud83d\udea7"}),Object(f.jsx)(y,{})]})]})})}}}]);
2
+ //# sourceMappingURL=9.dcbf33c2.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","../../../src/image.tsx","../../../src/use-image.ts","../../../src/input-group.tsx","../../../src/input-element.tsx","views/HomeRedesign/Hero.tsx","views/HomeRedesign/InfoSection.tsx","views/HomeRedesign/InfoPanel.tsx","views/HomeRedesign/HomeRedesign.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","Picture","forwardRef","ref","sources","props","as","map","source","idx","media","srcSet","displayName","NativeImage","alt","width","height","Image","crossOrigin","shouldIgnore","loading","status","ignoreFallback","useState","setStatus","src","imageRef","useRef","load","useCallback","flush","img","onLoad","error","onError","sizes","useSafeLayoutEffect","useImage","shared","objectFit","objectPosition","align","rest","omit","className","fallbackSrc","InputGroup","styles","useMultiStyleConfig","omitThemingProps","_className","cx","groupStyles","validChildren","getValidChildren","input","child","clones","theming","size","variant","React","Object","__css","display","position","value","StyledElement","chakra","baseStyle","alignItems","justifyContent","top","zIndex","InputElement","placement","useStyles","attr","elementStyles","fontSize","InputLeftElement","InputRightElement","Hero","bg","color","direction","justify","py","mt","spacing","borderBottom","borderBottomColor","Form","placeholder","Search","InfoSection","InfoPanel","Card","borderRadius","boxShadow","h","p","justifyItems","sx","mr","wrap","HomeRedesign","templateColumns","templateRows","mx"],"mappings":"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","file":"static/js/9.dcbf33c2.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, HTMLChakraProps, forwardRef, Image } from \"@chakra-ui/react\";\n\nexport interface PictureProps extends HTMLChakraProps<\"img\"> {\n alt: string;\n src: string;\n sources?: {\n media?: string;\n srcSet: string;\n }[];\n}\n\nexport const Picture = forwardRef<PictureProps, \"img\">(\n ({ sources, ...props }, ref) => (\n <Box as=\"picture\">\n {sources?.map((source, idx) => (\n <source key={idx} media={source.media} srcSet={source.srcSet} />\n ))}\n <Image ref={ref} {...props} />\n </Box>\n )\n);\n\nPicture.displayName = \"Picture\";\n","import {\n chakra,\n PropsOf,\n SystemProps,\n forwardRef,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { omit, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\nimport { useImage, UseImageProps } from \"./use-image\"\n\ninterface NativeImageOptions {\n /**\n * The native HTML `width` attribute to the passed to the `img`\n */\n htmlWidth?: string | number\n /**\n * The native HTML `height` attribute to the passed to the `img`\n */\n htmlHeight?: string | number\n}\n\ninterface NativeImageProps extends PropsOf<\"img\">, NativeImageOptions {}\n\nconst NativeImage = React.forwardRef(\n (props: NativeImageProps, ref: React.Ref<any>) => {\n const { htmlWidth, htmlHeight, alt, ...rest } = props\n return (\n <img\n width={htmlWidth}\n height={htmlHeight}\n ref={ref}\n alt={alt}\n {...rest}\n />\n )\n },\n)\n\ninterface ImageOptions extends NativeImageOptions {\n /**\n * Fallback image `src` to show if image is loading or image fails.\n *\n * Note 🚨: We recommend you use a local image\n */\n fallbackSrc?: string\n /**\n * Fallback element to show if image is loading or image fails.\n * @type React.ReactElement\n */\n fallback?: React.ReactElement\n /**\n * Defines loading strategy\n */\n loading?: \"eager\" | \"lazy\"\n /**\n * How the image to fit within its bounds.\n * It maps to css `object-fit` property.\n * @type SystemProps[\"objectFit\"]\n */\n fit?: SystemProps[\"objectFit\"]\n /**\n * How to align the image within its bounds.\n * It maps to css `object-position` property.\n * @type SystemProps[\"objectPosition\"]\n */\n align?: SystemProps[\"objectPosition\"]\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n}\n\nexport interface ImageProps\n extends UseImageProps,\n Omit<HTMLChakraProps<\"img\">, keyof UseImageProps>,\n ImageOptions {}\n\n/**\n * React component that renders an image with support\n * for fallbacks\n *\n * @see Docs https://chakra-ui.com/image\n */\nexport const Image = forwardRef<ImageProps, \"img\">((props, ref) => {\n const {\n fallbackSrc,\n fallback,\n src,\n align,\n fit,\n loading,\n ignoreFallback,\n crossOrigin,\n ...rest\n } = props\n\n /**\n * Defer to native `img` tag if `loading` prop is passed\n * @see https://github.com/chakra-ui/chakra-ui/issues/1027\n */\n const shouldIgnore = loading != null || ignoreFallback\n\n const status = useImage({\n ...props,\n ignoreFallback: shouldIgnore,\n })\n\n const shared = {\n ref,\n objectFit: fit,\n objectPosition: align,\n ...(shouldIgnore ? rest : omit(rest, [\"onError\", \"onLoad\"])),\n }\n\n if (status !== \"loaded\") {\n /**\n * If user passed a custom fallback component,\n * let's render it here.\n */\n if (fallback) return fallback\n\n return (\n <chakra.img\n as={NativeImage}\n className=\"chakra-image__placeholder\"\n src={fallbackSrc}\n {...shared}\n />\n )\n }\n\n return (\n <chakra.img\n as={NativeImage}\n src={src}\n crossOrigin={crossOrigin}\n loading={loading}\n className=\"chakra-image\"\n {...shared}\n />\n )\n})\n\nexport interface ImgProps extends HTMLChakraProps<\"img\">, NativeImageOptions {}\n\n/**\n * Fallback component for most SSR users who want to use the native `img` with\n * support for chakra props\n */\nexport const Img = forwardRef<ImgProps, \"img\">((props, ref) => (\n <chakra.img ref={ref} as={NativeImage} className=\"chakra-image\" {...props} />\n))\n\nif (__DEV__) {\n Image.displayName = \"Image\"\n}\n","import { useSafeLayoutEffect } from \"@chakra-ui/hooks\"\nimport {\n ImgHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\"\n\nexport interface UseImageProps {\n /**\n * The image `src` attribute\n */\n src?: string\n /**\n * The image `srcset` attribute\n */\n srcSet?: string\n /**\n * The image `sizes` attribute\n */\n sizes?: string\n /**\n * A callback for when the image `src` has been loaded\n */\n onLoad?(event: React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * A callback for when there was an error loading the image `src`\n */\n onError?(error: string | React.SyntheticEvent<HTMLImageElement, Event>): void\n /**\n * If `true`, opt out of the `fallbackSrc` logic and use as `img`\n */\n ignoreFallback?: boolean\n /**\n * The key used to set the crossOrigin on the HTMLImageElement into which the image will be loaded.\n * This tells the browser to request cross-origin access when trying to download the image data.\n */\n crossOrigin?: ImgHTMLAttributes<any>[\"crossOrigin\"]\n}\n\ntype Status = \"loading\" | \"failed\" | \"pending\" | \"loaded\"\n\ntype ImageEvent = React.SyntheticEvent<HTMLImageElement, Event>\n\n/**\n * React hook that loads an image in the browser,\n * and let's us know the `status` so we can show image\n * fallback if it is still `pending`\n *\n * @returns the status of the image loading progress\n *\n * @example\n *\n * ```jsx\n * function App(){\n * const status = useImage({ src: \"image.png\" })\n * return status === \"loaded\" ? <img src=\"image.png\" /> : <Placeholder />\n * }\n * ```\n */\nexport function useImage(props: UseImageProps) {\n const {\n src,\n srcSet,\n onLoad,\n onError,\n crossOrigin,\n sizes,\n ignoreFallback,\n } = props\n\n const [status, setStatus] = useState<Status>(\"pending\")\n\n useEffect(() => {\n setStatus(src ? \"loading\" : \"pending\")\n }, [src])\n\n const imageRef = useRef<HTMLImageElement | null>()\n\n const load = useCallback(() => {\n if (!src) return\n\n flush()\n\n const img = new Image()\n\n img.src = src\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin\n }\n\n if (srcSet) {\n img.srcset = srcSet\n }\n\n if (sizes) {\n img.sizes = sizes\n }\n\n img.onload = (event) => {\n flush()\n setStatus(\"loaded\")\n onLoad?.((event as unknown) as ImageEvent)\n }\n img.onerror = (error) => {\n flush()\n setStatus(\"failed\")\n onError?.(error as any)\n }\n\n imageRef.current = img\n }, [src, crossOrigin, srcSet, sizes, onLoad, onError])\n\n const flush = () => {\n if (imageRef.current) {\n imageRef.current.onload = null\n imageRef.current.onerror = null\n imageRef.current = null\n }\n }\n\n useSafeLayoutEffect(() => {\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's bail out.\n */\n if (ignoreFallback) return undefined\n\n if (status === \"loading\") {\n load()\n }\n return () => {\n flush()\n }\n }, [status, load, ignoreFallback])\n\n /**\n * If user opts out of the fallback/placeholder\n * logic, let's just return 'loaded'\n */\n return ignoreFallback ? \"loaded\" : status\n}\n\nexport type UseImageReturn = ReturnType<typeof useImage>\n","import {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n ThemingProps,\n useMultiStyleConfig,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport { getValidChildren } from \"@chakra-ui/react-utils\"\nimport * as React from \"react\"\n\nexport interface InputGroupProps\n extends HTMLChakraProps<\"div\">,\n ThemingProps<\"Input\"> {}\n\nexport const InputGroup = forwardRef<InputGroupProps, \"div\">((props, ref) => {\n const styles = useMultiStyleConfig(\"Input\", props)\n const { children, className, ...rest } = omitThemingProps(props)\n\n const _className = cx(\"chakra-input__group\", className)\n const groupStyles: InputGroupProps = {}\n\n const validChildren = getValidChildren(children)\n\n const input: any = styles.field\n\n validChildren.forEach((child: any) => {\n if (!styles) return\n\n if (input && child.type.id === \"InputLeftElement\") {\n groupStyles.paddingStart = input.height ?? input.h\n }\n\n if (input && child.type.id === \"InputRightElement\") {\n groupStyles.paddingEnd = input.height ?? input.h\n }\n\n if (child.type.id === \"InputRightAddon\") {\n groupStyles.borderEndRadius = 0\n }\n\n if (child.type.id === \"InputLeftAddon\") {\n groupStyles.borderStartRadius = 0\n }\n })\n\n const clones = validChildren.map((child: any) => {\n /**\n * Make it possible to override the size and variant from `Input`\n */\n const theming = {\n size: child.props?.size || props.size,\n variant: child.props?.variant || props.variant,\n }\n\n return child.type.id !== \"Input\"\n ? React.cloneElement(child, theming)\n : React.cloneElement(\n child,\n Object.assign(theming, groupStyles, child.props),\n )\n })\n\n return (\n <chakra.div\n className={_className}\n ref={ref}\n __css={{\n width: \"100%\",\n display: \"flex\",\n position: \"relative\",\n }}\n {...rest}\n >\n <StylesProvider value={styles}>{clones}</StylesProvider>\n </chakra.div>\n )\n})\n\nif (__DEV__) {\n InputGroup.displayName = \"InputGroup\"\n}\n","import {\n chakra,\n forwardRef,\n SystemStyleObject,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface InputElementProps extends HTMLChakraProps<\"div\"> {\n placement?: \"left\" | \"right\"\n}\n\nconst StyledElement = chakra(\"div\", {\n baseStyle: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"absolute\",\n top: \"0\",\n zIndex: 2,\n },\n})\n\nconst InputElement = forwardRef<InputElementProps, \"div\">((props, ref) => {\n const { placement = \"left\", ...rest } = props\n\n const styles = useStyles()\n const input: any = styles.field\n\n const attr = placement === \"left\" ? \"insetStart\" : \"insetEnd\"\n\n const elementStyles: SystemStyleObject = {\n [attr]: \"0\",\n width: input?.height ?? input?.h,\n height: input?.height ?? input?.h,\n fontSize: input?.fontSize,\n }\n\n return <StyledElement ref={ref} __css={elementStyles} {...rest} />\n})\n\n// This is used in `input-group.tsx`\nInputElement.id = \"InputElement\"\n\nif (__DEV__) {\n InputElement.displayName = \"InputElement\"\n}\n\nexport const InputLeftElement = forwardRef<InputElementProps, \"div\">(\n (props, ref) => {\n const { className, ...rest } = props\n const _className = cx(\"chakra-input__left-element\", className)\n\n return (\n <InputElement\n ref={ref}\n placement=\"left\"\n className={_className}\n {...rest}\n />\n )\n },\n)\n\n// This is used in `input-group.tsx`\nInputLeftElement.id = \"InputLeftElement\"\n\nif (__DEV__) {\n InputLeftElement.displayName = \"InputLeftElement\"\n}\n\nexport const InputRightElement = forwardRef<InputElementProps, \"div\">(\n (props, ref) => {\n const { className, ...rest } = props\n const _className = cx(\"chakra-input__right-element\", className)\n\n return (\n <InputElement\n ref={ref}\n placement=\"right\"\n className={_className}\n {...rest}\n />\n )\n },\n)\n\n// This is used in `input-group.tsx`\nInputRightElement.id = \"InputRightElement\"\n\nif (__DEV__) {\n InputRightElement.displayName = \"InputRightElement\"\n}\n","import { SearchIcon } from \"@chakra-ui/icons\";\nimport {\n Box,\n Flex,\n Heading,\n Input,\n InputGroup,\n InputRightElement,\n Link,\n Stack,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Form } from \"../../components/Form\";\n\n// All elements are currently static / have no real interactions\nexport const Hero: FunctionComponent = () => {\n return (\n <Flex\n align=\"center\"\n bg=\"blue.800\"\n color=\"white\"\n direction=\"column\"\n justify=\"center\"\n py={12}\n >\n <Heading as=\"h1\" size=\"xl\">\n Build cloud infrastructure with reusable components\n </Heading>\n <Heading as=\"h2\" mt={2} size=\"lg\">\n Provided by the{\" \"}\n <Box as=\"span\" color=\"yellow.400\">\n community\n </Box>\n , backed by{\" \"}\n <Box as=\"span\" color=\"yellow.400\">\n AWS\n </Box>\n .\n </Heading>\n <Flex direction=\"column\" mt={8}>\n <Stack direction=\"row\" spacing={7}>\n <Link borderBottom=\"1px solid\" borderBottomColor=\"yellow.400\">\n All CDKs\n </Link>\n <Link>AWS CDK</Link>\n <Link>CDK for Terraform</Link>\n <Link>CDK for Kubernetes</Link>\n </Stack>\n <Form mt={4}>\n <InputGroup>\n <Input\n bg=\"white\"\n placeholder=\"Search over 600 construct libraries for all CDKS\"\n variant=\"filled\"\n />\n <InputRightElement>\n <SearchIcon color=\"gray.500\" />\n </InputRightElement>\n </InputGroup>\n </Form>\n </Flex>\n </Flex>\n );\n};\n","import { Heading, Stack, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactNode } from \"react\";\n\nexport interface InfoSectionProps {\n title: string;\n description: ReactNode;\n}\n\nexport const InfoSection: FunctionComponent<InfoSectionProps> = ({\n title,\n description,\n children,\n}) => (\n <Stack color=\"blue.800\" spacing={4}>\n <Heading as=\"h3\" size=\"md\">\n {title}\n </Heading>\n <Text size=\"sm\">{description}</Text>\n {children}\n </Stack>\n);\n","import { Flex, Divider, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../../components/Card\";\nimport { Picture } from \"../../components/Picture\";\nimport { InfoSection } from \"./InfoSection\";\n\nexport const InfoPanel: FunctionComponent = () => {\n return (\n <Card borderRadius=\"none\" boxShadow=\"none\" h=\"full\" p={8}>\n <Stack spacing={8}>\n <InfoSection\n description={\n <>\n The construct hub is a{\" \"}\n <strong>\n central destination to discover and share cloud application\n design patterns and reference architectures\n </strong>{\" \"}\n defined for the AWS CDK, CDK for Kubernetes (CDK8s), CDK for\n Terraform (CDKtf) and any other construct-based tool.\n </>\n }\n title=\"What is Construct Hub?\"\n >\n <Flex\n align=\"center\"\n justifyItems=\"start\"\n sx={{\n \"& > *\": {\n mt: 4,\n mr: 4,\n },\n }}\n wrap=\"wrap\"\n >\n <Picture alt=\"AWS CDK logo\" src=\"/assets/aws-cdk.png\" />\n <Picture alt=\"Terraform logo\" src=\"/assets/terraform.png\" />\n <Picture alt=\"Kubernetes logo\" src=\"/assets/kubernetes.png\" />\n </Flex>\n </InfoSection>\n <Divider />\n <InfoSection\n description={\n <>\n Constructs are <strong>cloud building blocks</strong> introduced\n by the Constructs Programming Model (CPM) that can be{\" \"}\n <strong>\n used to assemble complete applications of any complexity.\n </strong>{\" \"}\n AWS, enterprises, start-ups, and individual developers use CDK\n constructs to share proven architecture patterns as reusable code\n libraries, so that everyone can benefit from the collective wisdom\n of the community.\n </>\n }\n title=\"What is a construct?\"\n />\n <Divider />\n <InfoSection\n description={\n <>\n Construct Hub is built to <strong>serve the community</strong>{\" \"}\n that uses the constructs programming model (CPM) and to allow them{\" \"}\n <strong>\n find publicly available constructs they can reuse.\n </strong>{\" \"}\n Before the Construct Hub, developers did not have an easy way to\n discover construct libraries created by the community since they\n were published across various package managers and without a\n central index.\n </>\n }\n title=\"Why should I use this?\"\n />\n </Stack>\n </Card>\n );\n};\n","import { Flex, Grid } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { Hero } from \"./Hero\";\nimport { InfoPanel } from \"./InfoPanel\";\n\nexport const HomeRedesign: FunctionComponent = () => (\n <Page\n meta={{\n title: \"Construct Hub\",\n description:\n \"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.\",\n suffix: false,\n }}\n pageName=\"home\"\n >\n <Flex direction=\"column\">\n <Hero />\n <Grid h=\"full\" p={3} templateColumns=\"2fr 1fr\" templateRows=\"1fr\">\n {/* eslint-disable-next-line jsx-a11y/accessible-emoji */}\n <Flex mx=\"auto\">🚧 This section is under construction 🚧</Flex>\n <InfoPanel />\n </Grid>\n </Flex>\n </Page>\n);\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[2],{109:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return l}));var r=n(0),c=n(18),a=n(1),i=Object(r.createContext)({trackPageView:function(){}}),o=function(e){var t=e.children,n=Object(c.h)().pathname,o=Object(r.useRef)(null),s=Object(r.useCallback)((function(e){var t,r,c;o.current!==n&&(null===(t=window)||void 0===t||null===(r=t.AWSMA)||void 0===r||null===(c=r.ready)||void 0===c||c.call(r,(function(){document.dispatchEvent(new CustomEvent(window.AWSMA.TRIGGER_EVENT,{detail:e})),o.current=n})))}),[n]);return Object(a.jsx)(i.Provider,{value:{trackPageView:s},children:t})},s=n(6),l=function(e){var t=Object(r.useContext)(i).trackPageView,n=Object(c.h)().pathname,a=Object(r.useMemo)((function(){return{page:Object(s.a)({pageURL:window.location.href.replace("://localhost:3000","://constructs.local.dev")},e.page),event:{type:"pageview",name:e.event.name,description:e.event.description}}}),[n,e]);return Object(r.useCallback)((function(){return t(a)}),[t,a])}},110:function(e,t,n){"use strict";n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return l})),n.d(t,"a",(function(){return u}));var r=n(5),c=n(4),a=n(13),i=new RegExp(/git@github\.com:([a-zA-Z-]+)+\/?([a-zA-Z-]+)*(\.git)?/),o=function(e){try{var t=e,n=e.match(i);if(n){var r=Object(c.a)(n,3),a=r[1],o=r[2];t="https://github.com/".concat(a,"/").concat(o)}return{hostname:new URL(t).hostname,url:t}}catch(s){return}},s=function(e,t){var n=e;if(t){var r=function(e,t){var n=new URLSearchParams(t);return Object.entries(e).filter((function(e){return null!=Object(c.a)(e,2)[1]})).forEach((function(e){var t=Object(c.a)(e,2),r=t[0],a=t[1];n.set(r,"".concat(a))})),n.toString()}(t);r&&(n+="?".concat(r))}return n},l=function(e){var t,n=e.query,c=e.offset,i=e.language;return s(a.c.SEARCH,(t={},Object(r.a)(t,a.b.SEARCH_QUERY,n),Object(r.a)(t,a.b.LANGUAGE,i),Object(r.a)(t,a.b.OFFSET,null!==c&&void 0!==c?c:0),t))},u=function(e){var t,n=e.name,c=e.version,i=e.language,o=e.submodule;return s("".concat(a.c.PACKAGES,"/").concat(n,"/v/").concat(c),(t={},Object(r.a)(t,a.b.SUBMODULE,o),Object(r.a)(t,a.b.LANGUAGE,i),t))}},111:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(6),c=n(21),a=n(184),i=n(1),o=Object(c.a)((function(e,t){return Object(i.jsx)(a.a,Object(r.a)({bg:"white",border:"base",borderRadius:"card",boxShadow:"base",p:2,ref:t},e))}));o.displayName="Card"},113:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(4),c=n(0),a=n(18),i=n(54),o=n(13),s=n(114),l=i.d.TypeScript,u="preferred-language",d=function(e){return null!=e&&i.e.has(e)},b=function(e){if(d(e))return e;try{var t,n=null!==(t=localStorage.getItem(u))&&void 0!==t?t:"";if(d(n))return n}catch(r){}return l},j=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.updateUrl,n=e.updateSaved,i=Object(a.h)(),l=i.pathname,j=i.hash,f=Object(a.g)(),h=f.replace,O=Object(s.a)(),p=O.get(o.b.LANGUAGE),g=Object(c.useState)((function(){return b(p)})),m=Object(r.a)(g,2),v=m[0],x=m[1];Object(c.useEffect)((function(){d(p)&&p!==v&&x(p)}),[p]),Object(c.useEffect)((function(){p!==v&&t&&(O.set(o.b.LANGUAGE,v),h({pathname:l,hash:j,search:O.toString()}))}),[v,t]);var y=Object(c.useCallback)((function(e){if(x(e),n)try{localStorage.setItem(u,e)}catch(t){}}),[n]);return Object(c.useMemo)((function(){return[v,y]}),[v,y])}},114:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0),c=n(18),a=function(){var e=Object(c.h)().search;return Object(r.useMemo)((function(){return new URLSearchParams(e)}),[e])}},117:function(e,t,n){"use strict";n.d(t,"a",(function(){return y})),n.d(t,"b",(function(){return v}));var r=n(6),c=n(22),a=n(141),i=n(81),o=n(4),s=n(21),l=n(216),u=n(145),d=n(54),b=n(204),j=n(212),f=n(189),h=n(1),O=n(57),p=Object(O.a)("catalogSearch",["form","input","languageDropdown","languageDropdownMenu","languageDropdownValue","languageItem","submit"]),g=Object.fromEntries(Object.entries(d.b).filter((function(e){var t=Object(o.a)(e,1)[0];return d.e.has(t)}))),m=function(e){var t=e.placeholder,n=e.items,r=e.onSelect,c=e.selected,a=e.testIds,i=c?n[c]:t,s=Object.entries(n);return Object(h.jsxs)(j.a,{strategy:"fixed",children:[Object(h.jsx)(j.b,{as:u.a,bg:"white",borderColor:"blue.100",boxShadow:"base","data-testid":a.trigger,rightIcon:Object(h.jsx)(b.a,{color:"blue.500"}),variant:"outline",children:Object(h.jsx)(f.a,{"data-testid":a.value,children:i})}),Object(h.jsxs)(j.f,{"data-testid":a.menu,children:[Object(h.jsx)(j.e,{"data-testid":a.item,onClick:function(){return r(null)},children:"Any"}),s.map((function(e){var t=Object(o.a)(e,2),n=t[0],c=t[1];return Object(h.jsx)(j.e,{"data-testid":a.item,onClick:function(){return r(n)},children:c},n)}))]})]})},v=Object(s.a)((function(e,t){var n=e.query,r=e.onQueryChange,c=e.language,a=e.onLanguageChange;return Object(h.jsxs)(h.Fragment,{children:[Object(h.jsx)(l.a,{bg:"white",borderColor:"blue.100",boxShadow:"base","data-testid":p.input,name:"query",onChange:r,placeholder:"Search Constructs...",ref:t,value:n}),Object(h.jsx)(m,{items:g,onSelect:a,placeholder:"Language...",selected:c,testIds:{item:p.languageItem,menu:p.languageDropdownMenu,trigger:p.languageDropdown,value:p.languageDropdownValue}}),Object(h.jsx)(u.a,{boxShadow:"base",colorScheme:"blue","data-testid":p.submit,type:"submit",children:"Search"})]})})),x=["onSubmit"],y=function(e){var t=e.onSubmit,n=Object(c.a)(e,x);return Object(h.jsx)(i.a,{"data-testid":p.form,onSubmit:t,children:Object(h.jsx)(a.a,{autoRows:"1fr",gap:4,templateColumns:{sm:"1fr",md:"3fr 1fr 1fr"},width:"full",children:Object(h.jsx)(v,Object(r.a)({},n))})})}},118:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(17),c=n(0),a=n(54),i=n(84),o=function(e){var t=e.limit,n=e.offset,o=void 0===n?0:n,s=e.query,l=void 0===s?"":s,u=e.language,d=void 0===u?null:u,b=Object(i.b)(),j=b.data,f=b.loading,h=b.error,O=Object(c.useMemo)((function(){if(f||h||!(null===j||void 0===j?void 0:j.packages))return[];var e=j.packages.filter((function(e){if(d&&d!==a.d.TypeScript&&!Object.keys(e.languages).includes(d))return!1;if(l.length){var t=JSON.stringify(e).toLowerCase(),n=l.toLowerCase();if(!t.includes(n))return!1}return!0}));return Object(r.a)(e).sort((function(e,t){var n=new Date(e.metadata.date),r=new Date(t.metadata.date);return n===r?0:n<r?1:-1}))}),[null===j||void 0===j?void 0:j.packages,h,d,f,l]),p=O?Math.floor(O.length/t):0,g=Object(c.useMemo)((function(){var e=(o>p?p:o)*t,n=e+t;return O.slice(e,n)}),[t,o,p,O]);return Object(c.useMemo)((function(){return{loading:f,results:O,error:h,displayable:g,pageLimit:p}}),[g,h,f,p,O])}},119:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(4),c=n(0),a=n(18),i=n(110),o=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=Object(c.useState)(null!==(e=n.defaultQuery)&&void 0!==e?e:""),s=Object(r.a)(o,2),l=s[0],u=s[1],d=Object(c.useState)(null!==(t=n.defaultLanguage)&&void 0!==t?t:null),b=Object(r.a)(d,2),j=b[0],f=b[1],h=Object(a.g)(),O=h.push,p=function(e){e.preventDefault(),u(e.target.value)},g=Object(c.useCallback)((function(){O(Object(i.c)({language:j,query:l}))}),[j,O,l]),m=Object(c.useCallback)((function(e){null===e||void 0===e||e.preventDefault(),g()}),[g]);return Object(c.useMemo)((function(){return{language:j,onLanguageChange:f,onQueryChange:p,onSearch:g,onSubmit:m,query:l,setLanguage:f,setQuery:u}}),[j,g,m,l])}},13:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return c})),n.d(t,"c",(function(){return a}));var r={PACKAGES_PREFIX:"/data",CATALOG_SUFFIX:"/catalog.json",ASSEMBLY_SUFFIX:"/assembly.json",METADATA_SUFFIX:"/metadata.json",CONFIG:"/config.json"},c={LANGUAGE:"lang",OFFSET:"offset",SEARCH_QUERY:"q",SUBMODULE:"submodule"},a={FAQ:"/faq",HOME:"/",PACKAGES:"/packages",SEARCH:"/search",SITE_TERMS:"/terms"}},132:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(4),c=n(0),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Object(c.useState)(e),a=Object(r.a)(n,2),i=a[0],o=a[1],s=t.delay,l=void 0===s?250:s,u=t.onChange;return Object(c.useEffect)((function(){var t=setTimeout((function(){o(e),null===u||void 0===u||u(e)}),l);return function(){clearTimeout(t)}}),[e,l,u]),i}},133:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var r=n(6),c=n(22),a=n(21),i=n(207),o=n(1),s=["name","onClick"],l=Object(a.a)((function(e,t){var n=e.name,a=e.onClick,l=Object(c.a)(e,s);return Object(o.jsx)(i.a,Object(r.a)(Object(r.a)({alignItems:"center",display:"flex",fontSize:"lg",h:12,lineHeight:"base",listStyleType:"none",onClick:a,onKeyDown:function(e){"Enter"===e.key&&a()},px:4,ref:t,role:"option",sx:{":hover, :focus":{bg:"gray.100"}},tabIndex:0},l),{},{children:n}))}));l.displayName="SearchItem"},158:function(e,t,n){},165:function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"initialize",(function(){return R})),n.d(r,"access",(function(){return L})),n.d(r,"checkForCookieConsent",(function(){return W})),n.d(r,"customizeCookies",(function(){return D})),n.d(r,"getConsentCookie",(function(){return N})),n.d(r,"hasConsent",(function(){return U}));var c,a,i=n(0),o=n.n(i),s=n(77),l=n.n(s),u=n(29),d=(n(158),n(141)),b=n(18),j=n(196),f=n(198),h=n(192),O=n(184),p=n(195),g=n(189),m=n(197),v=n(111),x=n(55),y=n(1),S="showing-dev-preview-banner",w=function(){var e,t=Object(h.a)({defaultIsOpen:JSON.parse(null!==(e=window.sessionStorage.getItem(S))&&void 0!==e?e:"true"),onClose:function(){return window.sessionStorage.setItem(S,"false")}}),n=t.isOpen,r=t.onClose;return Object(y.jsx)(O.a,{h:"max-content",children:Object(y.jsx)(p.a,{in:n,children:Object(y.jsxs)(v.a,{"aria-label":"Preview Banner",bg:"blue.500",border:"none",boxShadow:"none",color:"white",mt:4,mx:4,p:4,position:"relative",role:"alertdialog",children:[Object(y.jsx)(j.a,{h:5,left:4,position:"absolute",top:4,w:5}),Object(y.jsxs)(g.a,{fontSize:"md",mx:8,textAlign:"center",children:["This application is in Dev Preview. Some features may change. If you find any issues, please report them"," ",Object(y.jsx)(x.a,{color:"inherit",hasWarning:!1,href:"https://github.com/cdklabs/construct-hub-webapp/issues",textDecoration:"underline",children:"here"})]}),Object(y.jsx)(m.a,{"aria-label":"Dismiss banner",colorScheme:"white",icon:Object(y.jsx)(f.a,{}),onClick:r,position:"absolute",right:4,size:"xs",top:3,variant:"ghost"})]})})})},C=n(4),k=n(199),E=n(200),A=n(201),I=n(145),z=n(22),T=n(32),M=n.n(T),F=n(49),P=function(){new URLSearchParams(window.location.search).get("sb")},R=function(){var e=Object(F.a)(M.a.mark((function e(){return M.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e,t){window.addEventListener("load",Object(F.a)(M.a.mark((function r(){var a,i,o;return M.a.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,a={domain:window.location.hostname,language:navigator.language,__storeWriter:P()},r.next=4,n.e(14).then(n.t.bind(null,579,7));case 4:i=r.sent,o=i.AWSCShortbread,c=o(a),e(),r.next=13;break;case 10:r.prev=10,r.t0=r.catch(0),t(r.t0);case 13:case"end":return r.stop()}}),r,null,[[0,10]])}))))})));case 1:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),G=function(e){return function(){var t;if(!c)throw new Error("shortbread has not been initialized");return(t=c)[e].apply(t,arguments)}},L=G("access"),W=G("checkForCookieConsent"),D=G("customizeCookies"),N=G("getConsentCookie"),U=G("hasConsent"),H=R,_=Object(z.a)(r,["initialize"]),B=Object(i.createContext)({}),V=function(e){var t=e.children,n=Object(i.useState)(!1),r=Object(C.a)(n,2),c=r[0],a=r[1];return Object(i.useEffect)((function(){var e=!1;return H().then((function(){e||(_.checkForCookieConsent(),a(!0))})).catch((function(t){console.error(t),e||a(!1)})),function(){e=!0,a(!1)}}),[]),Object(y.jsx)(B.Provider,{value:c?_:{},children:t})},q=n(80),J=n(13),K={SERVICE_TERMS:{display:"AWS Service Terms",url:"https://aws.amazon.com/service-terms/",testId:"service-terms"},PRIVACY:{display:"Privacy",url:"https://aws.amazon.com/privacy/",testId:"privacy"},SITE_TERMS:{display:"Site Terms",url:J.c.SITE_TERMS,testId:"site-terms",isExternal:!1},LEGAL:{display:"Legal",url:"https://aws.amazon.com/legal/",testId:"legal"}},Q=n(17),X=n(57),Y=Object(X.a)("footer",["container","links","disclaimer","manageCookies"].concat(Object(Q.a)(Object.values(K).map((function(e){return e.testId}))))),Z=function(){var e=Object(i.useContext)(B).customizeCookies;return Object(y.jsxs)(k.a,{align:"center",as:"footer",bg:"blue.800",color:"white","data-testid":Y.container,direction:"column",justify:"center",py:4,children:[Object(y.jsx)(E.a,{columnGap:6,columns:[1,2,4],"data-testid":Y.links,children:Object.entries(K).map((function(e,t){var n=Object(C.a)(e,2),r=n[0],c=n[1],a=c.display,i=c.isExternal,o=void 0===i||i,s=c.testId,l=c.url;return Object(y.jsxs)(k.a,{align:"center",direction:{base:"column",md:"row"},children:[Object(y.jsx)(O.a,{display:{base:"none",md:0!==t?"initial":"none"},h:5,children:Object(y.jsx)(A.a,{borderColor:"white",mr:6,orientation:"vertical"})}),o?Object(y.jsx)(x.a,{color:"currentcolor","data-testid":Y[s],hasWarning:!1,href:l,lineHeight:10,mx:"auto",children:a}):Object(y.jsx)(q.a,{color:"currentcolor","data-testid":Y[s],lineHeight:10,mx:"auto",to:l,children:a}),Object(y.jsx)(O.a,{display:{base:"none",sm:t<2?"initial":"none",md:"none"},w:"100%",children:Object(y.jsx)(A.a,{borderColor:"white"})})]},r)}))}),Object(y.jsx)(g.a,{"data-testid":Y.disclaimer,fontSize:"xs",mt:4,children:"2021 Amazon Web Services, Inc. All rights reserved."}),Object(y.jsx)(I.a,{color:"white","data-testid":Y.manageCookies,fontSize:"xs",fontWeight:"normal",mt:4,onClick:e,variant:"link",children:"Manage Cookies"})]})},$=n(6),ee=[{display:"FAQ",isNavLink:!0,url:"/faq"},{display:"Construct Hub on GitHub",url:"https://github.com/cdklabs/construct-hub"},{display:"Issues on GitHub",url:"https://github.com/cdklabs/construct-hub/issues"}],te=[{display:"AWS CDK",links:[{display:"Home",url:"https://aws.amazon.com/cdk/"},{display:"Getting Started",url:"https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html"},{display:"Workshop",url:"https://cdkworkshop.com/"},{display:"Best Practices",url:"https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk"}]},{display:"CDK for Terraform",links:[{display:"Getting Started",url:"https://learn.hashicorp.com/tutorials/terraform/cdktf"},{display:"Tutorials",url:"https://learn.hashicorp.com/collections/terraform/cdktf"}]},{display:"CDK for Kubernetes",links:[{display:"Home",url:"https://cdk8s.io"},{display:"Getting Started",url:"https://cdk8s.io/docs/latest/getting-started"},{display:"Documentation",url:"https://cdk8s.io/docs/latest"},{display:"API Reference",url:"https://cdk8s.io/docs/latest/reference/index.html"}]},{display:"Community",links:[{display:"Slack",url:"https://join.slack.com/t/cdk-dev/shared_invite/zt-mso6p56d-qJp7SOTBvMaQuDrx7R2wHg"},{display:"Community Hub",url:"https://cdk.dev"}]}],ne=n(212),re=["children"],ce=function(e){var t=e.children,n=Object(z.a)(e,re);return Object(y.jsx)(ne.a,Object($.a)(Object($.a)({colorScheme:"blue.800",strategy:"fixed"},n),{},{children:t}))},ae=n(21),ie=["items"],oe=function(e){var t=e.display,n=e.isNavLink,r=e.url;return n?Object(y.jsx)(q.a,{color:"blue.500",to:r,children:t}):Object(y.jsx)(x.a,{alignItems:"center",display:"flex",hasWarning:!1,href:r,justifyContent:"space-between",w:"100%",children:t})},se=Object(ae.a)((function(e,t){var n=e.items,r=Object(z.a)(e,ie);return Object(y.jsx)(ne.f,Object($.a)(Object($.a)({},r),{},{ref:t,children:n.map((function(e,t){return"links"in e?Object(y.jsxs)(i.Fragment,{children:[Object(y.jsx)(ne.d,{align:"left",title:e.display,children:e.links.map((function(e,t){return Object(y.jsx)(ne.e,{children:Object(y.jsx)(oe,Object($.a)({},e))},"".concat(e.display,"-").concat(t))}))}),t!==n.length-1&&Object(y.jsx)(ne.c,{})]},"".concat(e.display,"-").concat(t)):Object(y.jsx)(ne.e,{children:Object(y.jsx)(oe,Object($.a)({},e))},"".concat(e.display,"-").concat(t))}))}))})),le=n(204),ue=["children"],de=Object(ae.a)((function(e,t){var n=e.children,r=Object(z.a)(e,ue);return Object(y.jsx)(ne.b,Object($.a)(Object($.a)({as:I.a,color:"blue.800",fontWeight:"500",ref:t,rightIcon:Object(y.jsx)(le.a,{h:6,w:6}),size:"md",variant:"link"},r),{},{children:n}))})),be=Object(X.a)("header",["container","title","gettingStartedTrigger","gettingStartedMenu","resourcesTrigger","resourcesMenu","navOpen","navClose","searchButton","searchIcon","mobileNav"]),je=function(){return Object(y.jsxs)(ce,{children:[Object(y.jsx)(de,{"data-testid":be.gettingStartedTrigger,children:"Getting Started"}),Object(y.jsx)(se,{"data-testid":be.gettingStartedMenu,items:ee})]})},fe=n(206),he=n(219),Oe=n(220),pe=n(44),ge=n(221),me=function(){return Object(y.jsxs)(ce,{children:[Object(y.jsx)(de,{"data-testid":be.resourcesTrigger,children:"Resources"}),Object(y.jsx)(se,{"data-testid":be.resourcesMenu,items:te})]})},ve=n(205),xe=function(){return Object(y.jsx)(ve.a,{as:"h1",color:"blue.800","data-testid":be.title,size:"lg",children:Object(y.jsxs)(u.b,{to:"/",children:[Object(y.jsx)(O.a,{as:"span",color:"blue.500",children:"Construct"})," ","Hub"]})})},ye=function(e){var t=e.isOpen,n=e.onClose;return Object(y.jsx)(he.a,{children:Object(y.jsxs)(Oe.a,{isOpen:t,onClose:n,placement:"left",size:"xs",children:[Object(y.jsx)(pe.h,{}),Object(y.jsxs)(Oe.b,{"data-testid":be.mobileNav,children:[Object(y.jsx)(pe.c,{}),Object(y.jsx)(pe.g,{display:"flex",justifyContent:"center",children:Object(y.jsx)(xe,{})}),Object(y.jsx)(pe.b,{children:Object(y.jsxs)(ge.a,{align:"start",justify:"start",spacing:4,children:[Object(y.jsx)(je,{}),Object(y.jsx)(me,{})]})})]})]})})},Se=function(){var e=Object(h.a)();return Object(y.jsxs)(y.Fragment,{children:[Object(y.jsx)(m.a,{"aria-label":"Navigation Menu",borderRadius:"md","data-testid":be.navOpen,display:{md:"none"},icon:Object(y.jsx)(fe.a,{}),onClick:e.onOpen,variant:"ghost"}),Object(y.jsx)(ye,Object($.a)({},e))]})},we=n(208),Ce=n(207),ke=n(118),Ee=n(119),Ae=n(132),Ie=n(113),ze=n(117),Te=n(81),Me=n(133),Fe=Object(X.a)("searchModal",["container"]),Pe=["onSubmit"],Re=function(e){var t=e.isOpen,n=e.onClose,r=Object(b.g)().push,c=Object(Ie.a)(),a=Object(C.a)(c,1)[0],o=Object(Ee.a)(),s=o.onSubmit,l=Object(z.a)(o,Pe),u=Object(Ae.a)({query:l.query,language:l.language}),d=u.query,j=u.language,f=Object(ke.a)({limit:5,offset:0,query:d,language:j}).displayable,h=(d||j)&&f.length>0,O=Object(i.useRef)(null);return Object(y.jsx)(he.a,{children:Object(y.jsx)(pe.a,{initialFocusRef:O,isOpen:t,onClose:n,children:Object(y.jsx)(pe.h,{children:Object(y.jsxs)(pe.d,{"data-testid":Fe.container,children:[Object(y.jsx)(pe.c,{}),Object(y.jsx)(pe.g,{children:"Search modules or providers"}),Object(y.jsxs)(pe.b,{children:[Object(y.jsx)(Te.a,{onSubmit:function(e){n(),s(e)},pb:4,children:Object(y.jsx)(ge.a,{spacing:4,children:Object(y.jsx)(ze.b,Object($.a)({ref:O},l))})}),h&&Object(y.jsxs)(y.Fragment,{children:[Object(y.jsx)(A.a,{}),Object(y.jsx)(ve.a,{fontSize:"md",my:4,textAlign:"center",children:"Suggestions"}),Object(y.jsx)(Ce.c,{children:f.map((function(e){return Object(y.jsx)(Me.a,{name:e.name,onClick:function(){return t="".concat(J.c.PACKAGES,"/").concat(e.name,"/v/").concat(e.version,"?").concat(J.b.LANGUAGE,"=").concat(null!==j&&void 0!==j?j:a),n(),void r(t);var t}},e.name)}))})]})]})]})})})})},Ge=function(){var e=Object(h.a)(),t=Object(b.h)().pathname;return[J.c.HOME,J.c.SEARCH].some((function(e){return e===t}))?null:Object(y.jsxs)(y.Fragment,{children:[Object(y.jsx)(I.a,{align:"center",color:"gray.600",colorScheme:"gray","data-testid":be.searchButton,display:{base:"none",md:"flex"},fontWeight:"medium",justifyContent:"space-between",m:"0 auto",maxW:"500px",onClick:e.onOpen,rightIcon:Object(y.jsx)(we.a,{color:"gray.600",ml:4}),variant:"outline",w:"100%",children:"Search Constructs..."}),Object(y.jsx)(m.a,{"aria-label":"Search Icon",borderRadius:"md","data-testid":be.searchIcon,display:{base:"initial",md:"none"},icon:Object(y.jsx)(we.a,{color:"gray.600"}),onClick:e.onOpen,variant:"ghost"}),Object(y.jsx)(Re,Object($.a)({},e))]})},Le=function(e){return Object(y.jsx)(d.b,Object($.a)({align:"center",justify:"center",rowStart:1},e))},We=function(){return Object(y.jsxs)(d.a,{alignItems:"center",as:"header",bg:"white",boxShadow:"base","data-testid":be.container,gap:4,gridTemplateColumns:{base:"1fr 3fr 1fr",md:"minmax(200px, 2fr) minmax(200px, 3fr) 2fr"},gridTemplateRows:"1fr",maxW:"100vw",position:"sticky",px:4,py:4,top:0,w:"100%",zIndex:"sticky",children:[Object(y.jsx)(Le,{colStart:{base:2,md:1},justifySelf:{base:"center",md:"start"},children:Object(y.jsx)(xe,{})}),Object(y.jsx)(Le,{colStart:{base:3,md:2},justifySelf:{base:"end",md:"stretch"},children:Object(y.jsx)(Ge,{})}),Object(y.jsxs)(Le,{colStart:{base:1,md:3},justifySelf:{base:"start",md:"end"},children:[Object(y.jsxs)(d.a,{display:{base:"none",md:"grid"},gap:4,gridTemplateColumns:"1fr 1fr",gridTemplateRows:"1fr",placeItems:"center",w:"100%",children:[Object(y.jsx)(O.a,{children:Object(y.jsx)(je,{})}),Object(y.jsx)(O.a,{children:Object(y.jsx)(me,{})})]}),Object(y.jsx)(Se,{})]})]})},De=n(209),Ne=n(191),Ue=function(){return Object(y.jsx)(De.a,{children:Object(y.jsx)(Ne.a,{size:"xl"})})},He=["component"],_e=function(e){var t=e.component,n=Object(z.a)(e,He);return Object(y.jsx)(b.b,Object($.a)(Object($.a)({},n),{},{children:Object(y.jsx)(i.Suspense,{fallback:Object(y.jsx)(Ue,{}),children:Object(y.jsx)(t,{})})}))},Be=n(85),Ve=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(11)]).then(n.bind(null,585))})),qe=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(7)]).then(n.bind(null,587))})),Je=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(9)]).then(n.bind(null,586))})),Ke=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(10)]).then(n.bind(null,286))})),Qe=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(4),n.e(6)]).then(n.bind(null,581))})),Xe=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(1),n.e(8)]).then(n.bind(null,584))})),Ye=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(12)]).then(n.bind(null,588))})),Ze=Object(i.lazy)((function(){return Promise.all([n.e(0),n.e(13)]).then(n.bind(null,589))})),$e=function(){var e,t=Object(Be.b)(),n=t.data,r=t.loading,c=null!==(e=null===n||void 0===n?void 0:n.featureFlags)&&void 0!==e?e:{},a=(null===c||void 0===c?void 0:c.homeRedesign)||(null===c||void 0===c?void 0:c.searchRedesign);return Object(y.jsxs)(d.a,{as:"main",bg:"bgPrimary",gridTemplateColumns:"1fr",gridTemplateRows:"auto auto 1fr auto",h:"100%",inset:0,maxW:"100vw",overflow:"hidden auto",position:"fixed",children:[Object(y.jsx)(We,{}),r||a?Object(y.jsx)("div",{}):Object(y.jsx)(w,{}),r?Object(y.jsx)(Ue,{}):Object(y.jsxs)(b.d,{children:[Object(y.jsx)(_e,{component:Ve,exact:!0,path:J.c.FAQ}),Object(y.jsx)(_e,{component:(null===c||void 0===c?void 0:c.homeRedesign)?Je:qe,exact:!0,path:J.c.HOME}),Object(y.jsx)(_e,{component:Ze,exact:!0,path:J.c.SITE_TERMS}),Object(y.jsx)(_e,{component:Qe,path:J.c.PACKAGES}),Object(y.jsx)(_e,{component:(null===c||void 0===c?void 0:c.searchRedesign)?Ye:Xe,exact:!0,path:J.c.SEARCH}),Object(y.jsx)(_e,{component:Ke,path:"*"})]}),Object(y.jsx)(Z,{})]})},et=n(109),tt=n(84),nt=n(99),rt=n(214),ct=n(210),at=n(95),it=at.theme.components.Code,ot=Object($.a)(Object($.a)({},it),{},{variants:Object($.a)(Object($.a)({},it.variants),{},{"code-block":Object($.a)(Object($.a)({},it.variants.subtle),{},{display:"block",whiteSpace:"pre"})})}),st=function(e,t){return function(n){var r="function"===typeof e?e(n):e;return Object($.a)(Object($.a)({},r),{},{container:Object($.a)(Object($.a)({},r.container),t)})}},lt=at.theme.components.Tag,ut=Object($.a)(Object($.a)({},lt),{},{baseStyle:{container:{fontWeight:"normal"}},variants:Object($.a)(Object($.a)({},lt.variants),{},{subtle:st(lt.variants.subtle,{background:"#F2F2F2",color:"blue.800"}),official:st(lt.variants.subtle,{background:"rgba(33, 150, 83, 0.1)",color:"#219653"})})}),dt=Object($.a)(Object($.a)({},at.theme.components),{},{Code:ot,Divider:{defaultProps:{borderColor:"rgba(0, 124, 253, 0.15)"}},Tag:ut}),bt={borders:{base:"1px solid rgba(0, 124, 253, 0.15)"},colors:Object($.a)(Object($.a)({},at.theme.colors),{},{blue:{50:"#dcf3ff",100:"#aed9ff",200:"#7dbeff",300:"#4aa4ff",400:"#1a8aff",500:"#0070e6",600:"#0057b4",700:"#003e82",800:"#002551",900:"#000d21"},bgPrimary:"#F8F8F8"}),radii:{card:"0.75rem"},sizes:{container:{"2xl":"1920px"}},shadows:{base:"0px 4px 15px rgba(40, 132, 178, 0.15)"}},jt=Object(ct.a)(Object($.a)(Object($.a)({},bt),{},{components:dt})),ft=function(e){var t=e.children;return Object(y.jsx)(rt.a,{resetCSS:!0,theme:jt,children:t})},ht=Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)),Ot=function(e,t){navigator.serviceWorker.register(e).then((function(e){e.onupdatefound=function(){var n=e.installing;null!=n&&(n.onstatechange=function(){"installed"===n.state&&(navigator.serviceWorker.controller?(console.log("New content is available and will be used when all tabs for this page are closed. See https://cra.link/PWA."),t&&t.onUpdate&&t.onUpdate(e)):(console.log("Content is cached for offline use."),t&&t.onSuccess&&t.onSuccess(e)))})}})).catch((function(e){console.error("Error during service worker registration:",e)}))};l.a.render(Object(y.jsx)(o.a.StrictMode,{children:Object(y.jsx)(Be.a,{children:Object(y.jsx)(V,{children:Object(y.jsx)(u.a,{children:Object(y.jsx)(et.a,{children:Object(y.jsx)(ft,{children:Object(y.jsx)(nt.a,{children:Object(y.jsx)(tt.a,{children:Object(y.jsx)($e,{})})})})})})})})}),document.getElementById("root")),a&&a instanceof Function&&n.e(15).then(n.bind(null,580)).then((function(e){var t=e.getCLS,n=e.getFID,r=e.getFCP,c=e.getLCP,i=e.getTTFB;t(a),n(a),r(a),c(a),i(a)}),(function(){})),function(e){if("serviceWorker"in navigator){if(new URL("",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",(function(){var t="".concat("","/service-worker.js");ht?(!function(e,t){fetch(e,{headers:{"Service-Worker":"script"}}).then((function(n){var r=n.headers.get("content-type");404===n.status||null!=r&&-1===r.indexOf("javascript")?navigator.serviceWorker.ready.then((function(e){e.unregister().then((function(){window.location.reload()}))})):Ot(e,t)})).catch((function(){console.log("No internet connection found. App is running in offline mode.")}))}(t,e),navigator.serviceWorker.ready.then((function(){console.log("This web app is being served cache-first by a service worker. To learn more, visit https://cra.link/PWA")}))):Ot(t,e)}))}}()},54:function(e,t,n){"use strict";n.d(t,"d",(function(){return a})),n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return d})),n.d(t,"e",(function(){return b})),n.d(t,"c",(function(){return j}));var r,c,a,i=n(5),o=n(6),s=n(100),l=n(1);!function(e){e.DotNet="dotnet",e.TypeScript="typescript",e.Python="python",e.Go="golang",e.Java="java"}(a||(a={}));var u=[a.TypeScript,a.Python,a.Java,a.Go,a.DotNet],d=(r={},Object(i.a)(r,a.TypeScript,"TypeScript"),Object(i.a)(r,a.Python,"Python"),Object(i.a)(r,a.Java,"Java"),Object(i.a)(r,a.Go,"Go"),Object(i.a)(r,a.DotNet,".NET"),r),b=new Set([a.Python,a.TypeScript]),j=(c={},Object(i.a)(c,a.TypeScript,{name:d.typescript,icon:function(e){return Object(l.jsxs)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 256 256",children:[Object(l.jsx)("path",{d:"M0 128v128h256V0H0z",fill:"#007ACC"}),Object(l.jsx)("path",{d:"M56.611 128.85l-.081 10.483h33.32v94.68h23.57v-94.68h33.32v-10.28c0-5.69-.122-10.444-.284-10.566-.122-.162-20.399-.244-44.983-.203l-44.739.122-.122 10.443zM206.567 118.108c6.501 1.626 11.459 4.51 16.01 9.224 2.357 2.52 5.851 7.112 6.136 8.209.08.325-11.053 7.802-17.798 11.987-.244.163-1.22-.894-2.317-2.52-3.291-4.794-6.745-6.867-12.028-7.232-7.76-.529-12.759 3.535-12.718 10.32 0 1.992.284 3.17 1.097 4.796 1.707 3.535 4.876 5.648 14.832 9.955 18.326 7.884 26.168 13.085 31.045 20.48 5.445 8.25 6.664 21.415 2.966 31.208-4.063 10.646-14.14 17.88-28.323 20.277-4.388.772-14.79.65-19.504-.203-10.28-1.829-20.033-6.908-26.047-13.572-2.357-2.601-6.949-9.387-6.664-9.875.122-.162 1.178-.812 2.356-1.503 1.138-.65 5.446-3.13 9.509-5.486l7.355-4.267 1.544 2.276c2.154 3.291 6.867 7.802 9.712 9.305 8.167 4.308 19.383 3.698 24.909-1.26 2.357-2.153 3.332-4.388 3.332-7.68 0-2.966-.366-4.266-1.91-6.5-1.99-2.845-6.054-5.243-17.595-10.24-13.206-5.69-18.895-9.225-24.096-14.833-3.007-3.25-5.852-8.452-7.03-12.8-.975-3.616-1.22-12.678-.447-16.335 2.723-12.76 12.353-21.658 26.25-24.3 4.51-.853 14.994-.528 19.424.57z",fill:"#FFF"})]}))}}),Object(i.a)(c,a.Python,{name:d.python,icon:function(e){return Object(l.jsxs)(s.a,Object(o.a)(Object(o.a)({},e),{},{version:"1.0",viewBox:"0 0 110.421 109.846",children:[Object(l.jsxs)("defs",{children:[Object(l.jsxs)("linearGradient",{id:"a",children:[Object(l.jsx)("stop",{offset:"0",stopColor:"#ffe052"}),Object(l.jsx)("stop",{offset:"1",stopColor:"#ffc331"})]}),Object(l.jsx)("linearGradient",{gradientUnits:"userSpaceOnUse",id:"d",x1:"89.137",x2:"147.777",xlinkHref:"#a",y1:"111.921",y2:"168.101"}),Object(l.jsxs)("linearGradient",{id:"b",children:[Object(l.jsx)("stop",{offset:"0",stopColor:"#387eb8"}),Object(l.jsx)("stop",{offset:"1",stopColor:"#366994"})]}),Object(l.jsx)("linearGradient",{gradientUnits:"userSpaceOnUse",id:"c",x1:"55.549",x2:"110.149",xlinkHref:"#b",y1:"77.07",y2:"131.853"})]}),Object(l.jsxs)("g",{color:"#000",children:[Object(l.jsx)("path",{d:"M99.75 67.469c-28.032 0-26.281 12.156-26.281 12.156l.031 12.594h26.75V96H62.875s-17.938-2.034-17.938 26.25 15.657 27.281 15.657 27.281h9.343v-13.125s-.503-15.656 15.407-15.656h26.531s14.906.241 14.906-14.406V82.125s2.263-14.656-27.031-14.656zM85 75.938a4.808 4.808 0 014.813 4.812A4.808 4.808 0 0185 85.563a4.808 4.808 0 01-4.813-4.813A4.808 4.808 0 0185 75.937z",fill:"url(#c)",overflow:"visible",style:{marker:"none"},transform:"translate(-44.938 -67.469)"}),Object(l.jsx)("path",{d:"M100.546 177.315c28.032 0 26.281-12.156 26.281-12.156l-.03-12.594h-26.75v-3.781h37.374s17.938 2.034 17.938-26.25c0-28.285-15.657-27.282-15.657-27.282h-9.343v13.125s.503 15.657-15.407 15.657h-26.53s-14.907-.241-14.907 14.406v24.219s-2.263 14.656 27.031 14.656zm14.75-8.469a4.808 4.808 0 01-4.812-4.812 4.808 4.808 0 014.812-4.813 4.808 4.808 0 014.813 4.813 4.808 4.808 0 01-4.813 4.812z",fill:"url(#d)",overflow:"visible",style:{marker:"none"},transform:"translate(-44.938 -67.469)"})]})]}))}}),Object(i.a)(c,a.Java,{name:d.java,icon:function(e){return Object(l.jsxs)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 256 346",children:[Object(l.jsx)("path",{d:"M82.554 267.473s-13.198 7.675 9.393 10.272c27.369 3.122 41.356 2.675 71.517-3.034 0 0 7.93 4.972 19.003 9.279-67.611 28.977-153.019-1.679-99.913-16.517M74.292 229.659s-14.803 10.958 7.805 13.296c29.236 3.016 52.324 3.263 92.276-4.43 0 0 5.526 5.602 14.215 8.666-81.747 23.904-172.798 1.885-114.296-17.532",fill:"#5382A1"}),Object(l.jsx)("path",{d:"M143.942 165.515c16.66 19.18-4.377 36.44-4.377 36.44s42.301-21.837 22.874-49.183c-18.144-25.5-32.059-38.172 43.268-81.858 0 0-118.238 29.53-61.765 94.6",fill:"#E76F00"}),Object(l.jsx)("path",{d:"M233.364 295.442s9.767 8.047-10.757 14.273c-39.026 11.823-162.432 15.393-196.714.471-12.323-5.36 10.787-12.8 18.056-14.362 7.581-1.644 11.914-1.337 11.914-1.337-13.705-9.655-88.583 18.957-38.034 27.15 137.853 22.356 251.292-10.066 215.535-26.195M88.9 190.48s-62.771 14.91-22.228 20.323c17.118 2.292 51.243 1.774 83.03-.89 25.978-2.19 52.063-6.85 52.063-6.85s-9.16 3.923-15.787 8.448c-63.744 16.765-186.886 8.966-151.435-8.183 29.981-14.492 54.358-12.848 54.358-12.848M201.506 253.422c64.8-33.672 34.839-66.03 13.927-61.67-5.126 1.066-7.411 1.99-7.411 1.99s1.903-2.98 5.537-4.27c41.37-14.545 73.187 42.897-13.355 65.647 0 .001 1.003-.895 1.302-1.697",fill:"#5382A1"}),Object(l.jsx)("path",{d:"M162.439.371s35.887 35.9-34.037 91.101c-56.071 44.282-12.786 69.53-.023 98.377-32.73-29.53-56.75-55.526-40.635-79.72C111.395 74.612 176.918 57.393 162.439.37",fill:"#E76F00"}),Object(l.jsx)("path",{d:"M95.268 344.665c62.199 3.982 157.712-2.209 159.974-31.64 0 0-4.348 11.158-51.404 20.018-53.088 9.99-118.564 8.824-157.399 2.421.001 0 7.95 6.58 48.83 9.201",fill:"#5382A1"})]}))}}),Object(i.a)(c,a.Go,{name:d.golang,icon:function(e){return Object(l.jsx)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 512 192",children:Object(l.jsx)("path",{d:"M292.533 13.295l1.124.75c13.212 8.725 22.685 20.691 28.917 35.15 1.496 2.243.499 3.49-2.493 4.237l-5.063 1.296c-11.447 2.949-20.53 5.429-31.827 8.378l-6.443 1.678c-2.32.574-2.96.333-5.428-2.477l-.348-.399c-3.519-3.988-6.155-6.652-10.817-9.03l-.899-.443c-15.705-7.727-30.911-5.484-45.12 3.74-16.952 10.968-25.677 27.172-25.428 47.364.25 19.942 13.96 36.395 33.654 39.137 16.951 2.244 31.16-3.739 42.378-16.452 2.244-2.743 4.238-5.734 6.73-9.224h-48.11c-5.235 0-6.481-3.24-4.736-7.478l.864-2.035c3.204-7.454 8.173-18.168 11.4-24.294l.704-1.319c.862-1.494 2.612-3.513 5.977-3.513h80.224c3.603-11.415 9.449-22.201 17.246-32.407 18.198-23.931 40.135-36.396 69.8-41.63 25.427-4.488 49.359-1.995 71.046 12.713 19.694 13.461 31.909 31.66 35.15 55.59 4.237 33.654-5.485 61.075-28.668 84.508-16.453 16.702-36.645 27.172-59.829 31.908-6.73 1.247-13.461 1.496-19.942 2.244-22.685-.499-43.376-6.98-60.826-21.937-12.273-10.61-20.727-23.648-24.928-38.828a104.937 104.937 0 01-10.47 16.89c-17.949 23.683-41.381 38.39-71.046 42.38-24.43 3.24-47.115-1.497-67.058-16.454-18.447-13.96-28.917-32.407-31.66-55.34-3.24-27.173 4.737-51.603 21.19-73.041 17.7-23.184 41.132-37.891 69.8-43.126 22.999-4.16 45.037-1.595 64.936 11.464zM411.12 49.017l-.798.178c-23.183 5.235-38.14 19.942-43.624 43.375-4.488 19.444 4.985 39.138 22.934 47.115 13.71 5.983 27.421 5.235 40.633-1.496 19.694-10.22 30.413-26.175 31.66-47.613-.25-3.24-.25-5.734-.749-8.227-4.436-24.401-26.664-38.324-50.056-33.332zM116.416 94.564c.997 0 1.496.748 1.496 1.745l-.499 5.983c0 .997-.997 1.745-1.745 1.745l-54.344-.249c-.997 0-1.246-.748-.748-1.496l3.49-6.232c.499-.748 1.496-1.496 2.493-1.496h49.857zM121.9 71.63c.997 0 1.496.748 1.247 1.496l-1.995 5.983c-.249.997-1.246 1.495-2.243 1.495l-117.912.25c-.997 0-1.246-.499-.748-1.247l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247H121.9zm12.963-22.934c.997 0 1.246.748.748 1.496l-4.238 6.481c-.499.748-1.745 1.496-2.493 1.496l-90.24-.25c-.998 0-1.247-.498-.749-1.246l5.235-6.73c.499-.748 1.745-1.247 2.742-1.247h88.995z",fill:"#00ACD7"})}))}}),Object(i.a)(c,a.DotNet,{name:d.dotnet,icon:function(e){return Object(l.jsx)(s.a,Object(o.a)(Object(o.a)({},e),{},{"aria-hidden":"true",transform:"rotate(360)",viewBox:"0 0 32 32",children:Object(l.jsx)("path",{d:"M4.224 10.089v11.667h1.365v-8.438a12.58 12.58 0 00-.068-1.599h.052c.099.255.224.5.37.729l6 9.302h1.672V10.089h-1.359v8.203c-.016.573.016 1.146.083 1.714h-.031a13.986 13.986 0 00-.474-.781L5.995 10.09zm12.417 0v11.667h6.203l.005-1.281h-4.813v-4.047h4.214v-1.229h-4.214v-3.875h4.521V10.09zm7.25 0v1.234h3.354v10.432h1.365V11.323h3.391v-1.234zm-23.021 10a.86.86 0 00-.609.276.91.91 0 00-.26.641.901.901 0 001.542.641c.172-.167.271-.401.271-.641s-.099-.474-.271-.641a.876.876 0 00-.641-.276H.871z",fill:"#626262"})}))}}),c)},55:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var r=n(6),c=n(22),a=n(193),i=n(21),o=n(194),s=n(99),l=n(1),u=["children","hasIcon","hasWarning","href","onClick","noFollow"],d=Object(i.a)((function(e,t){var n=e.children,i=e.hasIcon,d=void 0===i||i,b=e.hasWarning,j=void 0===b||b,f=e.href,h=e.onClick,O=e.noFollow,p=Object(c.a)(e,u),g=Object(s.b)(),m="noopener noreferrer";return(j||O)&&(m+=" nofollow"),Object(l.jsxs)(o.a,Object(r.a)(Object(r.a)({color:"blue.500",href:f,isExternal:!0,onClick:j?g({href:f,onClick:h}):h,ref:t,rel:m},p),{},{children:[n," ",d&&Object(l.jsx)(a.a,{mb:1,ml:2})]}))}));d.displayName="ExternalLink"},57:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r=function(e,t){return t.reduce((function(t,n){return t[n]="".concat(e,"-").concat(n),t}),{})}},80:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(6),c=n(194),a=n(29),i=n(1),o=function(e){return Object(i.jsx)(c.a,Object(r.a)({as:a.b},e))}},81:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(6),c=n(21),a=n(25),i=n(1),o=Object(c.a)((function(e,t){return Object(i.jsx)(a.a.form,Object(r.a)(Object(r.a)({},e),{},{ref:t}))}));o.displayName="Form"},84:function(e,t,n){"use strict";n.d(t,"b",(function(){return j})),n.d(t,"a",(function(){return f}));var r=n(4),c=n(0),a=n(32),i=n.n(a),o=n(49),s=n(13),l=function(){var e=Object(o.a)(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(s.a.CATALOG_SUFFIX);case 2:if((t=e.sent).ok){e.next=6;break}throw console.error(t.statusText),new Error("Failed fetching packages index: ".concat(t.statusText));case 6:return e.abrupt("return",t.json());case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),u=n(86),d=n(1),b=Object(c.createContext)({loading:!1,data:void 0,error:void 0}),j=function(){return Object(c.useContext)(b)},f=function(e){var t=e.children,n=Object(u.a)(l),a=Object(r.a)(n,2),i=a[0],o=a[1];return Object(c.useEffect)((function(){i()}),[i]),Object(d.jsx)(b.Provider,{value:o,children:t})}},85:function(e,t,n){"use strict";n.d(t,"a",(function(){return h})),n.d(t,"b",(function(){return f}));var r=n(4),c=n(0),a=n(32),i=n.n(a),o=n(49),s=n(13),l={},u=function(){var e=Object(o.a)(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(s.a.CONFIG);case 2:if((t=e.sent).ok){e.next=6;break}return console.log("Failed to fetch application config, using default values"),e.abrupt("return",l);case 6:return e.abrupt("return",t.json().catch((function(e){return console.error(e),console.log("Invalid config response, using default values"),l})));case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),d=n(86),b=n(1),j=Object(c.createContext)({loading:!1,data:void 0,error:void 0}),f=function(){return Object(c.useContext)(j)},h=function(e){var t=e.children,n=Object(d.a)(u),a=Object(r.a)(n,2),i=a[0],o=a[1];return Object(c.useEffect)((function(){i()}),[i]),Object(b.jsx)(j.Provider,{value:o,children:t})}},86:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n(32),c=n.n(r),a=n(49),i=n(4),o=n(0),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.initialValue,r=t.onSuccess,s=t.onError,l=Object(o.useState)(!1),u=Object(i.a)(l,2),d=u[0],b=u[1],j=Object(o.useState)(n),f=Object(i.a)(j,2),h=f[0],O=f[1],p=Object(o.useState)(),g=Object(i.a)(p,2),m=g[0],v=g[1],x=Object(o.useRef)(!1);Object(o.useEffect)((function(){return x.current=!0,function(){x.current=!1}}),[]);var y=Object(o.useCallback)(Object(a.a)(c.a.mark((function t(){var a,i=arguments;return c.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(x.current){t.next=2;break}return t.abrupt("return");case 2:return b(!0),v(void 0),t.prev=4,t.next=7,e.apply(void 0,i);case 7:a=t.sent,null===r||void 0===r||r(a),x.current&&(O(a),b(!1)),t.next=17;break;case 12:t.prev=12,t.t0=t.catch(4),console.error(t.t0),null===s||void 0===s||s(t.t0),x.current&&(O(n),v(t.t0),b(!1));case 17:case"end":return t.stop()}}),t,null,[[4,12]])}))),[s,r]);return Object(o.useMemo)((function(){return[y,{data:h,loading:d,error:m}]}),[y,h,d,m])}},99:function(e,t,n){"use strict";n.d(t,"b",(function(){return g})),n.d(t,"a",(function(){return m}));var r=n(6),c=n(4),a=n(192),i=n(0),o="prefersWarnOnExternalLinkClick",s=n(193),l=n(44),u=n(189),d=n(213),b=n(145),j=n(215),f=n(55),h=n(1),O=function(e){var t=e.href,n=e.isOpen,r=e.onClick,a=e.onClose,O=e.setShouldWarn,p=Object(i.useState)(!0),g=Object(c.a)(p,2),m=g[0],v=g[1];return Object(h.jsx)(l.a,{closeOnOverlayClick:!1,isOpen:n,onClose:a,children:Object(h.jsx)(l.h,{children:Object(h.jsxs)(l.d,{color:"blue.800",children:[Object(h.jsx)(l.g,{children:"Confirm"}),Object(h.jsxs)(l.b,{children:[Object(h.jsx)(u.a,{fontSize:"lg",mb:2,children:"This link is taking you to an external site"}),Object(h.jsx)(u.a,{bg:"gray.100",borderRadius:"sm",color:"blue.500",fontSize:"sm",mb:4,p:1,children:t}),Object(h.jsx)(d.a,{onChange:function(e){var t=!e.target.checked;v(t)},children:"Do not show this warning again."})]}),Object(h.jsxs)(l.f,{children:[Object(h.jsx)(b.a,{onClick:function(){v(!0),a()},variant:"ghost",children:"Cancel"}),Object(h.jsx)(j.a,{hasArrow:!0,label:t,placement:"top",children:Object(h.jsx)(f.a,{hasIcon:!1,hasWarning:!1,href:t,noFollow:!0,onClick:function(e){if(!m){O(m);try{localStorage.setItem(o,JSON.stringify(m))}catch(t){}}null===r||void 0===r||r(e),a()},children:Object(h.jsx)(b.a,{colorScheme:"blue",ml:4,rightIcon:Object(h.jsx)(s.a,{}),tabIndex:0,variant:"ghost",children:"Proceed"})})})]})]})})})},p=Object(i.createContext)((function(e){return e.onClick})),g=function(){return Object(i.useContext)(p)},m=function(e){var t=e.children,n=Object(i.useState)(null),s=Object(c.a)(n,2),l=s[0],u=s[1],d=Object(a.a)({onClose:function(){u(null)}}),b=d.isOpen,j=d.onOpen,f=d.onClose,g=Object(i.useState)((function(){try{var e,t=null!==(e=localStorage.getItem(o))&&void 0!==e?e:"true";return JSON.parse(t)}catch(n){return!0}})),m=Object(c.a)(g,2),v=m[0],x=m[1],y=Object(i.useCallback)((function(e){var t=e.href,n=e.onClick;if(!v)return n;return function(e){u({href:t,onClick:n}),e.preventDefault(),j()}}),[j,v]);return Object(h.jsxs)(p.Provider,{value:y,children:[t,Object(h.jsx)(O,Object(r.a)({isOpen:b,onClose:f,setShouldWarn:x},l))]})}}},[[165,3,5]]]);
2
+ //# sourceMappingURL=main.e289a3fc.chunk.js.map