construct-hub-webapp 0.1.255 → 0.1.259
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/asset-manifest.json +29 -29
- package/build/index.html +1 -1
- package/build/service-worker.js +1 -1
- package/build/service-worker.js.map +1 -1
- package/build/static/js/{10.4d9b4ad2.chunk.js → 10.85c70ef7.chunk.js} +1 -1
- package/build/static/js/{10.4d9b4ad2.chunk.js.map → 10.85c70ef7.chunk.js.map} +1 -1
- package/build/static/js/11.cc98cce3.chunk.js +2 -0
- package/build/static/js/11.cc98cce3.chunk.js.map +1 -0
- package/build/static/js/{12.23aa8975.chunk.js → 12.d831689a.chunk.js} +2 -2
- package/build/static/js/{12.23aa8975.chunk.js.map → 12.d831689a.chunk.js.map} +1 -1
- package/build/static/js/{13.92cdbaff.chunk.js → 13.a9cae057.chunk.js} +2 -2
- package/build/static/js/{13.92cdbaff.chunk.js.map → 13.a9cae057.chunk.js.map} +1 -1
- package/build/static/js/2.4bc32669.chunk.js +2 -0
- package/build/static/js/2.4bc32669.chunk.js.map +1 -0
- package/build/static/js/{5.3919b128.chunk.js → 5.c4b086d9.chunk.js} +3 -3
- package/build/static/js/{5.3919b128.chunk.js.LICENSE.txt → 5.c4b086d9.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/{5.3919b128.chunk.js.map → 5.c4b086d9.chunk.js.map} +1 -1
- package/build/static/js/{6.7cbae0bb.chunk.js → 6.30fad1cf.chunk.js} +3 -3
- package/build/static/js/{6.7cbae0bb.chunk.js.LICENSE.txt → 6.30fad1cf.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/{6.7cbae0bb.chunk.js.map → 6.30fad1cf.chunk.js.map} +1 -1
- package/build/static/js/{7.9653e0a4.chunk.js → 7.07197120.chunk.js} +2 -2
- package/build/static/js/7.07197120.chunk.js.map +1 -0
- package/build/static/js/8.6dd29cff.chunk.js +2 -0
- package/build/static/js/8.6dd29cff.chunk.js.map +1 -0
- package/build/static/js/{9.a8590c2f.chunk.js → 9.340b7752.chunk.js} +2 -2
- package/build/static/js/{9.a8590c2f.chunk.js.map → 9.340b7752.chunk.js.map} +1 -1
- package/build/static/js/main.a595d5fb.chunk.js +2 -0
- package/build/static/js/main.a595d5fb.chunk.js.map +1 -0
- package/build/static/js/runtime-main.d91eb825.js +2 -0
- package/build/static/js/{runtime-main.3169756d.js.map → runtime-main.d91eb825.js.map} +1 -1
- package/package.json +2 -1
- package/build/static/js/11.854e84b2.chunk.js +0 -2
- package/build/static/js/11.854e84b2.chunk.js.map +0 -1
- package/build/static/js/2.dbf90c22.chunk.js +0 -2
- package/build/static/js/2.dbf90c22.chunk.js.map +0 -1
- package/build/static/js/7.9653e0a4.chunk.js.map +0 -1
- package/build/static/js/8.c543459b.chunk.js +0 -2
- package/build/static/js/8.c543459b.chunk.js.map +0 -1
- package/build/static/js/main.33715459.chunk.js +0 -2
- package/build/static/js/main.33715459.chunk.js.map +0 -1
- package/build/static/js/runtime-main.3169756d.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/Time/Time.tsx","views/SearchResults/components/ShowingDetails.tsx","views/SearchResults/constants.ts","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/Heading.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/components/NextPage.tsx","views/SearchResults/components/PageControls.tsx","../../../src/link-box.tsx","../../../src/ChevronRight.tsx","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","constants/constructs.ts","views/SearchRedesign/Filter.tsx","views/SearchRedesign/SearchState.tsx","views/SearchRedesign/util.ts","views/SearchRedesign/FilterPanel.tsx","views/SearchRedesign/SortedBy.tsx","views/SearchRedesign/SearchResults.tsx","views/SearchRedesign/SearchRedesign.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","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","Time","forwardRef","ref","date","formatString","format","boxProps","as","dateTime","toISOString","displayName","Em","color","fontWeight","ShowingDetails","limit","offset","count","filtered","first","last","LIMIT","PackageCardType","testIds","createTestIds","Detail","dataTestid","value","fontSize","Details","useLanguage","currentLanguage","usePackageCard","author","metadata","version","authorName","published","Date","NavLink","to","getSearchPath","query","Heading","Link","getPackagePath","lineHeight","noOfLines","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","indexOf","map","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","borderRadius","h","opacity","w","Languages","pkg","WideCard","_hover","bg","border","wideContainer","gap","p","templateColumns","base","templateRows","spacing","direction","alignSelf","PackageCardContext","createContext","useContext","PackageCard","variant","Wide","Provider","listViews","items","PackageList","memo","cardView","loading","View","ArrowButton","getPageUrl","props","borderColor","colorScheme","mx","undefined","disabled","GoToPage","pageLimit","useState","toString","inputValue","setInputValue","push","useHistory","align","onSubmit","e","preventDefault","parseInt","max","min","onChange","target","textAlign","type","ml","btnProps","rightIcon","ArrowForward","NextPage","nextPageUrl","PageControls","nextOffset","prevOffset","alignItems","pt","colStart","justifySelf","justify","py","ChevronLeftIcon","ChevronRightIcon","LinkOverlay","className","cx","rel","isExternal","__css","position","cursor","display","top","zIndex","width","height","LinkBox","createIcon","d","ArrowForwardIcon","CDKType","CDKTYPE_NAME_MAP","awscdk","cdktf","cdk8s","Filter","options","checkedValues","values","onValueChange","getOnChange","isChecked","isTruncated","SearchStateContext","useSearchState","state","Error","SearchStateProvider","langQuery","queryParams","useQueryParams","val","result","toNum","get","QUERY_PARAMS","OFFSET","decodeURIComponent","SEARCH_QUERY","split","SORT","cdkType","CDK_TYPE","searchAPI","useCatalogSearch","defaultCdkType","defaultLanguages","defaultQuery","defaultSort","setQuery","cdkTypeOptions","key","languageOptions","filter","FilterPanel","setLanguages","setCdkType","authors","setAuthors","Card","boxShadow","l","a","SORT_RENDER_MAP","CatalogSearchSort","NameAsc","NameDesc","PublishDateAsc","PublishDateDesc","SortedBy","setSort","selected","Button","pl","pr","ChevronDown","onClick","SearchResults","isFirstRender","useRef","onSearch","useCatalogResults","results","getUrl","params","q","length","current","maxW","CatalogSearch","pb","SearchRedesign"],"mappings":"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","file":"static/js/8.6dd29cff.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 { 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 { 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 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","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactChild } from \"react\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n label: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n label,\n value,\n}) => (\n <Text data-testid={dataTestid} fontSize=\"xs\">\n <strong>{label}</strong> {value}\n </Text>\n);\n\nexport const Details: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n\n const {\n author,\n metadata: { date },\n version,\n } = usePackageCard();\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <>\n <Detail data-testid={testIds.version} label=\"Version\" value={version} />\n <Detail\n data-testid={testIds.published}\n label=\"Published\"\n value={\n <Time date={new Date(date)} fontSize=\"xs\" format=\"MMM dd, yyyy\" />\n }\n />\n <Detail\n data-testid={testIds.author}\n label=\"Author\"\n value={\n <NavLink\n to={getSearchPath({\n query: `\"${authorName}\"`,\n language: currentLanguage,\n })}\n >\n {authorName}\n </NavLink>\n }\n />\n </>\n );\n};\n","import { Heading as ChakraHeading, LinkOverlay, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const { name, description, version } = usePackageCard();\n\n return (\n <>\n <LinkOverlay\n as={Link}\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n >\n {name}\n </ChakraHeading>\n </LinkOverlay>\n <Text\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { Grid, Stack, LinkBox } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Languages } from \"./Languages\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"gray.50\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n color=\"gray.600\"\n data-testid={testIds.wideContainer}\n gap={5}\n p={5}\n templateColumns={{ base: \"1fr\", md: \"2fr 1fr\" }}\n templateRows={{ base: \"auto\", md: \"1fr\" }}\n w=\"100%\"\n >\n {/* Name + Desc */}\n <Stack spacing={2}>\n <Heading />\n\n <Stack direction=\"row\" spacing={1}>\n <Languages />\n </Stack>\n </Stack>\n\n <Stack\n alignSelf=\"center\"\n data-testid={testIds.languages}\n fontSize=\"xs\"\n spacing={1}\n >\n <Details />\n </Stack>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n pkg: CatalogPackage;\n variant?: PackageCardType;\n}\n\nconst PackageCardContext = createContext<CatalogPackage | null>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={pkg}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n items: CatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n cardView = PackageCardType.Wide,\n items,\n loading,\n // title,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\nimport { PackageListViewProps } from \"./PackageList\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n 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 { 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 { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronRightIcon = createIcon({\n d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\",\n displayName: \"ChevronRightIcon\",\n})\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","export enum CDKType {\n awscdk = \"aws-cdk\",\n cdktf = \"cdktf\",\n cdk8s = \"cdk8s\",\n}\n\nexport const CDKTYPE_NAME_MAP = {\n [CDKType.awscdk]: \"AWS CDK\",\n [CDKType.cdktf]: \"CDK for Terraform\",\n [CDKType.cdk8s]: \"CDK for Kubernetes\",\n};\n","import { Checkbox, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface FilterProps {\n name: string;\n options: {\n display: string;\n value: string;\n }[];\n values: string[];\n onValueChange: (value: string) => void;\n}\n\nexport const Filter: FunctionComponent<FilterProps> = ({\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const getOnChange = (value: string) => () => {\n onValueChange(value);\n };\n\n return (\n <Stack spacing={2}>\n <Heading as=\"h4\" size=\"sm\">\n {name}\n </Heading>\n {options.map(({ display, value }) => (\n <Checkbox\n isChecked={checkedValues.includes(value)}\n key={value}\n onChange={getOnChange(value)}\n >\n <Text color=\"gray.600\" fontSize=\"sm\" isTruncated>\n {display}\n </Text>\n </Checkbox>\n ))}\n </Stack>\n );\n};\n","/**\n * @fileoverview Exposes page-level state and setters to all components in the new SearchResults View.\n */\nimport { createContext, FunctionComponent, useContext, useEffect } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport {\n UseCatalogSearchReturn,\n useCatalogSearch,\n} from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { LIMIT } from \"../SearchResults/constants\";\nimport { parseLangs, toNum } from \"./util\";\n\nexport interface SearchState {\n limit: number;\n offset: number;\n query: string;\n searchAPI: UseCatalogSearchReturn;\n}\n\nconst SearchStateContext = createContext<SearchState | undefined>(undefined);\n\n/**\n * A hook to access Search Page specific state. This can only be in descendants of the new Search Page\n * and will otherwise throw an error.\n */\nexport const useSearchState = () => {\n const state = useContext(SearchStateContext);\n\n if (!state) {\n throw new Error(\n `This hook must be called in a child of <SearchStateProvider />`\n );\n }\n\n return state;\n};\n\nexport const SearchStateProvider: FunctionComponent = ({ children }) => {\n const queryParams = useQueryParams();\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const query = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languages = parseLangs(queryParams.get(QUERY_PARAMS.LANGUAGES));\n\n const sort = (queryParams.get(QUERY_PARAMS.SORT) ?? undefined) as\n | CatalogSearchSort\n | undefined;\n\n const cdkType =\n (queryParams.get(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined;\n\n const searchAPI = useCatalogSearch({\n defaultCdkType: cdkType,\n defaultLanguages: languages,\n defaultQuery: query,\n defaultSort: sort,\n });\n\n useEffect(() => {\n if (query !== searchAPI.query) {\n searchAPI.setQuery(query);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n return (\n <SearchStateContext.Provider\n value={{\n limit: LIMIT,\n offset,\n query,\n searchAPI,\n }}\n >\n {children}\n </SearchStateContext.Provider>\n );\n};\n","import { Language } from \"../../constants/languages\";\n\nexport const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseLangs = (langQuery: string | null) => {\n if (!langQuery) return [];\n\n const langs = decodeURIComponent(langQuery).split(\",\");\n return langs as Language[];\n};\n","import { Heading, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useState } from \"react\";\nimport { Card } from \"../../components/Card\";\nimport { CDKType, CDKTYPE_NAME_MAP } from \"../../constants/constructs\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { Filter } from \"./Filter\";\nimport { useSearchState } from \"./SearchState\";\n\nconst cdkTypeOptions = Object.entries(CDKTYPE_NAME_MAP).map(([key, value]) => ({\n display: value,\n value: key,\n}));\n\nconst languageOptions = Object.entries(LANGUAGE_NAME_MAP)\n .filter(([key]) => TEMP_SUPPORTED_LANGUAGES.has(key as Language))\n .map(([key, value]) => ({\n display: value,\n value: key,\n }));\n\nexport interface FilterPanelProps {}\n\nexport const FilterPanel: FunctionComponent<FilterPanelProps> = () => {\n const { cdkType, languages, setLanguages, setCdkType } =\n useSearchState().searchAPI;\n const [authors, setAuthors] = useState<string[]>([]);\n\n const onCdkTypeChange = (type: string) => {\n const cdk = type as CDKType;\n setCdkType(cdk === cdkType ? undefined : cdk);\n };\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n setLanguages(\n languages.includes(language)\n ? languages.filter((l) => l !== language)\n : [...languages, language]\n );\n };\n\n const onAuthorsChange = (author: string) => {\n setAuthors(\n authors.includes(author)\n ? authors.filter((a) => a !== author)\n : [...authors, author]\n );\n };\n\n return (\n <Card borderRadius=\"none\" boxShadow=\"none\" p={4}>\n <Stack color=\"blue.800\" spacing={6}>\n <Heading as=\"h3\" size=\"sm\">\n Filters\n </Heading>\n <Filter\n name=\"CDK Type\"\n onValueChange={onCdkTypeChange}\n options={cdkTypeOptions}\n values={cdkType ? [cdkType] : []}\n />\n <Filter\n name=\"Programming Language\"\n onValueChange={onLanguagesChange}\n options={languageOptions}\n values={languages}\n />\n <Filter\n name=\"Author\"\n onValueChange={onAuthorsChange}\n options={[\n {\n display: \"Community\",\n value: \"community\",\n },\n {\n display: \"AWS\",\n value: \"aws\",\n },\n ]}\n values={authors}\n />\n </Stack>\n </Card>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Text,\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n Button,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { useSearchState } from \"./SearchState\";\n\nconst SORT_RENDER_MAP = {\n [CatalogSearchSort.NameAsc]: \"Alphabetical - Ascending\",\n [CatalogSearchSort.NameDesc]: \"Alphabetical - Descending\",\n [CatalogSearchSort.PublishDateAsc]: \"Oldest\",\n [CatalogSearchSort.PublishDateDesc]: \"Newest\",\n};\n\nexport const SortedBy: FunctionComponent = () => {\n const { searchAPI } = useSearchState();\n const { sort, setSort } = searchAPI;\n\n const selected = sort ? SORT_RENDER_MAP[sort] : \"Recommended\";\n\n return (\n <Flex align=\"center\">\n <Text>Sorted by</Text>\n <Menu>\n <MenuButton\n as={Button}\n color=\"blue.500\"\n ml={2}\n pl={2} // For some reason, the px shorthand doesn't work on this Button\n pr={2}\n py={1}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n {selected}\n </MenuButton>\n <MenuList zIndex=\"sticky\">\n <MenuItem key=\"recommended\" onClick={() => setSort(undefined)}>\n Recommended\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n key={value}\n onClick={() => setSort(value as CatalogSearchSort)}\n >\n {display}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n </Flex>\n );\n};\n","import { Box, Divider, Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { getSearchPath } from \"../../util/url\";\nimport { PageControls } from \"../SearchResults/components/PageControls\";\nimport { ShowingDetails } from \"../SearchResults/components/ShowingDetails\";\nimport { SearchQueryParam } from \"../SearchResults/constants\";\nimport { useSearchState } from \"./SearchState\";\nimport { SortedBy } from \"./SortedBy\";\n\nexport const SearchResults: FunctionComponent = () => {\n const isFirstRender = useRef(true);\n const { push } = useHistory();\n\n const { query, searchAPI, offset, limit } = useSearchState();\n const { languages, sort, cdkType, onSearch } = searchAPI;\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit,\n query,\n languages,\n cdkType,\n sort,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n cdkType: cdkType,\n query: (params.q ?? query) as string,\n languages,\n sort,\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 (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\n\n // Reset offset and update url when filters & sort change\n // We want to avoid doing this on first render / when a user directly navigates to a search URL\n // so we keep a ref to prevent this\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else {\n onSearch();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sort, languages, cdkType]);\n\n return (\n <Page\n meta={{\n title: query || \"Search\",\n description: query\n ? `${results.length} results for ${query} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Flex direction=\"column\" maxW=\"100vw\">\n <Box p={4}>\n <CatalogSearch {...searchAPI} />\n </Box>\n <Divider />\n <Box p={4}>\n <Flex justify=\"space-between\" pb={4}>\n <ShowingDetails\n count={results.length}\n filtered={!!query}\n limit={limit}\n offset={offset}\n />\n <SortedBy />\n </Flex>\n <PackageList items={page} />\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 { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FilterPanel } from \"./FilterPanel\";\nimport { SearchResults } from \"./SearchResults\";\nimport { SearchStateProvider } from \"./SearchState\";\n\nexport const SearchRedesign: FunctionComponent = () => {\n return (\n <SearchStateProvider>\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description: \"This is a placeholder\",\n }}\n pageName=\"search\"\n >\n <Grid gap={4} p={6} templateColumns=\"1fr 3fr\" templateRows=\"1fr\">\n {/* Filter Panel */}\n <FilterPanel />\n {/* Results, Info, and Controls */}\n\n <SearchResults />\n </Grid>\n </Page>\n </SearchStateProvider>\n );\n};\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[9],{228:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(0),a=n(241),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(114),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,f=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:f}),Object(s.jsx)("meta",{content:f,property:"og:title"}),Object(s.jsx)("meta",{content:f,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:j,name:"description"}),Object(s.jsx)("meta",{content:j,property:"og:description"}),Object(s.jsx)("meta",{content:j,name:"twitter:description"})]}),t]})}},244: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(188),s=n(295),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"},245:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(219),a=n(53),c=n(1),i=function(e){var t=e.children,n=e.language;return a.e.has(n)?Object(c.jsx)(c.Fragment,{children:t}):Object(c.jsx)(r.a,{hasArrow:!0,label:"Documentation support for ".concat(a.b[n]," is coming soon!"),placement:"top-start",children:Object(c.jsx)("span",{children:t})})}},246: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(188),s=n(591),o=n(1),l=["date","format"],u=Object(c.a)((function(e,t){var n=e.date,c=e.format,u=Object(a.a)(e,l);return Object(o.jsx)(i.a,Object(r.a)(Object(r.a)({as:"time",dateTime:n.toISOString(),ref:t},u),{},{children:Object(s.a)(n,c)}))}));u.displayName="Time"},293:function(e,t,n){"use strict";n.d(t,"a",(function(){return R}));var r,a=n(5),c=n(211),i=n(195),s=n(0);!function(e){e.Wide="wide"}(r||(r={}));var o=n(297),l=n(143),u=n(225),d=n(4),b=n(193),j=n(113),f=n(112),h=n(82),m=n(246),p=n(56),O=Object(p.a)("packageCard",["author","description","languages","published","title","version","wideContainer"]),g=n(1),v=function(e){var t=e["data-testid"],n=e.label,r=e.value;return Object(g.jsxs)(b.a,{"data-testid":t,fontSize:"xs",children:[Object(g.jsx)("strong",{children:n})," ",r]})},x=function(){var e=Object(j.a)(),t=Object(d.a)(e,1)[0],n=P(),r=n.author,a=n.metadata.date,c=n.version,i="string"===typeof r?r:r.name;return Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(v,{"data-testid":O.version,label:"Version",value:c}),Object(g.jsx)(v,{"data-testid":O.published,label:"Published",value:Object(g.jsx)(m.a,{date:new Date(a),fontSize:"xs",format:"MMM dd, yyyy"})}),Object(g.jsx)(v,{"data-testid":O.author,label:"Author",value:Object(g.jsx)(h.a,{to:Object(f.c)({query:'"'.concat(i,'"'),language:t}),children:i})})]})},y=n(209),w=n(29),k=function(){var e=Object(j.a)(),t=Object(d.a)(e,1)[0],n=P(),r=n.name,a=n.description,c=n.version;return Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(o.b,{as:w.b,to:Object(f.a)({name:r,version:c,language:t}),children:Object(g.jsx)(y.a,{as:"h3",color:"blue.800","data-testid":O.title,fontSize:"md",fontWeight:"bold",children:r})}),Object(g.jsx)(b.a,{"data-testid":O.description,fontSize:"md",lineHeight:"tall",noOfLines:4,children:a||"No description available."})]})},S=n(6),C=n(53),E=n(245),N={sm:5,md:6,lg:8},z=function(e){var t=e.isRounded,n=void 0!==t&&t,r=e.languages,a=e.name,c=e.size,i=void 0===c?"md":c,s=e.version,o=Object.keys(null!==r&&void 0!==r?r:{});return Object(g.jsx)(g.Fragment,{children:Object.entries(C.c).sort((function(e,t){var n=Object(d.a)(e,1)[0],r=Object(d.a)(t,1)[0];return C.a.indexOf(n)-C.a.indexOf(r)})).map((function(e){var t=Object(d.a)(e,2),r=t[0],c=t[1],l=r,u=l===C.d.TypeScript||o.includes(l),b=l===C.d.TypeScript||C.e.has(l);if(!u)return null;var j=c.name,h=c.icon,m=Object(g.jsx)(h,{"aria-label":"Supports ".concat(j),borderRadius:n?"50%":0,h:N[i],opacity:b?1:.2,w:N[i]});return Object(g.jsx)(E.a,{language:l,children:b?Object(g.jsx)(w.b,{"aria-label":"View package docs for ".concat(l),to:Object(f.a)({name:a,version:s,language:l}),children:m}):m},l)}))})},I=function(){var e=P();return Object(g.jsx)(z,Object(S.a)(Object(S.a)({},e),{},{size:"sm"}))},_=function(){return Object(g.jsx)(o.a,{_hover:{"> article":{bg:"gray.50"}},children:Object(g.jsxs)(l.a,{as:"article",bg:"white",border:"base",borderRadius:"sm",color:"gray.600","data-testid":O.wideContainer,gap:5,p:5,templateColumns:{base:"1fr",md:"2fr 1fr"},templateRows:{base:"auto",md:"1fr"},w:"100%",children:[Object(g.jsxs)(u.a,{spacing:2,children:[Object(g.jsx)(k,{}),Object(g.jsx)(u.a,{direction:"row",spacing:1,children:Object(g.jsx)(I,{})})]}),Object(g.jsx)(u.a,{alignSelf:"center","data-testid":O.languages,fontSize:"xs",spacing:1,children:Object(g.jsx)(x,{})})]})})},K=Object(s.createContext)(null),P=function(){return Object(s.useContext)(K)},W=function(e){var t=e.pkg,n=e.variant,a=void 0===n?r.Wide:n;return Object(g.jsx)(K.Provider,{value:t,children:a===r.Wide&&Object(g.jsx)(_,{})})},D=Object(a.a)({},r.Wide,(function(e){var t=e.items;return Object(g.jsx)(u.a,{spacing:4,children:t.map((function(e){return Object(g.jsx)(W,{pkg:e,variant:r.Wide},"".concat(e.name,"-").concat(e.version))}))})})),R=Object(s.memo)((function(e){var t=e.cardView,n=void 0===t?r.Wide:t,a=e.items;if(e.loading||!a)return Object(g.jsx)(c.a,{children:Object(g.jsx)(i.a,{size:"xl"})});var s=D[n];return Object(g.jsx)(s,{items:a})}));R.displayName="PackageList"},295:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(21),a=n(25),c=n(26),i=n(8),s=n(0),o=n(4),l=n(140);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.srcSet,f=e.align,h=e.fit,m=e.loading,p=e.ignoreFallback,O=e.crossOrigin,g=d(e,["fallbackSrc","fallback","src","srcSet","align","fit","loading","ignoreFallback","crossOrigin"]),v=null!=m||p||void 0===n&&void 0===r,x=function(e){var t=e.loading,n=e.src,r=e.srcSet,a=e.onLoad,c=e.onError,i=e.crossOrigin,u=e.sizes,d=e.ignoreFallback,b=Object(s.useState)("pending"),j=Object(o.a)(b,2),f=j[0],h=j[1];Object(s.useEffect)((function(){h(n?"loading":"pending")}),[n]);var m=Object(s.useRef)(),p=Object(s.useCallback)((function(){if(n){O();var e=new Image;e.src=n,i&&(e.crossOrigin=i),r&&(e.srcset=r),u&&(e.sizes=u),t&&(e.loading=t),e.onload=function(e){O(),h("loaded"),null==a||a(e)},e.onerror=function(e){O(),h("failed"),null==c||c(e)},m.current=e}}),[n,i,r,u,a,c,t]),O=function(){m.current&&(m.current.onload=null,m.current.onerror=null,m.current=null)};return Object(l.a)((function(){if(!d)return"loading"===f&&p(),function(){O()}}),[f,p,d]),d?"loaded":f}(u({},e,{ignoreFallback:v})),y=u({ref:t,objectFit:h,objectPosition:f},v?g:Object(c.g)(g,["onError","onLoad"]));return"loaded"!==x?r||s.createElement(a.a.img,u({as:b,className:"chakra-image__placeholder",src:n},y)):s.createElement(a.a.img,u({as:b,src:i,srcSet:j,crossOrigin:O,loading:m,className:"chakra-image"},y))}));i.a&&(j.displayName="Image")},297:function(e,t,n){"use strict";n.d(t,"b",(function(){return l})),n.d(t,"a",(function(){return u}));var r=n(21),a=n(25),c=n(20),i=n(0);function s(){return s=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},s.apply(this,arguments)}function o(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 l=Object(r.a)((function(e,t){var n=e.isExternal,r=e.target,l=e.rel,u=e.className,d=o(e,["isExternal","target","rel","className"]);return i.createElement(a.a.a,s({},d,{ref:t,className:Object(c.d)("chakra-linkbox__overlay",u),rel:n?"noopener noreferrer":l,target:n?"_blank":r,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),u=Object(r.a)((function(e,t){var n=e.className,r=o(e,["className"]);return i.createElement(a.a.div,s({ref:t,position:"relative"},r,{className:Object(c.d)("chakra-linkbox",n),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))}))},353:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(21),a=n(67),c=n(42),i=n(25),s=n(74),o=n(20),l=n(8),u=n(172),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,f=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"]),h=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:h,ref:t,__css:{width:"100%",display:"flex",position:"relative"}},f),d.createElement(s.b,{value:n},g))}));l.a&&(j.displayName="InputGroup")},354:function(e,t,n){"use strict";n.d(t,"a",(function(){return f})),n.d(t,"b",(function(){return h}));var r=n(5),a=n(25),c=n(21),i=n(74),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"]),f=Object(i.d)().field,h="left"===o?"insetStart":"insetEnd",m=(n={},Object(r.a)(n,h,"0"),Object(r.a)(n,"width",null!=(a=null==f?void 0:f.height)?a:null==f?void 0:f.h),Object(r.a)(n,"height",null!=(c=null==f?void 0:f.height)?c:null==f?void 0:f.h),Object(r.a)(n,"fontSize",null==f?void 0:f.fontSize),n);return l.createElement(b,u({ref:t,__css:m},j))}));j.id="InputElement",s.a&&(j.displayName="InputElement");var f=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))}));f.id="InputLeftElement",s.a&&(f.displayName="InputLeftElement");var h=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))}));h.id="InputRightElement",s.a&&(h.displayName="InputRightElement")},595:function(e,t,n){"use strict";n.r(t),n.d(t,"HomeRedesign",(function(){return S})),n.d(t,"default",(function(){return S}));var r=n(203),a=n(143),c=n(209),i=n(293),s=n(228),o=n(116),l=n(213),u=n(188),d=n(225),b=n(198),j=n(353),f=n(220),h=n(354),m=n(83),p=n(1),O=function(){return Object(p.jsxs)(r.a,{align:"center",bg:"blue.800",color:"white",direction:"column",justify:"center",py:12,children:[Object(p.jsx)(c.a,{as:"h1",size:"xl",children:"Build cloud infrastructure with reusable components"}),Object(p.jsxs)(c.a,{as:"h2",mt:2,size:"lg",children:["Provided by the"," ",Object(p.jsx)(u.a,{as:"span",color:"yellow.400",children:"community"}),", backed by"," ",Object(p.jsx)(u.a,{as:"span",color:"yellow.400",children:"AWS"}),"."]}),Object(p.jsxs)(r.a,{direction:"column",mt:8,children:[Object(p.jsxs)(d.a,{direction:"row",spacing:7,children:[Object(p.jsx)(b.a,{borderBottom:"1px solid",borderBottomColor:"yellow.400",children:"All CDKs"}),Object(p.jsx)(b.a,{children:"AWS CDK"}),Object(p.jsx)(b.a,{children:"CDK for Terraform"}),Object(p.jsx)(b.a,{children:"CDK for Kubernetes"})]}),Object(p.jsx)(m.a,{mt:4,children:Object(p.jsxs)(j.a,{children:[Object(p.jsx)(f.a,{bg:"white",placeholder:"Search over 600 construct libraries for all CDKS",variant:"filled"}),Object(p.jsx)(h.b,{children:Object(p.jsx)(l.a,{color:"gray.500"})})]})})]})]})},g=n(205),v=n(117),x=n(244),y=n(193),w=function(e){var t=e.title,n=e.description,r=e.children;return Object(p.jsxs)(d.a,{color:"blue.800",spacing:4,children:[Object(p.jsx)(c.a,{as:"h3",size:"md",children:t}),Object(p.jsx)(y.a,{size:"sm",children:n}),r]})},k=function(){return Object(p.jsx)(v.a,{borderRadius:"none",boxShadow:"none",h:"full",p:8,children:Object(p.jsxs)(d.a,{spacing:8,children:[Object(p.jsx)(w,{description:Object(p.jsxs)(p.Fragment,{children:["The construct hub is a"," ",Object(p.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(p.jsxs)(r.a,{align:"center",justifyItems:"start",sx:{"& > *":{mt:4,mr:4}},wrap:"wrap",children:[Object(p.jsx)(x.a,{alt:"AWS CDK logo",src:"/assets/aws-cdk.png"}),Object(p.jsx)(x.a,{alt:"Terraform logo",src:"/assets/terraform.png"}),Object(p.jsx)(x.a,{alt:"Kubernetes logo",src:"/assets/kubernetes.png"})]})}),Object(p.jsx)(g.a,{}),Object(p.jsx)(w,{description:Object(p.jsxs)(p.Fragment,{children:["Constructs are ",Object(p.jsx)("strong",{children:"cloud building blocks"})," introduced by the Constructs Programming Model (CPM) that can be"," ",Object(p.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(p.jsx)(g.a,{}),Object(p.jsx)(w,{description:Object(p.jsxs)(p.Fragment,{children:["Construct Hub is built to ",Object(p.jsx)("strong",{children:"serve the community"})," ","that uses the constructs programming model (CPM) and to allow them"," ",Object(p.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?"})]})})},S=function(){var e=Object(o.a)({limit:10}).page;return Object(p.jsx)(s.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(p.jsxs)(r.a,{direction:"column",children:[Object(p.jsx)(O,{}),Object(p.jsxs)(a.a,{gap:3,h:"full",p:3,pl:12,templateColumns:"2fr 1fr",templateRows:"1fr",children:[Object(p.jsxs)(r.a,{direction:"column",children:[Object(p.jsx)(c.a,{as:"h3",color:"blue.800",mb:3,size:"md",children:"Recently Updated"}),Object(p.jsx)(i.a,{items:e})]}),Object(p.jsx)(k,{})]})]})})}}}]);
|
|
2
|
-
//# sourceMappingURL=9.
|
|
1
|
+
(this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[9],{228:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(0),a=n(241),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(114),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,f=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:f}),Object(s.jsx)("meta",{content:f,property:"og:title"}),Object(s.jsx)("meta",{content:f,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:j,name:"description"}),Object(s.jsx)("meta",{content:j,property:"og:description"}),Object(s.jsx)("meta",{content:j,name:"twitter:description"})]}),t]})}},244: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(188),s=n(295),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"},245:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(219),a=n(47),c=n(1),i=function(e){var t=e.children,n=e.language;return a.e.has(n)?Object(c.jsx)(c.Fragment,{children:t}):Object(c.jsx)(r.a,{hasArrow:!0,label:"Documentation support for ".concat(a.b[n]," is coming soon!"),placement:"top-start",children:Object(c.jsx)("span",{children:t})})}},246: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(188),s=n(591),o=n(1),l=["date","format"],u=Object(c.a)((function(e,t){var n=e.date,c=e.format,u=Object(a.a)(e,l);return Object(o.jsx)(i.a,Object(r.a)(Object(r.a)({as:"time",dateTime:n.toISOString(),ref:t},u),{},{children:Object(s.a)(n,c)}))}));u.displayName="Time"},293:function(e,t,n){"use strict";n.d(t,"a",(function(){return R}));var r,a=n(5),c=n(211),i=n(195),s=n(0);!function(e){e.Wide="wide"}(r||(r={}));var o=n(297),l=n(143),u=n(225),d=n(4),b=n(193),j=n(113),f=n(112),h=n(82),m=n(246),p=n(56),O=Object(p.a)("packageCard",["author","description","languages","published","title","version","wideContainer"]),g=n(1),v=function(e){var t=e["data-testid"],n=e.label,r=e.value;return Object(g.jsxs)(b.a,{"data-testid":t,fontSize:"xs",children:[Object(g.jsx)("strong",{children:n})," ",r]})},x=function(){var e=Object(j.a)(),t=Object(d.a)(e,1)[0],n=P(),r=n.author,a=n.metadata.date,c=n.version,i="string"===typeof r?r:r.name;return Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(v,{"data-testid":O.version,label:"Version",value:c}),Object(g.jsx)(v,{"data-testid":O.published,label:"Published",value:Object(g.jsx)(m.a,{date:new Date(a),fontSize:"xs",format:"MMM dd, yyyy"})}),Object(g.jsx)(v,{"data-testid":O.author,label:"Author",value:Object(g.jsx)(h.a,{to:Object(f.c)({query:'"'.concat(i,'"'),language:t}),children:i})})]})},y=n(209),w=n(29),k=function(){var e=Object(j.a)(),t=Object(d.a)(e,1)[0],n=P(),r=n.name,a=n.description,c=n.version;return Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(o.b,{as:w.b,to:Object(f.a)({name:r,version:c,language:t}),children:Object(g.jsx)(y.a,{as:"h3",color:"blue.800","data-testid":O.title,fontSize:"md",fontWeight:"bold",children:r})}),Object(g.jsx)(b.a,{"data-testid":O.description,fontSize:"md",lineHeight:"tall",noOfLines:4,children:a||"No description available."})]})},S=n(6),C=n(47),E=n(245),N={sm:5,md:6,lg:8},z=function(e){var t=e.isRounded,n=void 0!==t&&t,r=e.languages,a=e.name,c=e.size,i=void 0===c?"md":c,s=e.version,o=Object.keys(null!==r&&void 0!==r?r:{});return Object(g.jsx)(g.Fragment,{children:Object.entries(C.c).sort((function(e,t){var n=Object(d.a)(e,1)[0],r=Object(d.a)(t,1)[0];return C.a.indexOf(n)-C.a.indexOf(r)})).map((function(e){var t=Object(d.a)(e,2),r=t[0],c=t[1],l=r,u=l===C.d.TypeScript||o.includes(l),b=l===C.d.TypeScript||C.e.has(l);if(!u)return null;var j=c.name,h=c.icon,m=Object(g.jsx)(h,{"aria-label":"Supports ".concat(j),borderRadius:n?"50%":0,h:N[i],opacity:b?1:.2,w:N[i]});return Object(g.jsx)(E.a,{language:l,children:b?Object(g.jsx)(w.b,{"aria-label":"View package docs for ".concat(l),to:Object(f.a)({name:a,version:s,language:l}),children:m}):m},l)}))})},I=function(){var e=P();return Object(g.jsx)(z,Object(S.a)(Object(S.a)({},e),{},{size:"sm"}))},_=function(){return Object(g.jsx)(o.a,{_hover:{"> article":{bg:"gray.50"}},children:Object(g.jsxs)(l.a,{as:"article",bg:"white",border:"base",borderRadius:"sm",color:"gray.600","data-testid":O.wideContainer,gap:5,p:5,templateColumns:{base:"1fr",md:"2fr 1fr"},templateRows:{base:"auto",md:"1fr"},w:"100%",children:[Object(g.jsxs)(u.a,{spacing:2,children:[Object(g.jsx)(k,{}),Object(g.jsx)(u.a,{direction:"row",spacing:1,children:Object(g.jsx)(I,{})})]}),Object(g.jsx)(u.a,{alignSelf:"center","data-testid":O.languages,fontSize:"xs",spacing:1,children:Object(g.jsx)(x,{})})]})})},K=Object(s.createContext)(null),P=function(){return Object(s.useContext)(K)},W=function(e){var t=e.pkg,n=e.variant,a=void 0===n?r.Wide:n;return Object(g.jsx)(K.Provider,{value:t,children:a===r.Wide&&Object(g.jsx)(_,{})})},D=Object(a.a)({},r.Wide,(function(e){var t=e.items;return Object(g.jsx)(u.a,{spacing:4,children:t.map((function(e){return Object(g.jsx)(W,{pkg:e,variant:r.Wide},"".concat(e.name,"-").concat(e.version))}))})})),R=Object(s.memo)((function(e){var t=e.cardView,n=void 0===t?r.Wide:t,a=e.items;if(e.loading||!a)return Object(g.jsx)(c.a,{children:Object(g.jsx)(i.a,{size:"xl"})});var s=D[n];return Object(g.jsx)(s,{items:a})}));R.displayName="PackageList"},295:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(21),a=n(25),c=n(26),i=n(8),s=n(0),o=n(4),l=n(140);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.srcSet,f=e.align,h=e.fit,m=e.loading,p=e.ignoreFallback,O=e.crossOrigin,g=d(e,["fallbackSrc","fallback","src","srcSet","align","fit","loading","ignoreFallback","crossOrigin"]),v=null!=m||p||void 0===n&&void 0===r,x=function(e){var t=e.loading,n=e.src,r=e.srcSet,a=e.onLoad,c=e.onError,i=e.crossOrigin,u=e.sizes,d=e.ignoreFallback,b=Object(s.useState)("pending"),j=Object(o.a)(b,2),f=j[0],h=j[1];Object(s.useEffect)((function(){h(n?"loading":"pending")}),[n]);var m=Object(s.useRef)(),p=Object(s.useCallback)((function(){if(n){O();var e=new Image;e.src=n,i&&(e.crossOrigin=i),r&&(e.srcset=r),u&&(e.sizes=u),t&&(e.loading=t),e.onload=function(e){O(),h("loaded"),null==a||a(e)},e.onerror=function(e){O(),h("failed"),null==c||c(e)},m.current=e}}),[n,i,r,u,a,c,t]),O=function(){m.current&&(m.current.onload=null,m.current.onerror=null,m.current=null)};return Object(l.a)((function(){if(!d)return"loading"===f&&p(),function(){O()}}),[f,p,d]),d?"loaded":f}(u({},e,{ignoreFallback:v})),y=u({ref:t,objectFit:h,objectPosition:f},v?g:Object(c.g)(g,["onError","onLoad"]));return"loaded"!==x?r||s.createElement(a.a.img,u({as:b,className:"chakra-image__placeholder",src:n},y)):s.createElement(a.a.img,u({as:b,src:i,srcSet:j,crossOrigin:O,loading:m,className:"chakra-image"},y))}));i.a&&(j.displayName="Image")},297:function(e,t,n){"use strict";n.d(t,"b",(function(){return l})),n.d(t,"a",(function(){return u}));var r=n(21),a=n(25),c=n(20),i=n(0);function s(){return s=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},s.apply(this,arguments)}function o(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 l=Object(r.a)((function(e,t){var n=e.isExternal,r=e.target,l=e.rel,u=e.className,d=o(e,["isExternal","target","rel","className"]);return i.createElement(a.a.a,s({},d,{ref:t,className:Object(c.d)("chakra-linkbox__overlay",u),rel:n?"noopener noreferrer":l,target:n?"_blank":r,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),u=Object(r.a)((function(e,t){var n=e.className,r=o(e,["className"]);return i.createElement(a.a.div,s({ref:t,position:"relative"},r,{className:Object(c.d)("chakra-linkbox",n),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))}))},353:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var r=n(21),a=n(67),c=n(42),i=n(25),s=n(74),o=n(20),l=n(8),u=n(172),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,f=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"]),h=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:h,ref:t,__css:{width:"100%",display:"flex",position:"relative"}},f),d.createElement(s.b,{value:n},g))}));l.a&&(j.displayName="InputGroup")},354:function(e,t,n){"use strict";n.d(t,"a",(function(){return f})),n.d(t,"b",(function(){return h}));var r=n(5),a=n(25),c=n(21),i=n(74),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"]),f=Object(i.d)().field,h="left"===o?"insetStart":"insetEnd",m=(n={},Object(r.a)(n,h,"0"),Object(r.a)(n,"width",null!=(a=null==f?void 0:f.height)?a:null==f?void 0:f.h),Object(r.a)(n,"height",null!=(c=null==f?void 0:f.height)?c:null==f?void 0:f.h),Object(r.a)(n,"fontSize",null==f?void 0:f.fontSize),n);return l.createElement(b,u({ref:t,__css:m},j))}));j.id="InputElement",s.a&&(j.displayName="InputElement");var f=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))}));f.id="InputLeftElement",s.a&&(f.displayName="InputLeftElement");var h=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))}));h.id="InputRightElement",s.a&&(h.displayName="InputRightElement")},596:function(e,t,n){"use strict";n.r(t),n.d(t,"HomeRedesign",(function(){return S})),n.d(t,"default",(function(){return S}));var r=n(203),a=n(143),c=n(209),i=n(293),s=n(228),o=n(116),l=n(213),u=n(188),d=n(225),b=n(198),j=n(353),f=n(220),h=n(354),m=n(83),p=n(1),O=function(){return Object(p.jsxs)(r.a,{align:"center",bg:"blue.800",color:"white",direction:"column",justify:"center",py:12,children:[Object(p.jsx)(c.a,{as:"h1",size:"xl",children:"Build cloud infrastructure with reusable components"}),Object(p.jsxs)(c.a,{as:"h2",mt:2,size:"lg",children:["Provided by the"," ",Object(p.jsx)(u.a,{as:"span",color:"yellow.400",children:"community"}),", backed by"," ",Object(p.jsx)(u.a,{as:"span",color:"yellow.400",children:"AWS"}),"."]}),Object(p.jsxs)(r.a,{direction:"column",mt:8,children:[Object(p.jsxs)(d.a,{direction:"row",spacing:7,children:[Object(p.jsx)(b.a,{borderBottom:"1px solid",borderBottomColor:"yellow.400",children:"All CDKs"}),Object(p.jsx)(b.a,{children:"AWS CDK"}),Object(p.jsx)(b.a,{children:"CDK for Terraform"}),Object(p.jsx)(b.a,{children:"CDK for Kubernetes"})]}),Object(p.jsx)(m.a,{mt:4,children:Object(p.jsxs)(j.a,{children:[Object(p.jsx)(f.a,{bg:"white",placeholder:"Search over 600 construct libraries for all CDKS",variant:"filled"}),Object(p.jsx)(h.b,{children:Object(p.jsx)(l.a,{color:"gray.500"})})]})})]})]})},g=n(205),v=n(117),x=n(244),y=n(193),w=function(e){var t=e.title,n=e.description,r=e.children;return Object(p.jsxs)(d.a,{color:"blue.800",spacing:4,children:[Object(p.jsx)(c.a,{as:"h3",size:"md",children:t}),Object(p.jsx)(y.a,{size:"sm",children:n}),r]})},k=function(){return Object(p.jsx)(v.a,{borderRadius:"none",boxShadow:"none",h:"full",p:8,children:Object(p.jsxs)(d.a,{spacing:8,children:[Object(p.jsx)(w,{description:Object(p.jsxs)(p.Fragment,{children:["The construct hub is a"," ",Object(p.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(p.jsxs)(r.a,{align:"center",justifyItems:"start",sx:{"& > *":{mt:4,mr:4}},wrap:"wrap",children:[Object(p.jsx)(x.a,{alt:"AWS CDK logo",src:"/assets/aws-cdk.png"}),Object(p.jsx)(x.a,{alt:"Terraform logo",src:"/assets/terraform.png"}),Object(p.jsx)(x.a,{alt:"Kubernetes logo",src:"/assets/kubernetes.png"})]})}),Object(p.jsx)(g.a,{}),Object(p.jsx)(w,{description:Object(p.jsxs)(p.Fragment,{children:["Constructs are ",Object(p.jsx)("strong",{children:"cloud building blocks"})," introduced by the Constructs Programming Model (CPM) that can be"," ",Object(p.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(p.jsx)(g.a,{}),Object(p.jsx)(w,{description:Object(p.jsxs)(p.Fragment,{children:["Construct Hub is built to ",Object(p.jsx)("strong",{children:"serve the community"})," ","that uses the constructs programming model (CPM) and to allow them"," ",Object(p.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?"})]})})},S=function(){var e=Object(o.a)({limit:10}).page;return Object(p.jsx)(s.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(p.jsxs)(r.a,{direction:"column",children:[Object(p.jsx)(O,{}),Object(p.jsxs)(a.a,{gap:3,h:"full",p:3,pl:12,templateColumns:"2fr 1fr",templateRows:"1fr",children:[Object(p.jsxs)(r.a,{direction:"column",children:[Object(p.jsx)(c.a,{as:"h3",color:"blue.800",mb:3,size:"md",children:"Recently Updated"}),Object(p.jsx)(i.a,{items:e})]}),Object(p.jsx)(k,{})]})]})})}}}]);
|
|
2
|
+
//# sourceMappingURL=9.340b7752.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/Time/Time.tsx","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/Heading.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","../../../src/image.tsx","../../../src/use-image.ts","../../../src/link-box.tsx","../../../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","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","Time","date","formatString","format","boxProps","dateTime","toISOString","PackageCardType","testIds","createTestIds","Detail","dataTestid","value","fontSize","Details","useLanguage","currentLanguage","usePackageCard","author","metadata","version","authorName","published","Date","NavLink","to","getSearchPath","query","Heading","Link","getPackagePath","color","fontWeight","lineHeight","noOfLines","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","borderRadius","h","opacity","w","Languages","pkg","WideCard","_hover","bg","border","wideContainer","gap","p","templateColumns","base","templateRows","spacing","direction","alignSelf","PackageCardContext","createContext","useContext","PackageCard","variant","Wide","Provider","listViews","items","PackageList","memo","cardView","loading","View","NativeImage","alt","width","height","Image","crossOrigin","shouldIgnore","fallbackSrc","fallback","status","ignoreFallback","useState","setStatus","src","imageRef","useRef","load","useCallback","flush","img","onLoad","error","onError","useSafeLayoutEffect","useImage","shared","objectFit","objectPosition","align","rest","omit","className","LinkOverlay","cx","rel","isExternal","target","__css","position","cursor","display","top","zIndex","LinkBox","InputGroup","styles","useMultiStyleConfig","omitThemingProps","_className","groupStyles","validChildren","getValidChildren","input","child","clones","theming","React","StyledElement","chakra","baseStyle","alignItems","justifyContent","InputElement","useStyles","attr","elementStyles","InputLeftElement","InputRightElement","Hero","justify","py","mt","borderBottom","borderBottomColor","Form","placeholder","Search","InfoSection","InfoPanel","Card","boxShadow","justifyItems","sx","mr","wrap","HomeRedesign","useCatalogResults","limit","pl","mb"],"mappings":"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","file":"static/js/9.a8590c2f.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, HTMLChakraProps, forwardRef, Image } from \"@chakra-ui/react\";\n\nexport interface PictureProps extends HTMLChakraProps<\"img\"> {\n alt: string;\n src: string;\n sources?: {\n media?: string;\n srcSet: string;\n }[];\n}\n\nexport const Picture = forwardRef<PictureProps, \"img\">(\n ({ sources, ...props }, ref) => (\n <Box as=\"picture\">\n {sources?.map((source, idx) => (\n <source key={idx} media={source.media} srcSet={source.srcSet} />\n ))}\n <Image ref={ref} {...props} />\n </Box>\n )\n);\n\nPicture.displayName = \"Picture\";\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\n );\n };\n","import { 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","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactChild } from \"react\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n label: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n label,\n value,\n}) => (\n <Text data-testid={dataTestid} fontSize=\"xs\">\n <strong>{label}</strong> {value}\n </Text>\n);\n\nexport const Details: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n\n const {\n author,\n metadata: { date },\n version,\n } = usePackageCard();\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <>\n <Detail data-testid={testIds.version} label=\"Version\" value={version} />\n <Detail\n data-testid={testIds.published}\n label=\"Published\"\n value={\n <Time date={new Date(date)} fontSize=\"xs\" format=\"MMM dd, yyyy\" />\n }\n />\n <Detail\n data-testid={testIds.author}\n label=\"Author\"\n value={\n <NavLink\n to={getSearchPath({\n query: `\"${authorName}\"`,\n language: currentLanguage,\n })}\n >\n {authorName}\n </NavLink>\n }\n />\n </>\n );\n};\n","import { Heading as ChakraHeading, LinkOverlay, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const { name, description, version } = usePackageCard();\n\n return (\n <>\n <LinkOverlay\n as={Link}\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n >\n {name}\n </ChakraHeading>\n </LinkOverlay>\n <Text\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { Grid, Stack, LinkBox } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Languages } from \"./Languages\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"gray.50\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n color=\"gray.600\"\n data-testid={testIds.wideContainer}\n gap={5}\n p={5}\n templateColumns={{ base: \"1fr\", md: \"2fr 1fr\" }}\n templateRows={{ base: \"auto\", md: \"1fr\" }}\n w=\"100%\"\n >\n {/* Name + Desc */}\n <Stack spacing={2}>\n <Heading />\n\n <Stack direction=\"row\" spacing={1}>\n <Languages />\n </Stack>\n </Stack>\n\n <Stack\n alignSelf=\"center\"\n data-testid={testIds.languages}\n fontSize=\"xs\"\n spacing={1}\n >\n <Details />\n </Stack>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n pkg: CatalogPackage;\n variant?: PackageCardType;\n}\n\nconst PackageCardContext = createContext<CatalogPackage | null>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={pkg}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n items: CatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n cardView = PackageCardType.Wide,\n items,\n loading,\n // title,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\nimport { PackageListViewProps } from \"./PackageList\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\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 srcSet,\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 =\n loading != null ||\n ignoreFallback ||\n (fallbackSrc === undefined && fallback === undefined) // if the user doesn't provide any kind of fallback we should ignore it\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 srcSet={srcSet}\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\ntype NativeImageProps = ImgHTMLAttributes<HTMLImageElement>\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?: NativeImageProps[\"onLoad\"]\n /**\n * A callback for when there was an error loading the image `src`\n */\n onError?: NativeImageProps[\"onError\"]\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?: NativeImageProps[\"crossOrigin\"]\n loading?: NativeImageProps[\"loading\"]\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 loading,\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 img.src = src\n if (crossOrigin) img.crossOrigin = crossOrigin\n if (srcSet) img.srcset = srcSet\n if (sizes) img.sizes = sizes\n if (loading) img.loading = loading\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, loading])\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 { 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 {\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, Heading } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { Hero } from \"./Hero\";\nimport { InfoPanel } from \"./InfoPanel\";\n\nexport const HomeRedesign: FunctionComponent = () => {\n const { page } = useCatalogResults({\n limit: 10,\n });\n\n return (\n <Page\n meta={{\n title: \"Construct Hub\",\n description:\n \"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.\",\n suffix: false,\n }}\n pageName=\"home\"\n >\n <Flex direction=\"column\">\n <Hero />\n <Grid\n gap={3}\n h=\"full\"\n p={3}\n pl={12}\n templateColumns=\"2fr 1fr\"\n templateRows=\"1fr\"\n >\n <Flex direction=\"column\">\n <Heading as=\"h3\" color=\"blue.800\" mb={3} size=\"md\">\n Recently Updated\n </Heading>\n\n <PackageList items={page} />\n </Flex>\n <InfoPanel />\n </Grid>\n </Flex>\n </Page>\n );\n};\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/Time/Time.tsx","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/Heading.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","../../../src/image.tsx","../../../src/use-image.ts","../../../src/link-box.tsx","../../../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","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","Time","date","formatString","format","boxProps","dateTime","toISOString","PackageCardType","testIds","createTestIds","Detail","dataTestid","value","fontSize","Details","useLanguage","currentLanguage","usePackageCard","author","metadata","version","authorName","published","Date","NavLink","to","getSearchPath","query","Heading","Link","getPackagePath","color","fontWeight","lineHeight","noOfLines","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","borderRadius","h","opacity","w","Languages","pkg","WideCard","_hover","bg","border","wideContainer","gap","p","templateColumns","base","templateRows","spacing","direction","alignSelf","PackageCardContext","createContext","useContext","PackageCard","variant","Wide","Provider","listViews","items","PackageList","memo","cardView","loading","View","NativeImage","alt","width","height","Image","crossOrigin","shouldIgnore","fallbackSrc","fallback","status","ignoreFallback","useState","setStatus","src","imageRef","useRef","load","useCallback","flush","img","onLoad","error","onError","useSafeLayoutEffect","useImage","shared","objectFit","objectPosition","align","rest","omit","className","LinkOverlay","cx","rel","isExternal","target","__css","position","cursor","display","top","zIndex","LinkBox","InputGroup","styles","useMultiStyleConfig","omitThemingProps","_className","groupStyles","validChildren","getValidChildren","input","child","clones","theming","React","StyledElement","chakra","baseStyle","alignItems","justifyContent","InputElement","useStyles","attr","elementStyles","InputLeftElement","InputRightElement","Hero","justify","py","mt","borderBottom","borderBottomColor","Form","placeholder","Search","InfoSection","InfoPanel","Card","boxShadow","justifyItems","sx","mr","wrap","HomeRedesign","useCatalogResults","limit","pl","mb"],"mappings":"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","file":"static/js/9.340b7752.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, HTMLChakraProps, forwardRef, Image } from \"@chakra-ui/react\";\n\nexport interface PictureProps extends HTMLChakraProps<\"img\"> {\n alt: string;\n src: string;\n sources?: {\n media?: string;\n srcSet: string;\n }[];\n}\n\nexport const Picture = forwardRef<PictureProps, \"img\">(\n ({ sources, ...props }, ref) => (\n <Box as=\"picture\">\n {sources?.map((source, idx) => (\n <source key={idx} media={source.media} srcSet={source.srcSet} />\n ))}\n <Image ref={ref} {...props} />\n </Box>\n )\n);\n\nPicture.displayName = \"Picture\";\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\n );\n };\n","import { 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","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactChild } from \"react\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n label: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n label,\n value,\n}) => (\n <Text data-testid={dataTestid} fontSize=\"xs\">\n <strong>{label}</strong> {value}\n </Text>\n);\n\nexport const Details: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n\n const {\n author,\n metadata: { date },\n version,\n } = usePackageCard();\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <>\n <Detail data-testid={testIds.version} label=\"Version\" value={version} />\n <Detail\n data-testid={testIds.published}\n label=\"Published\"\n value={\n <Time date={new Date(date)} fontSize=\"xs\" format=\"MMM dd, yyyy\" />\n }\n />\n <Detail\n data-testid={testIds.author}\n label=\"Author\"\n value={\n <NavLink\n to={getSearchPath({\n query: `\"${authorName}\"`,\n language: currentLanguage,\n })}\n >\n {authorName}\n </NavLink>\n }\n />\n </>\n );\n};\n","import { Heading as ChakraHeading, LinkOverlay, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const { name, description, version } = usePackageCard();\n\n return (\n <>\n <LinkOverlay\n as={Link}\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n >\n {name}\n </ChakraHeading>\n </LinkOverlay>\n <Text\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { Grid, Stack, LinkBox } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Languages } from \"./Languages\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"gray.50\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n color=\"gray.600\"\n data-testid={testIds.wideContainer}\n gap={5}\n p={5}\n templateColumns={{ base: \"1fr\", md: \"2fr 1fr\" }}\n templateRows={{ base: \"auto\", md: \"1fr\" }}\n w=\"100%\"\n >\n {/* Name + Desc */}\n <Stack spacing={2}>\n <Heading />\n\n <Stack direction=\"row\" spacing={1}>\n <Languages />\n </Stack>\n </Stack>\n\n <Stack\n alignSelf=\"center\"\n data-testid={testIds.languages}\n fontSize=\"xs\"\n spacing={1}\n >\n <Details />\n </Stack>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n pkg: CatalogPackage;\n variant?: PackageCardType;\n}\n\nconst PackageCardContext = createContext<CatalogPackage | null>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={pkg}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n items: CatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n cardView = PackageCardType.Wide,\n items,\n loading,\n // title,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\nimport { PackageListViewProps } from \"./PackageList\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\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 srcSet,\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 =\n loading != null ||\n ignoreFallback ||\n (fallbackSrc === undefined && fallback === undefined) // if the user doesn't provide any kind of fallback we should ignore it\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 srcSet={srcSet}\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\ntype NativeImageProps = ImgHTMLAttributes<HTMLImageElement>\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?: NativeImageProps[\"onLoad\"]\n /**\n * A callback for when there was an error loading the image `src`\n */\n onError?: NativeImageProps[\"onError\"]\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?: NativeImageProps[\"crossOrigin\"]\n loading?: NativeImageProps[\"loading\"]\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 loading,\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 img.src = src\n if (crossOrigin) img.crossOrigin = crossOrigin\n if (srcSet) img.srcset = srcSet\n if (sizes) img.sizes = sizes\n if (loading) img.loading = loading\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, loading])\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 { 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 {\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, Heading } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { Hero } from \"./Hero\";\nimport { InfoPanel } from \"./InfoPanel\";\n\nexport const HomeRedesign: FunctionComponent = () => {\n const { page } = useCatalogResults({\n limit: 10,\n });\n\n return (\n <Page\n meta={{\n title: \"Construct Hub\",\n description:\n \"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.\",\n suffix: false,\n }}\n pageName=\"home\"\n >\n <Flex direction=\"column\">\n <Hero />\n <Grid\n gap={3}\n h=\"full\"\n p={3}\n pl={12}\n templateColumns=\"2fr 1fr\"\n templateRows=\"1fr\"\n >\n <Flex direction=\"column\">\n <Heading as=\"h3\" color=\"blue.800\" mb={3} size=\"md\">\n Recently Updated\n </Heading>\n\n <PackageList items={page} />\n </Flex>\n <InfoPanel />\n </Grid>\n </Flex>\n </Page>\n );\n};\n"],"sourceRoot":""}
|