construct-hub 0.3.154 → 0.3.155

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