construct-hub 0.2.63 → 0.2.64

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","hooks/useQueryParams/useQueryParams.ts","hooks/useLanguage/useLanguage.ts","constants/keywords.ts","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageTag/PackageTag.tsx","components/Time/Time.tsx","components/PackageCard/constants.ts","util/css.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/Heading.tsx","components/PackageCard/Highlight.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/Tags.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/constants.ts","views/SearchRedesign/FilterHeading.tsx","views/SearchRedesign/testIds.ts","views/SearchRedesign/CheckboxFilter.tsx","views/SearchRedesign/AuthorFilter.tsx","views/SearchRedesign/RadioFilter.tsx","views/SearchRedesign/util.ts","views/SearchRedesign/SearchState.tsx","views/SearchRedesign/CDKFilter.tsx","views/SearchRedesign/LanguageFilter.tsx","views/SearchRedesign/FilterPanel.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","views/SearchRedesign/PageControls.tsx","views/SearchRedesign/SearchDetails.tsx","views/SearchRedesign/constants.ts","views/SearchRedesign/SortFilter.tsx","views/SearchRedesign/SortAndFilterDrawer.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","useQueryParams","useLocation","useMemo","URLSearchParams","defaultLang","Language","TypeScript","LOCAL_KEY","isValidLang","lang","TEMP_SUPPORTED_LANGUAGES","has","getInitialLang","langFromParams","storedLang","localStorage","getItem","useLanguage","options","updateUrl","updateSaved","pathname","hash","useHistory","replace","params","get","QUERY_PARAMS","LANGUAGE","useState","language","setLanguage","set","toString","update","useCallback","val","setItem","KEYWORD_IGNORE_LIST","Set","LanguageSupportTooltip","isSupported","langName","LANGUAGE_NAME_MAP","message","hasArrow","label","placement","PackageTag","value","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","Time","forwardRef","ref","date","formatString","format","boxProps","as","dateTime","toISOString","displayName","PackageCardType","makeGridAreas","rows","map","row","join","testIds","createTestIds","Detail","dataTestid","icon","fontSize","Details","currentLanguage","usePackageCard","author","metadata","version","data","useStats","downloads","packages","npm","authorName","undefined","Download","toLocaleString","published","Date","color","Heading","comment","constructFramework","cdkType","cdkVersion","majorVersion","Link","getPackagePath","align","CDKTYPE_RENDER_MAP","alt","h","mr","src","imgsrc","w","fontWeight","wordBreak","lineHeight","noOfLines","HIGHLIGHT_RENDER_MAP","official","community","highQuality","Highlight","isOfficial","OFFICIAL_SCOPES","some","scope","includes","direction","spacing","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","indexOf","info","isSupportedByLibrary","isSupportedByConstructHub","Icon","borderRadius","opacity","Languages","pkg","Tags","keywords","variant","filter","v","Boolean","slice","tag","GRID_AREA","gridAreasMd","gridAreasMobile","WideCard","bg","autoColumns","autoRows","border","boxShadow","wideContainer","gap","p","templateAreas","base","gridArea","display","maxH","overflow","alignItems","alignSelf","templateColumns","templateRows","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","ArrowButton","offset","getPageUrl","props","borderColor","colorScheme","mx","disabled","GoToPage","pageLimit","inputValue","setInputValue","push","onSubmit","e","preventDefault","parseInt","max","min","onChange","target","textAlign","type","ml","LIMIT","FilterHeading","hint","strategy","Question","px","py","shadow","CheckboxFilter","checkedValues","values","onValueChange","getOnChange","isChecked","filterItem","isTruncated","AuthorFilter","authors","setAuthors","authorFilter","a","RadioFilter","checkedValue","toNum","result","SearchStateContext","useSearchState","state","Error","SearchStateProvider","langQuery","queryParams","OFFSET","decodeURIComponent","SEARCH_QUERY","split","SORT","CDK_TYPE","cdkMajorParam","CDK_MAJOR","cdkMajor","searchAPI","useCatalogSearch","defaultCdkMajor","defaultCdkType","defaultLanguages","defaultQuery","defaultSort","setQuery","limit","CDKFilter","setCdkType","setCdkMajor","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","reduce","opts","pkgCount","CDKTYPE_NAME_MAP","length","majorsOptions","majorVersions","b","cdkTypeFilter","cdk","cdkVersionFilter","major","majorNum","languageOptions","key","LanguageFilter","setLanguages","languagesFilter","l","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxW","minW","pos","top","listViews","items","PackageList","memo","cardView","loading","View","PageControls","nextOffset","prevOffset","justify","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","Em","SearchDetails","count","filtered","first","last","searchDetails","SORT_RENDER_MAP","CatalogSearchSort","NameAsc","NameDesc","PublishDateAsc","PublishDateDesc","DownloadsDesc","DownloadsAsc","SortFilter","setSort","newSort","SortAndFilterDrawer","drawer","useDisclosure","onClick","onOpen","rightIcon","ChevronDown","pb","SortedBy","selected","Button","sortButton","pl","pr","sortDropdown","sortItem","SearchResults","isFirstRender","useRef","onSearch","useCatalogResults","results","getUrl","q","current","SearchBar","onQueryChange","SearchRedesign"],"mappings":"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","file":"static/js/9.45b9dbbd.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 { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","export const KEYWORD_IGNORE_LIST = new Set([\n \"aws-cdk\",\n \"aws\",\n \"awscdk\",\n \"cdk-construct\",\n \"cdk\",\n \"construct\",\n \"constructs\",\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 const langName = LANGUAGE_NAME_MAP[language];\n\n const message = isSupported\n ? `Click to view documentation in ${langName}`\n : `Documentation support for ${langName} is coming soon!`;\n\n return (\n <Tooltip hasArrow label={message} placement=\"top-start\">\n <span>{children}</span>\n </Tooltip>\n );\n };\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","export enum PackageCardType {\n Wide = \"wide\",\n}\n","/**\n * @fileoverview CSS Related Utils\n */\n\n/**\n * Translates a series of grid row definitions into a grid area string\n * ```ts\n * const gridAreas = makeGridAreas(\n * [\"header\", \"header\", \"header\"],\n * [\"aside\", \"main\", \"main\"],\n * [\"aside\", \"footer\", \"footer\"]\n * ); // `\"header header header\" \"aside main main\" \"aside footer footer\"`\n * ```\n */\nexport const makeGridAreas = (...rows: string[][]): string => {\n return rows.map((row) => `\"${row.join(\" \")}\"`).join(\" \");\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"downloads\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"comment\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { DownloadIcon } from \"@chakra-ui/icons\";\nimport { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { useStats } from \"../../contexts/Stats\";\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 icon?: ReactChild;\n label: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n icon,\n label,\n value,\n}) => (\n <Text data-testid={dataTestid} fontSize=\"xs\">\n {icon}\n {icon ? \" \" : \"\"}\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 name,\n } = usePackageCard();\n\n const { data } = useStats();\n const downloads: number | undefined = data?.packages?.[name]?.downloads?.npm;\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <>\n {downloads !== undefined && downloads >= 10 ? (\n <Detail\n data-testid={testIds.downloads}\n icon={<DownloadIcon />}\n label={downloads.toLocaleString()}\n value={\"Downloads\"}\n />\n ) : (\n <Detail data-testid={testIds.version} label=\"Version\" value={version} />\n )}\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 color=\"blue.500\"\n to={getSearchPath({\n query: authorName,\n language: currentLanguage,\n })}\n >\n {authorName}\n </NavLink>\n }\n />\n </>\n );\n};\n","import {\n Flex,\n Image,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n Tooltip,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { CDKTYPE_RENDER_MAP } from \"../../constants/constructs\";\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 {\n comment,\n description,\n metadata: { constructFramework },\n name,\n version,\n } = usePackageCard();\n\n const cdkType = constructFramework?.name;\n const cdkVersion = constructFramework?.majorVersion;\n\n return (\n <>\n <LinkOverlay\n as={Link}\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <Flex align=\"center\">\n {cdkType && (\n <Tooltip\n hasArrow\n label={\n CDKTYPE_RENDER_MAP[cdkType].name +\n (cdkVersion !== undefined ? ` v${cdkVersion}` : \"\")\n }\n placement=\"top\"\n >\n <Image\n alt={`${CDKTYPE_RENDER_MAP[cdkType].name} icon`}\n h={5}\n mr={2}\n src={CDKTYPE_RENDER_MAP[cdkType].imgsrc}\n w={5}\n zIndex={1}\n />\n </Tooltip>\n )}\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"break-all\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\n <Text\n color=\"blue.800\"\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n {comment && (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text\n as=\"span\"\n color=\"blue.500\"\n fontSize=\"md\"\n fontWeight=\"bold\"\n lineHeight=\"tall\"\n >\n Editor&apos;s note:{\" \"}\n </Text>\n {comment}\n </Text>\n )}\n </>\n );\n};\n","import { Stack, Image, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { OFFICIAL_SCOPES } from \"../../constants/constructs\";\nimport { usePackageCard } from \"./PackageCard\";\n\nconst HIGHLIGHT_RENDER_MAP = {\n official: {\n imgsrc: \"/assets/construct.png\",\n label: \"Official\",\n color: \"#ED3B00\",\n },\n community: {\n imgsrc: \"/assets/community.png\",\n label: \"Community\",\n color: \"#2F50FE\",\n },\n highQuality: {\n imgsrc: \"/assets/medal.png\",\n label: \"High Quality\",\n color: \"#1F02D4\",\n },\n} as const;\n\n// TODO: We will need a similar solution to tags for determining High Quality, and likely Official\nexport const Highlight: FunctionComponent = () => {\n const { name } = usePackageCard();\n\n const isOfficial = OFFICIAL_SCOPES.some((scope) => name.includes(scope));\n const highlightType = isOfficial ? \"official\" : \"community\";\n const { imgsrc, color, label } = HIGHLIGHT_RENDER_MAP[highlightType];\n\n return (\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Image alt={`${label} icon`} src={imgsrc} w={4} />\n <Text color={color} fontWeight=\"bold\">\n {label}\n </Text>\n </Stack>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages?: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { FunctionComponent } from \"react\";\nimport { OFFICIAL_SCOPES } from \"../../constants/constructs\";\nimport { KEYWORD_IGNORE_LIST } from \"../../constants/keywords\";\nimport { PackageTag } from \"../PackageTag\";\nimport { usePackageCard } from \"./PackageCard\";\n\n// TODO: Proper tag implemenation, this is only a visual placeholder\nexport const Tags: FunctionComponent = () => {\n const { keywords, name } = usePackageCard();\n\n return (\n <>\n {[\n OFFICIAL_SCOPES.some((scope) => name.includes(scope)) ? (\n <PackageTag\n key=\"official\"\n label=\"official\"\n mr={1}\n value=\"@aws-cdk\"\n variant=\"official\"\n >\n Official\n </PackageTag>\n ) : null,\n ...(keywords ?? [])\n .filter((v) => Boolean(v) && !KEYWORD_IGNORE_LIST.has(v))\n .slice(0, 3)\n .map((tag) => {\n return (\n <PackageTag\n key={tag}\n mr={1}\n value={`\"${tag}\"`}\n zIndex=\"0 !important\"\n >\n {tag}\n </PackageTag>\n );\n }),\n ]}\n </>\n );\n};\n","import { Grid, Stack, LinkBox, Divider } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { makeGridAreas } from \"../../util/css\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nconst GRID_AREA = {\n DETAILS: \"details\",\n LANGUAGES: \"languages\",\n TAGS: \"tags\",\n HEADING: \"heading\",\n};\n\nconst gridAreasMd = makeGridAreas(\n [GRID_AREA.HEADING, GRID_AREA.HEADING, GRID_AREA.DETAILS],\n [GRID_AREA.HEADING, GRID_AREA.HEADING, GRID_AREA.DETAILS],\n [GRID_AREA.TAGS, GRID_AREA.TAGS, GRID_AREA.LANGUAGES]\n);\n\nconst gridAreasMobile = makeGridAreas(\n [GRID_AREA.HEADING],\n [GRID_AREA.LANGUAGES],\n [GRID_AREA.DETAILS]\n);\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 autoColumns=\"1fr\"\n autoRows=\"auto\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"gray.600\"\n data-testid={testIds.wideContainer}\n gap={5}\n h=\"100%\"\n p={5}\n templateAreas={{ base: gridAreasMobile, md: gridAreasMd }}\n w=\"100%\"\n >\n {/* Name + Desc */}\n <Stack gridArea={GRID_AREA.HEADING} spacing={2}>\n <Heading />\n </Stack>\n\n <Stack\n direction=\"row\"\n display={{ base: \"none\", md: \"initial\" }}\n gridArea={GRID_AREA.TAGS}\n maxH={6}\n overflow=\"hidden\"\n >\n <Tags />\n </Stack>\n\n <Grid\n alignItems=\"start\"\n alignSelf=\"center\"\n autoColumns={{ base: \"initial\", md: \"1fr\" }}\n autoRows={{ base: \"initial\", md: \"auto\" }}\n fontSize=\"xs\"\n gap={{ base: 0, md: 1 }}\n gridArea={GRID_AREA.DETAILS}\n templateColumns={{ base: \"1fr 1fr\", md: \"initial\" }}\n templateRows={{ base: \"1fr 1fr\", md: \"initial\" }}\n >\n <Highlight />\n <Details />\n </Grid>\n\n <Stack gridArea={GRID_AREA.LANGUAGES} spacing={{ base: 4, md: 0 }}>\n <Divider display={{ md: \"none\" }} />\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\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<\n (CatalogPackage & { comment?: string }) | null\n>(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 { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-testid\": dataTestid,\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-testid\": dataTestid,\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport interface GoToPageProps {\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-testid\": dataTestid,\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 data-testid={dataTestid}\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 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","import { QuestionIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Heading,\n Text,\n Popover,\n IconButton,\n PopoverHeader,\n PopoverTrigger,\n PopoverBody,\n PopoverCloseButton,\n PopoverArrow,\n PopoverContent,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface FilterHeadingProps {\n name: string;\n hint?: string;\n}\n\nexport const FilterHeading: FunctionComponent<FilterHeadingProps> = ({\n name,\n hint,\n}) => {\n return (\n <Flex align=\"center\">\n <Heading as=\"h4\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement=\"top-end\" strategy=\"fixed\">\n <PopoverTrigger>\n <IconButton\n aria-label={`Hint: ${name}`}\n icon={<QuestionIcon h={4} w={4} />}\n ml={2}\n px={0}\n py={0}\n size=\"sm\"\n variant=\"ghost\"\n />\n </PopoverTrigger>\n <PopoverContent\n bg=\"gray.700\"\n color=\"white\"\n fontSize=\"sm\"\n shadow=\"whiteAlpha.300\"\n >\n <PopoverHeader>Hint: {name}</PopoverHeader>\n <PopoverCloseButton />\n <PopoverArrow />\n <PopoverBody>\n <Text>{hint}</Text>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n ) : null}\n </Flex>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nexport default createTestIds(\"searchRedesign\", [\n \"page\",\n // Results\n \"searchDetails\",\n \"nextPage\",\n \"prevPage\",\n \"goToPage\",\n // Sorting\n \"sortButton\",\n \"sortDropdown\",\n \"sortItem\",\n // Filters Panel\n \"filtersPanel\",\n \"cdkTypeFilter\",\n \"cdkVersionFilter\",\n \"filterItem\",\n \"languagesFilter\",\n \"authorFilter\",\n] as const);\n","import { Checkbox, Stack, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\n\nexport interface CheckboxFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n options: {\n display: string;\n value: string;\n }[];\n values: string[];\n onValueChange: (value: string) => void;\n}\n\nexport const CheckboxFilter: FunctionComponent<CheckboxFilterProps> = ({\n \"data-testid\": dataTestid,\n hint,\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const getOnChange = (value: string) => () => {\n onValueChange(value);\n };\n\n return (\n <Stack data-testid={dataTestid} spacing={2}>\n <FilterHeading hint={hint} name={name} />\n {options.map(({ display, value }) => (\n <Checkbox\n isChecked={checkedValues.includes(value)}\n key={value}\n onChange={getOnChange(value)}\n >\n <Text\n color=\"gray.600\"\n data-testid={testIds.filterItem}\n data-value={value}\n fontSize=\"sm\"\n isTruncated\n >\n {display}\n </Text>\n </Checkbox>\n ))}\n </Stack>\n );\n};\n","import { FunctionComponent, useState } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport testIds from \"./testIds\";\n\n// TODO: This filter is currently non-functional\nexport const AuthorFilter: FunctionComponent = () => {\n const [authors, setAuthors] = useState<string[]>([]);\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 <CheckboxFilter\n data-testid={testIds.authorFilter}\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 );\n};\n","import { Radio, RadioGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\n\nexport interface RadioFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n value?: string;\n onValueChange: (value: string) => void;\n options: {\n display: string;\n value: string;\n }[];\n}\n\nexport const RadioFilter: FunctionComponent<RadioFilterProps> = ({\n \"data-testid\": dataTestid,\n value: checkedValue,\n onValueChange,\n options,\n name,\n hint,\n}) => {\n return (\n <Stack data-testid={dataTestid} spacing={2}>\n <FilterHeading hint={hint} name={name} />\n <RadioGroup onChange={onValueChange} value={checkedValue}>\n <Stack>\n {options.map(({ display, value }) => (\n <Radio key={value} value={value}>\n <Text\n color=\"gray.600\"\n data-testid={testIds.filterItem}\n data-value={value}\n fontSize=\"sm\"\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n ))}\n </Stack>\n </RadioGroup>\n </Stack>\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","/**\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 cdkMajorParam = queryParams.get(QUERY_PARAMS.CDK_MAJOR);\n const cdkMajor = cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n\n const searchAPI = useCatalogSearch({\n defaultCdkMajor: cdkMajor,\n defaultCdkType: cdkType,\n 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 { FunctionComponent, useMemo } from \"react\";\nimport { CatalogConstructFrameworkMeta } from \"../../api/catalog-search\";\nimport { CDKType, CDKTYPE_NAME_MAP } from \"../../constants/constructs\";\nimport { useSearchContext } from \"../../contexts/Search\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\ntype CDKOptions = Partial<{\n [key in CDKType]: CatalogConstructFrameworkMeta & {\n display: string;\n value: key;\n };\n}>;\n\nexport const CDKFilter: FunctionComponent = () => {\n const { cdkType, setCdkType, cdkMajor, setCdkMajor } =\n useSearchState().searchAPI;\n const searchAPI = useSearchContext()!;\n\n // Options with less than one package will be omitted\n const cdkOptions = useMemo(() => {\n const cdkTypes = searchAPI.constructFrameworks;\n const options = Object.entries(cdkTypes).reduce((opts, [name, meta]) => {\n if (meta.pkgCount < 1) {\n return opts;\n }\n\n return {\n ...opts,\n [name]: {\n display: CDKTYPE_NAME_MAP[name as CDKType],\n value: name,\n ...meta,\n },\n };\n }, {});\n\n return Object.keys(options).length ? (options as CDKOptions) : undefined;\n }, [searchAPI]);\n\n const majorsOptions = useMemo(() => {\n if (!cdkOptions || !cdkType) return undefined;\n const majorVersions = cdkOptions[cdkType]?.majorVersions;\n\n if (!majorVersions) return undefined;\n\n return [...majorVersions]\n .sort((a, b) => a - b)\n .map((value) => ({\n value: value.toString(),\n display: `${CDKTYPE_NAME_MAP[cdkType]} v${value}`,\n }));\n }, [cdkOptions, cdkType]);\n\n if (!cdkOptions) {\n return null;\n }\n\n const onCdkTypeChange = (type: string) => {\n const cdk = type as CDKType;\n setCdkMajor(undefined);\n setCdkType(type ? cdk : undefined);\n };\n\n const onCdkMajorChange = (major: string) => {\n if (!major) {\n setCdkMajor(undefined);\n return;\n }\n\n const majorNum = parseInt(major, 10);\n\n setCdkMajor(majorNum);\n };\n\n return (\n <>\n <RadioFilter\n data-testid={testIds.cdkTypeFilter}\n hint=\"Constructs support distinct output types: AWS CDK libraries output Cloudformation Templates, CDK8s libraries output Kubernetes manifests, and CDKtf libraries output Terraform Configuration. The Construct Hub attempts to detect the output type of each library, but results are not guaranteed to be completely accurate.\"\n name=\"CDK Type\"\n onValueChange={onCdkTypeChange}\n options={[\n { display: \"Any CDK Type\", value: \"\" },\n ...Object.values(cdkOptions),\n ]}\n value={cdkType ?? \"\"}\n />\n {/* No point in showing major versions if only a single one is available */}\n {!!(majorsOptions && majorsOptions.length > 1) && (\n <RadioFilter\n data-testid={testIds.cdkVersionFilter}\n hint={`Allows you to filter by a major version of your selected CDK Type: (${\n CDKTYPE_NAME_MAP[cdkType!]\n })`}\n name=\"CDK Major Version\"\n onValueChange={onCdkMajorChange}\n options={[\n { display: \"Any Major Version\", value: \"\" },\n ...majorsOptions,\n ]}\n value={cdkMajor?.toString() ?? \"\"}\n />\n )}\n </>\n );\n};\n","import { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nconst languageOptions = Object.entries(LANGUAGE_NAME_MAP)\n .filter(([key]) => TEMP_SUPPORTED_LANGUAGES.has(key as Language))\n .map(([key, value]) => ({\n display: value,\n value: key,\n }));\n\nexport const LanguageFilter: FunctionComponent = () => {\n const { languages, setLanguages } = useSearchState().searchAPI;\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n setLanguages(\n languages.includes(language)\n ? languages.filter((l) => l !== language)\n : [...languages, language]\n );\n };\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Select one or more programming languages to filter by. Results will match at least one of the selected languages. If no languages are selected, results will not be filtered by langauges.\"\n name=\"Programming Language\"\n onValueChange={onLanguagesChange}\n options={languageOptions}\n values={languages}\n />\n );\n};\n","import { Heading, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Card } from \"../../components/Card\";\nimport { AuthorFilter } from \"./AuthorFilter\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport testIds from \"./testIds\";\n\nexport interface FilterPanelProps {}\n\n// Header height + section padding\nconst TOP_OFFSET = \"5.75rem\";\n\n/**\n * The desktop Resolution Filter Panel\n */\nexport const FilterPanel: FunctionComponent<FilterPanelProps> = () => {\n return (\n <Card\n borderRadius=\"none\"\n boxShadow=\"none\"\n data-testid={testIds.filtersPanel}\n display={{ base: \"none\", md: \"flex\" }}\n maxH={`calc(100vh - ${TOP_OFFSET} - 1.25rem)`}\n maxW=\"23rem\"\n minW=\"100%\"\n overflow=\"hidden auto\"\n p={4}\n pos=\"sticky\"\n top={TOP_OFFSET}\n zIndex=\"docked\"\n >\n <Stack color=\"blue.800\" h=\"max-content\" spacing={6} top={4}>\n <Heading as=\"h3\" size=\"sm\">\n Filters\n </Heading>\n <CDKFilter />\n <LanguageFilter />\n <AuthorFilter />\n </Stack>\n </Card>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n 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 { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"../SearchResults/components/ArrowButton\";\nimport { GoToPage } from \"../SearchResults/components/GoToPage\";\nimport testIds from \"./testIds\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n getPageUrl,\n pageLimit,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Stack\n align=\"center\"\n direction=\"row\"\n justify=\"space-between\"\n maxW=\"18rem\"\n mx=\"auto\"\n spacing={4}\n w=\"full\"\n >\n <ArrowButton\n data-testid={testIds.prevPage}\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <GoToPage\n data-testid={testIds.goToPage}\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-testid={testIds.nextPage}\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Stack>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport interface SearchDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n query?: string;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"strong\" color=\"gray.700\">\n {children}\n </Text>\n);\n\nexport const SearchDetails: FunctionComponent<SearchDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n query,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n return (\n <Text data-testid={testIds.searchDetails}>\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 {query && (\n <>\n {\" for \"}\n <Em>{query}</Em>\n </>\n )}\n </Text>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\n\nexport const SORT_RENDER_MAP = {\n [CatalogSearchSort.NameAsc]: \"A-Z\",\n [CatalogSearchSort.NameDesc]: \"Z-A\",\n [CatalogSearchSort.PublishDateAsc]: \"Oldest first\",\n [CatalogSearchSort.PublishDateDesc]: \"Newest first\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n","import { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSearchState } from \"./SearchState\";\n\nexport const SortFilter: FunctionComponent = () => {\n const { sort, setSort } = useSearchState().searchAPI;\n\n const onSortChange = (newSort: string) => {\n setSort(newSort ? (newSort as CatalogSearchSort) : undefined);\n };\n\n return (\n <RadioFilter\n hint=\"Sets the order of search results\"\n name=\"Sorted By\"\n onValueChange={onSortChange}\n options={[\n { display: \"Relevance\", value: \"\" },\n ...Object.entries(SORT_RENDER_MAP).map(([value, display]) => ({\n display,\n value,\n })),\n ]}\n value={sort ?? \"\"}\n />\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Drawer,\n Stack,\n DrawerBody,\n DrawerHeader,\n DrawerOverlay,\n DrawerContent,\n DrawerCloseButton,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { AuthorFilter } from \"./AuthorFilter\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { SortFilter } from \"./SortFilter\";\n\n/**\n * The mobile filter Drawer (Bottomsheet in iOS terminology)\n */\nexport const SortAndFilterDrawer: FunctionComponent = () => {\n const drawer = useDisclosure();\n\n return (\n <>\n <Button\n colorScheme=\"blue\"\n display={{ md: \"none\" }}\n onClick={drawer.onOpen}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n Sorting and Filters\n </Button>\n <Drawer {...drawer} placement=\"bottom\">\n <DrawerOverlay />\n\n <DrawerContent color=\"blue.800\">\n <DrawerHeader>Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"blue.800\" pb={4} spacing={4}>\n <SortFilter />\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <AuthorFilter />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Text,\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n Button,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const SortedBy: FunctionComponent = () => {\n const { searchAPI } = useSearchState();\n const { sort, setSort } = searchAPI;\n\n const selected = sort ? SORT_RENDER_MAP[sort] : \"Relevance\";\n\n return (\n <Flex align=\"center\">\n <Text>Sorted by</Text>\n <Menu>\n <MenuButton\n as={Button}\n color=\"blue.500\"\n data-testid={testIds.sortButton}\n ml={2}\n pl={2} // For some reason, the px shorthand doesn't work on this Button\n pr={2}\n py={1}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n {selected}\n </MenuButton>\n <MenuList data-testid={testIds.sortDropdown} minW=\"180\" zIndex=\"sticky\">\n <MenuItem\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => setSort(undefined)}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => setSort(value as CatalogSearchSort)}\n >\n {display}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n </Flex>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { SearchBar } from \"../../components/SearchBar\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { getSearchPath } from \"../../util/url\";\nimport { SearchQueryParam } from \"../SearchResults/constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { useSearchState } from \"./SearchState\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\n\nexport const SearchResults: FunctionComponent = () => {\n const isFirstRender = useRef(true);\n const { push } = useHistory();\n\n const { query, searchAPI, offset, limit } = useSearchState();\n const { languages, sort, cdkType, cdkMajor, onSearch } = searchAPI;\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit,\n query,\n languages,\n cdkMajor,\n cdkType,\n sort,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n cdkMajor,\n cdkType,\n query: (params.q ?? query) as string,\n languages,\n sort,\n offset: params.offset ?? offset,\n });\n };\n\n // Resets the page number to 1 if query param offset is below 0, or to the last page if offset is higher than page count\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\n\n // Reset offset and update url when query, filters, or sort change\n // We want to avoid doing this on first render / when a user directly navigates to a search URL\n // so we keep a ref to prevent this\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else {\n // Trigger a history replace rather than push to avoid bloating browser history\n onSearch({ replace: true });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sort, languages, cdkType, cdkMajor]);\n\n return (\n <Page\n meta={{\n title: query || \"Search\",\n description: query\n ? `${results.length} results for ${query} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Stack direction=\"column\" maxW=\"100vw\" pb={4} px={4} spacing={4}>\n <SearchBar\n bg=\"white\"\n onChange={searchAPI.onQueryChange}\n onSubmit={searchAPI.onSubmit}\n value={searchAPI.query}\n />\n\n <Stack\n align={{ base: \"start\", lg: \"center\" }}\n direction={{ base: \"column-reverse\", lg: \"row\" }}\n justify={{ base: \"initial\", lg: \"space-between\" }}\n spacing={4}\n >\n <SearchDetails\n count={results.length}\n filtered={!!query}\n limit={limit}\n offset={offset}\n query={query}\n />\n\n <Box display={{ base: \"none\", md: \"initial\" }}>\n <SortedBy />\n </Box>\n\n <Box display={{ md: \"none\" }}>\n <SortAndFilterDrawer />\n </Box>\n </Stack>\n\n <PackageList items={page} />\n\n <Box w=\"full\">\n <PageControls\n getPageUrl={getUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Stack>\n </Page>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FilterPanel } from \"./FilterPanel\";\nimport { SearchResults } from \"./SearchResults\";\nimport { SearchStateProvider } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const SearchRedesign: FunctionComponent = () => {\n return (\n <SearchStateProvider>\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description:\n \"Search Construct Libraries for AWS CDK, CDK8s, and CDKtf\",\n }}\n pageName=\"search\"\n >\n <Grid\n data-testid={testIds.page}\n gap={4}\n h=\"full\"\n maxW=\"100%\"\n px={{ base: 0, md: 6 }}\n py={6}\n templateColumns={{ base: \"1fr\", md: \"auto 1fr\" }}\n templateRows=\"1fr\"\n >\n {/* Filter Panel Desktop */}\n <FilterPanel />\n\n {/* Results, Info, and Controls */}\n <SearchResults />\n </Grid>\n </Page>\n </SearchStateProvider>\n );\n};\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- !function(e){function t(t){for(var n,a,c=t[0],i=t[1],f=t[2],p=0,s=[];p<c.length;p++)a=c[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(l&&l(t);s.length;)s.shift()();return u.push.apply(u,f||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,c=1;c<r.length;c++){var i=r[c];0!==o[i]&&(n=!1)}n&&(u.splice(t--,1),e=a(a.s=r[0]))}return e}var n={},o={4:0},u=[];function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,a.nc&&c.setAttribute("nonce",a.nc),c.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{0:"14ae620d",1:"ba696ffb",2:"5cef3eb0",5:"a2fc9d7c",7:"4fcbd19f",8:"691d34bd",9:"e8c984d8",10:"48221095",11:"c3c4095a",12:"cadd501c",13:"fe1e2da5",14:"0902aefd",15:"50336305",16:"2d478192",17:"ee760920"}[e]+".chunk.js"}(e);var i=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",i.name="ChunkLoadError",i.type=n,i.request=u,r[1](i)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},a.m=e,a.c=n,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(r,n,function(t){return e[t]}.bind(null,n));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/",a.oe=function(e){throw console.error(e),e};var c=this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[],i=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var l=i;r()}([]);
2
- //# sourceMappingURL=runtime-main.a6d6b3c7.js.map
1
+ !function(e){function t(t){for(var n,a,c=t[0],i=t[1],f=t[2],p=0,s=[];p<c.length;p++)a=c[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(l&&l(t);s.length;)s.shift()();return u.push.apply(u,f||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,c=1;c<r.length;c++){var i=r[c];0!==o[i]&&(n=!1)}n&&(u.splice(t--,1),e=a(a.s=r[0]))}return e}var n={},o={4:0},u=[];function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,a.nc&&c.setAttribute("nonce",a.nc),c.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{0:"14ae620d",1:"ba696ffb",2:"5cef3eb0",5:"a2fc9d7c",7:"4fcbd19f",8:"691d34bd",9:"45b9dbbd",10:"48221095",11:"ff498e82",12:"cadd501c",13:"fe1e2da5",14:"0902aefd",15:"50336305",16:"2d478192",17:"ee760920"}[e]+".chunk.js"}(e);var i=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",i.name="ChunkLoadError",i.type=n,i.request=u,r[1](i)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},a.m=e,a.c=n,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(r,n,function(t){return e[t]}.bind(null,n));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/",a.oe=function(e){throw console.error(e),e};var c=this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[],i=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var l=i;r()}([]);
2
+ //# sourceMappingURL=runtime-main.54bc95d1.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.a6d6b3c7.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t4: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + {\"0\":\"14ae620d\",\"1\":\"ba696ffb\",\"2\":\"5cef3eb0\",\"5\":\"a2fc9d7c\",\"7\":\"4fcbd19f\",\"8\":\"691d34bd\",\"9\":\"e8c984d8\",\"10\":\"48221095\",\"11\":\"c3c4095a\",\"12\":\"cadd501c\",\"13\":\"fe1e2da5\",\"14\":\"0902aefd\",\"15\":\"50336305\",\"16\":\"2d478192\",\"17\":\"ee760920\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonpconstruct-hub-webapp\"] = this[\"webpackJsonpconstruct-hub-webapp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.54bc95d1.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t4: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + {\"0\":\"14ae620d\",\"1\":\"ba696ffb\",\"2\":\"5cef3eb0\",\"5\":\"a2fc9d7c\",\"7\":\"4fcbd19f\",\"8\":\"691d34bd\",\"9\":\"45b9dbbd\",\"10\":\"48221095\",\"11\":\"ff498e82\",\"12\":\"cadd501c\",\"13\":\"fe1e2da5\",\"14\":\"0902aefd\",\"15\":\"50336305\",\"16\":\"2d478192\",\"17\":\"ee760920\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonpconstruct-hub-webapp\"] = this[\"webpackJsonpconstruct-hub-webapp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[11],{241:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var c=n(0),a=n(21),r=function(){var e=Object(a.h)().search;return Object(c.useMemo)((function(){return new URLSearchParams(e)}),[e])}},304:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var c=n(6),a=n(205),r=n(33),o=n(1),i=function(e){var t=e.icon,n=e.offset,i=e.getPageUrl,s={"aria-label":"Page ".concat(n," link"),borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",icon:Object(o.jsx)(t,{color:"blue.500",h:5,w:5}),mx:2,h:10,w:10,variant:"outline"};return void 0!==n?Object(o.jsx)(a.a,Object(c.a)(Object(c.a)({},s),{},{as:r.b,to:i({offset:n})})):Object(o.jsx)(a.a,Object(c.a)(Object(c.a)({},s),{},{disabled:!0}))}},305:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var c=n(5),a=n(207),r=n(229),o=n(198),i=n(0),s=n(21),u=n(1),l=function(e){var t=e.pageLimit,n=e.offset,l=e.getPageUrl,f=Object(i.useState)((n+1).toString()),j=Object(c.a)(f,2),b=j[0],d=j[1],g=Object(s.g)().push;Object(i.useEffect)((function(){d((n+1).toString())}),[n]);return Object(u.jsxs)(a.a,{align:"center",as:"form",mx:2,onSubmit:function(e){e.preventDefault(),g(l({offset:parseInt(b)-1}))},children:[Object(u.jsx)(r.a,{colorScheme:"blue",h:10,max:t+1,min:1,name:"page",onChange:function(e){e.preventDefault(),d(e.target.value)},p:0,textAlign:"center",type:"number",value:b,w:10}),Object(u.jsxs)(o.a,{ml:2,w:"max-content",children:["of ",t+1]})]})}},306:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var c=25},611:function(e,t,n){"use strict";n.r(t),n.d(t,"SearchResults",(function(){return q})),n.d(t,"default",(function(){return q}));var c=n(6),a=n(207),r=n(194),o=n(209),i=n(0),s=n(21),u=n(360),l=n(236),f=n(359),j=n(14),b=n(121),d=n(88),g=n(241),O=n(85),h=n(363),p=n(308),x=n(147),v=n(304),m=n(305),S=n(594),w=n(153),y=n(33),U=n(1),P={children:"Next Page",colorScheme:"blue",rightIcon:Object(U.jsx)(S.a,{color:"white"})},L=function(e){var t=e.nextPageUrl;return t?Object(U.jsx)(w.a,Object(c.a)(Object(c.a)({},P),{},{as:y.b,to:t})):Object(U.jsx)(w.a,Object(c.a)(Object(c.a)({},P),{},{disabled:!0}))},E=function(e){var t=e.offset,n=e.pageLimit,c=e.getPageUrl,r=t<n?t+1:void 0,o=t>0?t-1:void 0;return Object(U.jsxs)(x.a,{alignItems:"center",pt:4,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(U.jsx)(x.b,{colStart:2,justifySelf:"center",children:Object(U.jsx)(L,{nextPageUrl:r?c({offset:r}):void 0})}),Object(U.jsx)(x.b,{colStart:3,justifySelf:"end",children:Object(U.jsxs)(a.a,{align:"center",justify:"center",py:4,children:[Object(U.jsx)(m.a,{getPageUrl:c,offset:t,pageLimit:n}),Object(U.jsx)(v.a,{getPageUrl:c,icon:h.a,offset:o}),Object(U.jsx)(v.a,{getPageUrl:c,icon:p.a,offset:r})]})})]})},R=n(198),C=function(e){var t=e.children;return Object(U.jsx)(R.a,{as:"em",color:"blue.500",fontWeight:"bold",children:t})},I=function(e){var t=e.limit,n=e.offset,c=e.count,a=e.filtered,r=t*n,o=r+t;return Object(U.jsxs)(R.a,{children:["Displaying"," ",Object(U.jsxs)(C,{children:[c?r+1:c," - ",o>c?c:o]})," ","of ",Object(U.jsx)(C,{children:c})," ",a?"search results":"constructs","."]})},N=n(306),q=function(){var e,t,n=Object(g.a)(),h=decodeURIComponent(null!==(e=n.get(j.b.SEARCH_QUERY))&&void 0!==e?e:""),p=n.get(j.b.LANGUAGE),x=Object(d.a)({defaultQuery:null!==h&&void 0!==h?h:void 0,defaultLanguage:null!==p&&void 0!==p?p:void 0}),v=function(e){var t=parseInt(e);return"NaN"==="".concat(t)?0:t}(null!==(t=n.get(j.b.OFFSET))&&void 0!==t?t:"0"),m=Object(s.g)().push,S=Object(b.a)({query:h,offset:v,limit:N.a,language:p}),w=S.results,y=S.page,P=S.pageLimit,L=function(e){var t,n;return Object(O.c)({query:null!==(t=e.q)&&void 0!==t?t:h,language:null!==p&&void 0!==p?p:void 0,offset:null!==(n=e.offset)&&void 0!==n?n:v})};return Object(i.useEffect)((function(){w.length&&(v<0||v>P)&&m(L(v<0?{offset:0}:{offset:P}))}),[w,P,v]),Object(i.useEffect)((function(){h!==x.query&&x.setQuery(h)}),[h]),Object(U.jsx)(l.a,{meta:{title:h||"Search",description:h?"".concat(w.length," results for ").concat(h," at Construct Hub"):"Search reusable components for your cloud application"},pageName:"search",children:Object(U.jsxs)(a.a,{direction:"column",maxW:"100vw",children:[Object(U.jsx)(r.a,{p:4,children:Object(U.jsx)(u.a,Object(c.a)({},x))}),Object(U.jsx)(o.a,{}),Object(U.jsxs)(r.a,{p:4,children:[Object(U.jsx)(a.a,{align:"center",justify:"space-between",pb:4,wrap:"wrap",children:Object(U.jsx)(I,{count:w.length,filtered:!!h,limit:N.a,offset:v})}),Object(U.jsx)(f.a,{language:null!==p&&void 0!==p?p:void 0,results:y}),Object(U.jsx)(E,{getPageUrl:L,limit:N.a,offset:v,pageLimit:P})]})]})})}}}]);
2
- //# sourceMappingURL=11.c3c4095a.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["hooks/useQueryParams/useQueryParams.ts","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/constants.ts","views/SearchResults/components/NextPage.tsx","views/SearchResults/components/PageControls.tsx","views/SearchResults/components/ShowingDetails.tsx","views/SearchResults/SearchResults.tsx"],"names":["useQueryParams","search","useLocation","useMemo","URLSearchParams","ArrowButton","Icon","icon","offset","getPageUrl","props","borderRadius","borderColor","colorScheme","color","h","w","mx","variant","undefined","as","Link","to","disabled","GoToPage","pageLimit","useState","toString","inputValue","setInputValue","push","useHistory","useEffect","align","onSubmit","e","preventDefault","parseInt","max","min","name","onChange","target","value","p","textAlign","type","ml","LIMIT","btnProps","children","rightIcon","ArrowForward","NextPage","nextPageUrl","PageControls","nextOffset","prevOffset","alignItems","pt","templateColumns","templateRows","colStart","justifySelf","justify","py","ChevronLeftIcon","ChevronRightIcon","Em","fontWeight","ShowingDetails","limit","count","filtered","first","last","SearchResults","queryParams","searchQuery","decodeURIComponent","get","QUERY_PARAMS","SEARCH_QUERY","languageQuery","LANGUAGE","searchAPI","useCatalogSearch","defaultQuery","defaultLanguage","val","result","toNum","OFFSET","useCatalogResults","query","language","results","page","getUrl","params","getSearchPath","q","length","setQuery","Page","meta","title","description","pageName","direction","maxW","CatalogSearch","pb","wrap","Results"],"mappings":"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","file":"static/js/11.c3c4095a.chunk.js","sourcesContent":["import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { 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 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","import { ArrowForwardIcon } from \"@chakra-ui/icons\";\nimport { Button } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NextPageProps {\n nextPageUrl?: string;\n}\n\nconst btnProps = {\n children: \"Next Page\",\n colorScheme: \"blue\",\n rightIcon: <ArrowForwardIcon color=\"white\" />,\n};\n\nexport const NextPage: FunctionComponent<NextPageProps> = ({ nextPageUrl }) => {\n if (!nextPageUrl) {\n return <Button {...btnProps} disabled />;\n }\n\n return <Button {...btnProps} as={Link} to={nextPageUrl} />;\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Flex, Grid, GridItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { GoToPage } from \"./GoToPage\";\nimport { NextPage } from \"./NextPage\";\n\nexport interface PageControlsProps {\n limit: number;\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n getPageUrl,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Grid\n alignItems=\"center\"\n pt={4}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <NextPage\n nextPageUrl={\n nextOffset ? getPageUrl({ offset: nextOffset }) : undefined\n }\n />\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <GoToPage\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface ShowingDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"em\" color=\"blue.500\" fontWeight=\"bold\">\n {children}\n </Text>\n);\n\nexport const ShowingDetails: FunctionComponent<ShowingDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n return (\n <Text>\n Displaying{\" \"}\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em> {filtered ? \"search results\" : \"constructs\"}.\n </Text>\n );\n};\n","import { Box, Divider, Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Results } from \"../../components/Results\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { getSearchPath } from \"../../util/url\";\nimport { PageControls } from \"./components/PageControls\";\nimport { ShowingDetails } from \"./components/ShowingDetails\";\nimport { LIMIT, SearchQueryParam } from \"./constants\";\n\nconst toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const SearchResults: FunctionComponent = () => {\n const queryParams = useQueryParams();\n\n const searchQuery = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languageQuery = queryParams.get(\n QUERY_PARAMS.LANGUAGE\n ) as Language | null;\n\n const searchAPI = useCatalogSearch({\n defaultQuery: searchQuery ?? undefined,\n defaultLanguage: languageQuery ?? undefined,\n });\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const { push } = useHistory();\n\n const { results, page, pageLimit } = useCatalogResults({\n query: searchQuery,\n offset,\n limit: LIMIT,\n language: languageQuery,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n query: (params.q ?? searchQuery) as string,\n language: languageQuery ?? undefined,\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, pageLimit, offset]);\n\n useEffect(() => {\n // Reflect changes to queryParam to search input (specifically for tag clicks)\n if (searchQuery !== searchAPI.query) {\n searchAPI.setQuery(searchQuery);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery]);\n\n return (\n <Page\n meta={{\n title: searchQuery || \"Search\",\n description: searchQuery\n ? `${results.length} results for ${searchQuery} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Flex direction=\"column\" maxW=\"100vw\">\n <Box p={4}>\n <CatalogSearch {...searchAPI} />\n </Box>\n <Divider />\n <Box p={4}>\n <Flex align=\"center\" justify=\"space-between\" pb={4} wrap=\"wrap\">\n <ShowingDetails\n count={results.length}\n filtered={!!searchQuery}\n limit={LIMIT}\n offset={offset}\n />\n </Flex>\n <Results language={languageQuery ?? undefined} results={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"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[9],{236:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(0),c=n(251),r={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(119),o=n(1),s=function(e){var t=e.children,n=e.meta,s=e.pageName,l=Object(i.b)(r[s]);Object(a.useEffect)((function(){l()}),[l]);var u=n.suffix,j=void 0===u||u,d=n.title,b=n.description,f=j?"".concat(d," - Construct Hub"):d;return Object(o.jsxs)(o.Fragment,{children:[Object(o.jsxs)(c.a,{children:[!1,Object(o.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(o.jsx)("meta",{charSet:"utf-8"}),Object(o.jsx)("title",{children:f}),Object(o.jsx)("meta",{content:f,property:"og:title"}),Object(o.jsx)("meta",{content:f,name:"twitter:title"}),Object(o.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(o.jsx)("meta",{content:b,name:"description"}),Object(o.jsx)("meta",{content:b,property:"og:description"}),Object(o.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},241:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var a=n(0),c=n(21),r=function(){var e=Object(c.h)().search;return Object(a.useMemo)((function(){return new URLSearchParams(e)}),[e])}},242:function(e,t,n){"use strict";n.d(t,"a",(function(){return b}));var a=n(5),c=n(0),r=n(21),i=n(109),o=n(14),s=n(241),l=i.d.TypeScript,u="preferred-language",j=function(e){return null!=e&&i.e.has(e)},d=function(e){if(j(e))return e;try{var t,n=null!==(t=localStorage.getItem(u))&&void 0!==t?t:"";if(j(n))return n}catch(a){}return l},b=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.updateUrl,n=e.updateSaved,i=Object(r.h)(),l=i.pathname,b=i.hash,f=Object(r.g)(),O=f.replace,m=Object(s.a)(),h=m.get(o.b.LANGUAGE),g=Object(c.useState)((function(){return d(h)})),v=Object(a.a)(g,2),x=v[0],p=v[1];Object(c.useEffect)((function(){j(h)&&h!==x&&p(h)}),[h]),Object(c.useEffect)((function(){h!==x&&t&&(m.set(o.b.LANGUAGE,x),O({pathname:l,hash:b,search:m.toString()}))}),[x,t]);var y=Object(c.useCallback)((function(e){if(p(e),n)try{localStorage.setItem(u,e)}catch(t){}}),[n]);return Object(c.useMemo)((function(){return[x,y]}),[x,y])}},252:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var a=new Set(["aws-cdk","aws","awscdk","cdk-construct","cdk","construct","constructs"])},256:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(225),c=n(109),r=n(1),i=function(e){var t=e.children,n=e.language,i=c.e.has(n),o=c.b[n],s=i?"Click to view documentation in ".concat(o):"Documentation support for ".concat(o," is coming soon!");return Object(r.jsx)(a.a,{hasArrow:!0,label:s,placement:"top-start",children:Object(r.jsx)("span",{children:t})})}},257:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(6),c=n(28),r=n(593),i=n(85),o=n(86),s=n(1),l=["children","language","value","label","zIndex"],u=function(e){var t=e.children,n=e.language,u=e.value,j=e.label,d=void 0===j?u:j,b=e.zIndex,f=Object(c.a)(e,l);return Object(s.jsx)(o.a,{"aria-label":"Tag: ".concat(d),to:Object(i.c)({query:"".concat(u),language:n}),zIndex:b,children:Object(s.jsx)(r.a,Object(a.a)(Object(a.a)({_hover:{textDecoration:"underline"}},f),{},{children:Object(s.jsx)(r.b,{children:t})}))})}},258:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(6),c=n(28),r=n(17),i=n(194),o=n(606),s=n(1),l=["date","format"],u=Object(r.a)((function(e,t){var n=e.date,r=e.format,u=Object(c.a)(e,l);return Object(s.jsx)(i.a,Object(a.a)(Object(a.a)({as:"time",dateTime:n.toISOString(),ref:t},u),{},{children:Object(o.a)(n,r)}))}));u.displayName="Time"},270:function(e,t,n){"use strict";var a;n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return Z})),function(e){e.Wide="wide"}(a||(a={}));var c=n(0),r=n(307),i=n(147),o=n(231),s=n(209),l=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.map((function(e){return'"'.concat(e.join(" "),'"')})).join(" ")},u=n(5),j=n(364),d=n(198),b=n(90),f=n(242),O=n(85),m=n(86),h=n(258),g=n(57),v=Object(g.a)("packageCard",["author","description","downloads","languages","published","title","version","comment","wideContainer"]),x=n(1),p=function(e){var t=e["data-testid"],n=e.icon,a=e.label,c=e.value;return Object(x.jsxs)(d.a,{"data-testid":t,fontSize:"xs",children:[n,n?" ":"",Object(x.jsx)("strong",{children:a})," ",c]})},y=function(){var e,t,n,a=Object(f.a)(),c=Object(u.a)(a,1)[0],r=Y(),i=r.author,o=r.metadata.date,s=r.version,l=r.name,d=Object(b.b)().data,g=null===d||void 0===d||null===(e=d.packages)||void 0===e||null===(t=e[l])||void 0===t||null===(n=t.downloads)||void 0===n?void 0:n.npm,y="string"===typeof i?i:i.name;return Object(x.jsxs)(x.Fragment,{children:[void 0!==g&&g>=10?Object(x.jsx)(p,{"data-testid":v.downloads,icon:Object(x.jsx)(j.a,{}),label:g.toLocaleString(),value:"Downloads"}):Object(x.jsx)(p,{"data-testid":v.version,label:"Version",value:s}),Object(x.jsx)(p,{"data-testid":v.published,label:"Published",value:Object(x.jsx)(h.a,{date:new Date(o),fontSize:"xs",format:"MMM dd, yyyy"})}),Object(x.jsx)(p,{"data-testid":v.author,label:"Author",value:Object(x.jsx)(m.a,{color:"blue.500",to:Object(O.c)({query:y,language:c}),children:y})})]})},w=n(207),S=n(225),C=n(230),k=n(218),A=n(33),P=n(66),D=function(){var e=Object(f.a)(),t=Object(u.a)(e,1)[0],n=Y(),a=n.comment,c=n.description,i=n.metadata.constructFramework,o=n.name,s=n.version,l=null===i||void 0===i?void 0:i.name,j=null===i||void 0===i?void 0:i.majorVersion;return Object(x.jsxs)(x.Fragment,{children:[Object(x.jsx)(r.b,{as:A.b,to:Object(O.a)({name:o,version:s,language:t}),children:Object(x.jsxs)(w.a,{align:"center",children:[l&&Object(x.jsx)(S.a,{hasArrow:!0,label:P.b[l].name+(void 0!==j?" v".concat(j):""),placement:"top",children:Object(x.jsx)(C.a,{alt:"".concat(P.b[l].name," icon"),h:5,mr:2,src:P.b[l].imgsrc,w:5,zIndex:1})}),Object(x.jsx)(k.a,{as:"h3",color:"blue.800","data-testid":v.title,fontSize:"md",fontWeight:"bold",wordBreak:"break-all",children:o})]})}),Object(x.jsx)(d.a,{color:"blue.800","data-testid":v.description,fontSize:"md",lineHeight:"tall",noOfLines:4,children:c||"No description available."}),a&&Object(x.jsxs)(d.a,{"data-testid":v.comment,fontSize:"md",lineHeight:"tall",noOfLines:4,children:[Object(x.jsxs)(d.a,{as:"span",color:"blue.500",fontSize:"md",fontWeight:"bold",lineHeight:"tall",children:["Editor's note:"," "]}),a]})]})},T={official:{imgsrc:"/assets/construct.png",label:"Official",color:"#ED3B00"},community:{imgsrc:"/assets/community.png",label:"Community",color:"#2F50FE"},highQuality:{imgsrc:"/assets/medal.png",label:"High Quality",color:"#1F02D4"}},I=function(){var e=Y().name,t=P.d.some((function(t){return e.includes(t)})),n=T[t?"official":"community"],a=n.imgsrc,c=n.color,r=n.label;return Object(x.jsxs)(o.a,{align:"center",direction:"row",spacing:2,children:[Object(x.jsx)(C.a,{alt:"".concat(r," icon"),src:a,w:4}),Object(x.jsx)(d.a,{color:c,fontWeight:"bold",children:r})]})},L=n(6),R=n(109),z=n(256),F={sm:5,md:6,lg:8},E=function(e){var t=e.isRounded,n=void 0!==t&&t,a=e.languages,c=e.name,r=e.size,i=void 0===r?"md":r,o=e.version,s=Object.keys(null!==a&&void 0!==a?a:{});return Object(x.jsx)(x.Fragment,{children:Object.entries(R.c).sort((function(e,t){var n=Object(u.a)(e,1)[0],a=Object(u.a)(t,1)[0];return R.a.indexOf(n)-R.a.indexOf(a)})).map((function(e){var t=Object(u.a)(e,2),a=t[0],r=t[1],l=a,j=l===R.d.TypeScript||s.includes(l),d=l===R.d.TypeScript||R.e.has(l);if(!j)return null;var b=r.name,f=r.icon,m=Object(x.jsx)(f,{"aria-label":"Supports ".concat(b),borderRadius:n?"50%":0,h:F[i],opacity:d?1:.2,w:F[i]});return Object(x.jsx)(z.a,{language:l,children:d?Object(x.jsx)(A.b,{"aria-label":"View package docs for ".concat(l),to:Object(O.a)({name:c,version:o,language:l}),children:m}):m},l)}))})},W=function(){var e=Y();return Object(x.jsx)(E,Object(L.a)(Object(L.a)({},e),{},{size:"sm"}))},M=n(18),U=n(252),H=n(257),N=function(){var e=Y(),t=e.keywords,n=e.name;return Object(x.jsx)(x.Fragment,{children:[P.d.some((function(e){return n.includes(e)}))?Object(x.jsx)(H.a,{label:"official",mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(M.a)((null!==t&&void 0!==t?t:[]).filter((function(e){return Boolean(e)&&!U.a.has(e)})).slice(0,3).map((function(e){return Object(x.jsx)(H.a,{mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))})},V="details",q="languages",K="tags",Q="heading",G=l([Q,Q,V],[Q,Q,V],[K,K,q]),_=l([Q],[q],[V]),B=function(){return Object(x.jsx)(r.a,{_hover:{"> article":{bg:"gray.50"}},children:Object(x.jsxs)(i.a,{as:"article",autoColumns:"1fr",autoRows:"auto",bg:"white",border:"base",borderRadius:"sm",boxShadow:"base",color:"gray.600","data-testid":v.wideContainer,gap:5,h:"100%",p:5,templateAreas:{base:_,md:G},w:"100%",children:[Object(x.jsx)(o.a,{gridArea:Q,spacing:2,children:Object(x.jsx)(D,{})}),Object(x.jsx)(o.a,{direction:"row",display:{base:"none",md:"initial"},gridArea:K,maxH:6,overflow:"hidden",children:Object(x.jsx)(N,{})}),Object(x.jsxs)(i.a,{alignItems:"start",alignSelf:"center",autoColumns:{base:"initial",md:"1fr"},autoRows:{base:"initial",md:"auto"},fontSize:"xs",gap:{base:0,md:1},gridArea:V,templateColumns:{base:"1fr 1fr",md:"initial"},templateRows:{base:"1fr 1fr",md:"initial"},children:[Object(x.jsx)(I,{}),Object(x.jsx)(y,{})]}),Object(x.jsxs)(o.a,{gridArea:q,spacing:{base:4,md:0},children:[Object(x.jsx)(s.a,{display:{md:"none"}}),Object(x.jsx)(o.a,{"data-testid":v.languages,direction:"row",spacing:2,children:Object(x.jsx)(W,{})})]})]})})},J=Object(c.createContext)(null),Y=function(){return Object(c.useContext)(J)},Z=function(e){var t=e.pkg,n=e.variant,c=void 0===n?a.Wide:n;return Object(x.jsx)(J.Provider,{value:t,children:c===a.Wide&&Object(x.jsx)(B,{})})}},304:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(6),c=n(205),r=n(33),i=n(1),o=function(e){var t=e.icon,n=e.offset,o=e.getPageUrl,s={"aria-label":"Page ".concat(n," link"),borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",icon:Object(i.jsx)(t,{color:"blue.500",h:5,w:5}),mx:2,h:10,w:10,variant:"outline"};return void 0!==n?Object(i.jsx)(c.a,Object(a.a)(Object(a.a)({},s),{},{as:r.b,to:o({offset:n})})):Object(i.jsx)(c.a,Object(a.a)(Object(a.a)({},s),{},{disabled:!0}))}},305:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(5),c=n(207),r=n(229),i=n(198),o=n(0),s=n(21),l=n(1),u=function(e){var t=e.pageLimit,n=e.offset,u=e.getPageUrl,j=Object(o.useState)((n+1).toString()),d=Object(a.a)(j,2),b=d[0],f=d[1],O=Object(s.g)().push;Object(o.useEffect)((function(){f((n+1).toString())}),[n]);return Object(l.jsxs)(c.a,{align:"center",as:"form",mx:2,onSubmit:function(e){e.preventDefault(),O(u({offset:parseInt(b)-1}))},children:[Object(l.jsx)(r.a,{colorScheme:"blue",h:10,max:t+1,min:1,name:"page",onChange:function(e){e.preventDefault(),f(e.target.value)},p:0,textAlign:"center",type:"number",value:b,w:10}),Object(l.jsxs)(i.a,{ml:2,w:"max-content",children:["of ",t+1]})]})}},306:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var a=25},607:function(e,t,n){"use strict";n.r(t),n.d(t,"SearchRedesign",(function(){return xe})),n.d(t,"default",(function(){return xe}));var a=n(147),c=n(236),r=n(231),i=n(218),o=n(87),s=n(18),l=n(5),u=n(0),j=n(222),d=n(198),b=n(602),f=n(207),O=n(587),m=n(205),h=n(1),g=function(e){var t=e.name,n=e.hint;return Object(h.jsxs)(f.a,{align:"center",children:[Object(h.jsx)(i.a,{as:"h4",size:"sm",w:"max-content",children:t}),n?Object(h.jsxs)(O.a,{colorScheme:"dark",placement:"top-end",strategy:"fixed",children:[Object(h.jsx)(O.g,{children:Object(h.jsx)(m.a,{"aria-label":"Hint: ".concat(t),icon:Object(h.jsx)(b.a,{h:4,w:4}),ml:2,px:0,py:0,size:"sm",variant:"ghost"})}),Object(h.jsxs)(O.e,{bg:"gray.700",color:"white",fontSize:"sm",shadow:"whiteAlpha.300",children:[Object(h.jsxs)(O.f,{children:["Hint: ",t]}),Object(h.jsx)(O.d,{}),Object(h.jsx)(O.b,{}),Object(h.jsx)(O.c,{children:Object(h.jsx)(d.a,{children:n})})]})]}):null]})},v=function(e){var t=e.hint,n=e.name,a=e.options,c=e.values,i=e.onValueChange,o=function(e){return function(){i(e)}};return Object(h.jsxs)(r.a,{spacing:2,children:[Object(h.jsx)(g,{hint:t,name:n}),a.map((function(e){var t=e.display,n=e.value;return Object(h.jsx)(j.a,{isChecked:c.includes(n),onChange:o(n),children:Object(h.jsx)(d.a,{color:"gray.600",fontSize:"sm",isTruncated:!0,children:t})},n)}))]})},x=function(){var e=Object(u.useState)([]),t=Object(l.a)(e,2),n=t[0],a=t[1];return Object(h.jsx)(v,{name:"Author",onValueChange:function(e){a(n.includes(e)?n.filter((function(t){return t!==e})):[].concat(Object(s.a)(n),[e]))},options:[{display:"Community",value:"community"},{display:"AWS",value:"aws"}],values:n})},p=n(4),y=n(6),w=n(66),S=n(94),C=n(361),k=n(614),A=function(e){var t=e.value,n=e.onValueChange,a=e.options,c=e.name,i=e.hint;return Object(h.jsxs)(r.a,{spacing:2,children:[Object(h.jsx)(g,{hint:i,name:c}),Object(h.jsx)(C.a,{onChange:n,value:t,children:Object(h.jsx)(r.a,{children:a.map((function(e){var t=e.display,n=e.value;return Object(h.jsx)(k.a,{value:n,children:Object(h.jsx)(d.a,{color:"gray.600",fontSize:"sm",isTruncated:!0,children:t})},n)}))})})]})},P=n(14),D=n(88),T=n(241),I=n(306),L=function(e){var t=parseInt(e);return"NaN"==="".concat(t)?0:t},R=Object(u.createContext)(void 0),z=function(){var e=Object(u.useContext)(R);if(!e)throw new Error("This hook must be called in a child of <SearchStateProvider />");return e},F=function(e){var t,n,a,c,r,i=e.children,o=Object(T.a)(),s=L(null!==(t=o.get(P.b.OFFSET))&&void 0!==t?t:"0"),l=decodeURIComponent(null!==(n=o.get(P.b.SEARCH_QUERY))&&void 0!==n?n:""),j=(r=o.get(P.b.LANGUAGES))?decodeURIComponent(r).split(","):[],d=null!==(a=o.get(P.b.SORT))&&void 0!==a?a:void 0,b=null!==(c=o.get(P.b.CDK_TYPE))&&void 0!==c?c:void 0,f=o.get(P.b.CDK_MAJOR),O=f?L(f):void 0,m=Object(D.a)({defaultCdkMajor:O,defaultCdkType:b,defaultLanguages:j,defaultQuery:l,defaultSort:d});return Object(u.useEffect)((function(){l!==m.query&&m.setQuery(l)}),[l]),Object(h.jsx)(R.Provider,{value:{limit:I.a,offset:s,query:l,searchAPI:m},children:i})},E=function(){var e,t=z().searchAPI,n=t.cdkType,a=t.setCdkType,c=t.cdkMajor,r=t.setCdkMajor,i=Object(S.b)(),o=Object(u.useMemo)((function(){var e=i.constructFrameworks,t=Object.entries(e).reduce((function(e,t){var n=Object(l.a)(t,2),a=n[0],c=n[1];return c.pkgCount<1?e:Object(y.a)(Object(y.a)({},e),{},Object(p.a)({},a,Object(y.a)({display:w.a[a],value:a},c)))}),{});return Object.keys(t).length?t:void 0}),[i]),j=Object(u.useMemo)((function(){var e;if(o&&n){var t=null===(e=o[n])||void 0===e?void 0:e.majorVersions;if(t)return Object(s.a)(t).sort((function(e,t){return e-t})).map((function(e){return{value:e.toString(),display:"".concat(w.a[n]," v").concat(e)}}))}}),[o,n]);if(!o)return null;return Object(h.jsxs)(h.Fragment,{children:[Object(h.jsx)(A,{hint:"Constructs support distinct output types: AWS CDK libraries output Cloudformation Templates, CDK8s libraries output Kubernetes manifests, and CDKtf libraries output Terraform Configuration. The Construct Hub attempts to detect the output type of each library, but results are not guaranteed to be completely accurate.",name:"CDK Type",onValueChange:function(e){var t=e;r(void 0),a(e?t:void 0)},options:[{display:"Any CDK Type",value:""}].concat(Object(s.a)(Object.values(o))),value:null!==n&&void 0!==n?n:""}),!!(j&&j.length>1)&&Object(h.jsx)(A,{hint:"Allows you to filter by a major version of your selected CDK Type: (".concat(w.a[n],")"),name:"CDK Major Version",onValueChange:function(e){if(e){var t=parseInt(e,10);r(t)}else r(void 0)},options:[{display:"Any Major Version",value:""}].concat(Object(s.a)(j)),value:null!==(e=null===c||void 0===c?void 0:c.toString())&&void 0!==e?e:""})]})},W=n(109),M=Object.entries(W.b).filter((function(e){var t=Object(l.a)(e,1)[0];return W.e.has(t)})).map((function(e){var t=Object(l.a)(e,2),n=t[0];return{display:t[1],value:n}})),U=function(){var e=z().searchAPI,t=e.languages,n=e.setLanguages;return Object(h.jsx)(v,{hint:"Select one or more programming languages to filter by. Results will match at least one of the selected languages. If no languages are selected, results will not be filtered by langauges.",name:"Programming Language",onValueChange:function(e){var a=e;n(t.includes(a)?t.filter((function(e){return e!==a})):[].concat(Object(s.a)(t),[a]))},options:M,values:t})},H="5.75rem",N=function(){return Object(h.jsx)(o.a,{borderRadius:"none",boxShadow:"none",display:{base:"none",md:"flex"},maxH:"calc(100vh - ".concat(H," - 1.25rem)"),maxW:"23rem",minW:"100%",overflow:"hidden auto",p:4,pos:"sticky",top:H,zIndex:"docked",children:Object(h.jsxs)(r.a,{color:"blue.800",h:"max-content",spacing:6,top:4,children:[Object(h.jsx)(i.a,{as:"h3",size:"sm",children:"Filters"}),Object(h.jsx)(E,{}),Object(h.jsx)(U,{}),Object(h.jsx)(x,{})]})})},V=n(194),q=n(21),K=n(216),Q=n(199),G=n(270),_=Object(p.a)({},G.b.Wide,(function(e){var t=e.items;return Object(h.jsx)(r.a,{spacing:4,children:t.map((function(e){return Object(h.jsx)(G.a,{pkg:e,variant:G.b.Wide},"".concat(e.name,"-").concat(e.version))}))})})),B=Object(u.memo)((function(e){var t=e.cardView,n=void 0===t?G.b.Wide:t,a=e.items;if(e.loading||!a)return Object(h.jsx)(K.a,{children:Object(h.jsx)(Q.a,{size:"xl"})});var c=_[n];return Object(h.jsx)(c,{items:a})}));B.displayName="PackageList";var J,Y=n(70),Z=n(121),X=n(85),$=n(363),ee=n(308),te=n(304),ne=n(305),ae=function(e){var t=e.offset,n=e.getPageUrl,a=e.pageLimit,c=t<a?t+1:void 0,i=t>0?t-1:void 0;return Object(h.jsxs)(r.a,{align:"center",direction:"row",justify:"space-between",maxW:"18rem",mx:"auto",spacing:4,w:"full",children:[Object(h.jsx)(te.a,{getPageUrl:n,icon:$.a,offset:i}),Object(h.jsx)(ne.a,{getPageUrl:n,offset:t,pageLimit:a}),Object(h.jsx)(te.a,{getPageUrl:n,icon:ee.a,offset:c})]})},ce=function(e){var t=e.children;return Object(h.jsx)(d.a,{as:"strong",color:"gray.700",children:t})},re=function(e){var t=e.limit,n=e.offset,a=e.count,c=e.filtered,r=e.query,i=t*n,o=i+t;return Object(h.jsxs)(d.a,{children:["Displaying"," ",Object(h.jsxs)(ce,{children:[a?i+1:a," - ",o>a?a:o]})," ","of ",Object(h.jsx)(ce,{children:a})," ",c?"search results":"constructs",r&&Object(h.jsxs)(h.Fragment,{children:[" for ",Object(h.jsx)(ce,{children:r})]})]})},ie=n(212),oe=n(200),se=n(153),le=n(232),ue=n(44),je=n(51),de=(J={},Object(p.a)(J,je.a.NameAsc,"A-Z"),Object(p.a)(J,je.a.NameDesc,"Z-A"),Object(p.a)(J,je.a.PublishDateAsc,"Oldest first"),Object(p.a)(J,je.a.PublishDateDesc,"Newest first"),Object(p.a)(J,je.a.DownloadsDesc,"Most downloads"),Object(p.a)(J,je.a.DownloadsAsc,"Least downloads"),J),be=function(){var e=z().searchAPI,t=e.sort,n=e.setSort;return Object(h.jsx)(A,{hint:"Sets the order of search results",name:"Sorted By",onValueChange:function(e){n(e||void 0)},options:[{display:"Relevance",value:""}].concat(Object(s.a)(Object.entries(de).map((function(e){var t=Object(l.a)(e,2),n=t[0];return{display:t[1],value:n}})))),value:null!==t&&void 0!==t?t:""})},fe=function(){var e=Object(oe.a)();return Object(h.jsxs)(h.Fragment,{children:[Object(h.jsx)(se.a,{colorScheme:"blue",display:{md:"none"},onClick:e.onOpen,rightIcon:Object(h.jsx)(ie.a,{}),variant:"link",children:"Sorting and Filters"}),Object(h.jsxs)(le.a,Object(y.a)(Object(y.a)({},e),{},{placement:"bottom",children:[Object(h.jsx)(ue.h,{}),Object(h.jsxs)(le.b,{color:"blue.800",children:[Object(h.jsx)(ue.g,{children:"Sorting and Filters"}),Object(h.jsx)(ue.c,{}),Object(h.jsx)(ue.b,{children:Object(h.jsxs)(r.a,{color:"blue.800",pb:4,spacing:4,children:[Object(h.jsx)(be,{}),Object(h.jsx)(E,{}),Object(h.jsx)(U,{}),Object(h.jsx)(x,{})]})})]})]}))]})},Oe=n(223),me=function(){var e=z().searchAPI,t=e.sort,n=e.setSort,a=t?de[t]:"Relevance";return Object(h.jsxs)(f.a,{align:"center",children:[Object(h.jsx)(d.a,{children:"Sorted by"}),Object(h.jsxs)(Oe.a,{children:[Object(h.jsx)(Oe.b,{as:se.a,color:"blue.500",ml:2,pl:2,pr:2,py:1,rightIcon:Object(h.jsx)(ie.a,{}),variant:"link",children:a}),Object(h.jsxs)(Oe.f,{minW:"180",zIndex:"sticky",children:[Object(h.jsx)(Oe.e,{onClick:function(){return n(void 0)},children:"Relevance"},"Relevance"),Object.entries(de).map((function(e){var t=Object(l.a)(e,2),a=t[0],c=t[1];return Object(h.jsx)(Oe.e,{onClick:function(){return n(a)},children:c},a)}))]})]})]})},he=function(){var e=Object(u.useRef)(!0),t=Object(q.g)().push,n=z(),a=n.query,i=n.searchAPI,o=n.offset,s=n.limit,l=i.languages,j=i.sort,d=i.cdkType,b=i.cdkMajor,f=i.onSearch,O=Object(Z.a)({offset:o,limit:s,query:a,languages:l,cdkMajor:b,cdkType:d,sort:j}),m=O.page,g=O.pageLimit,v=O.results,x=function(e){var t,n;return Object(X.c)({cdkMajor:b,cdkType:d,query:null!==(t=e.q)&&void 0!==t?t:a,languages:l,sort:j,offset:null!==(n=e.offset)&&void 0!==n?n:o})};return Object(u.useEffect)((function(){v.length&&(o<0||o>g)&&t(x(o<0?{offset:0}:{offset:g}))}),[v,o,g]),Object(u.useEffect)((function(){e.current?e.current=!1:f({replace:!0})}),[j,l,d,b]),Object(h.jsx)(c.a,{meta:{title:a||"Search",description:a?"".concat(v.length," results for ").concat(a," at Construct Hub"):"Search reusable components for your cloud application"},pageName:"search",children:Object(h.jsxs)(r.a,{direction:"column",maxW:"100vw",pb:4,px:4,spacing:4,children:[Object(h.jsx)(Y.a,{bg:"white",onChange:i.onQueryChange,onSubmit:i.onSubmit,value:i.query}),Object(h.jsxs)(r.a,{align:{base:"start",lg:"center"},direction:{base:"column-reverse",lg:"row"},justify:{base:"initial",lg:"space-between"},spacing:4,children:[Object(h.jsx)(re,{count:v.length,filtered:!!a,limit:s,offset:o,query:a}),Object(h.jsx)(V.a,{display:{base:"none",md:"initial"},children:Object(h.jsx)(me,{})}),Object(h.jsx)(V.a,{display:{md:"none"},children:Object(h.jsx)(fe,{})})]}),Object(h.jsx)(B,{items:m}),Object(h.jsx)(V.a,{w:"full",children:Object(h.jsx)(ae,{getPageUrl:x,offset:o,pageLimit:g})})]})})},ge=n(57),ve=Object(ge.a)("searchRedesign",["page"]),xe=function(){return Object(h.jsx)(F,{children:Object(h.jsx)(c.a,{meta:{title:"Search - Construct Hub",description:"Search Construct Libraries for AWS CDK, CDK8s, and CDKtf"},pageName:"search",children:Object(h.jsxs)(a.a,{"data-testid":ve.page,gap:4,h:"full",maxW:"100%",px:{base:0,md:6},py:6,templateColumns:{base:"1fr",md:"auto 1fr"},templateRows:"1fr",children:[Object(h.jsx)(N,{}),Object(h.jsx)(he,{})]})})})}}}]);
2
- //# sourceMappingURL=9.e8c984d8.chunk.js.map