construct-hub 0.4.64 → 0.4.67

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"static/js/51.6bc28449.chunk.js","mappings":"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","sources":["views/Search/constants.ts","views/Search/FilterHeading.tsx","views/Search/testIds.ts","views/Search/RadioFilter.tsx","views/Search/util.ts","views/Search/useSearchParam.ts","views/Search/useUpdateSearchParam.ts","views/Search/CDKFilter.tsx","views/Search/CheckboxFilter.tsx","views/Search/KeywordsFilter.tsx","views/Search/LanguageFilter.tsx","views/Search/TagFilter.tsx","views/Search/FilterPanel.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","views/Search/ArrowButton.tsx","views/Search/GoToPage.tsx","views/Search/PageControls.tsx","views/Search/SearchBar.tsx","views/Search/SearchDetails.tsx","views/Search/SortFilter.tsx","views/Search/SortAndFilterDrawer.tsx","views/Search/SortedBy.tsx","views/Search/SearchResults.tsx","views/Search/Search.tsx"],"sourcesContent":["import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport type { QueryParamKey } from \"../../constants/url\";\nimport { eventName } from \"../../contexts/Analytics\";\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\",\n [CatalogSearchSort.PublishDateDesc]: \"Recently updated\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n\nconst searchEvent: typeof eventName = (...e) => eventName(\"Search\", ...e);\n\nexport const SEARCH_ANALYTICS = {\n FILTERS: searchEvent(\"Filters\"),\n RESULTS: searchEvent(\"Results\"),\n SEARCH: searchEvent(\"Search\"),\n SORT: searchEvent(\"Sort\"),\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\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\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=\"h3\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement={placement} strategy=\"fixed\">\n <PopoverTrigger>\n <Flex\n aria-label={`Hint: ${name}`}\n as=\"button\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Popover\")}\n ml={2}\n >\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 { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\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 const dataEvent = eventName(\n SEARCH_ANALYTICS.FILTERS,\n name,\n \"Filter\",\n display\n );\n return (\n <Radio data-event={dataEvent} key={value} value={value}>\n <Text\n color=\"textTertiary\"\n data-event={dataEvent}\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n );\n })}\n </Stack>\n </RadioGroup>\n </Stack>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\n\nexport const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseQueryArray = <T extends string>(\n queryString: string | null\n) => {\n if (!queryString) return [];\n\n return decodeURIComponent(queryString).split(\",\") as T[];\n};\n\nconst getParamFromUrl = (key: string) => {\n if (typeof window === \"undefined\") return null;\n const queryParams = new URL(window.location.href).searchParams;\n return queryParams.get(key);\n};\n\nexport const getSearchUrlParams = () => {\n return {\n query: getParamFromUrl(QUERY_PARAMS.SEARCH_QUERY) ?? \"\",\n keywords: parseQueryArray(getParamFromUrl(QUERY_PARAMS.KEYWORDS)),\n cdkType: (getParamFromUrl(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined,\n cdkMajor: (() => {\n const cdkMajorParam = getParamFromUrl(QUERY_PARAMS.CDK_MAJOR);\n return cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n })(),\n languages: parseQueryArray(\n getParamFromUrl(QUERY_PARAMS.LANGUAGES)\n ) as Language[],\n offset: toNum(getParamFromUrl(QUERY_PARAMS.OFFSET) ?? \"\"),\n sort:\n (getParamFromUrl(QUERY_PARAMS.SORT) as CatalogSearchSort) ?? undefined,\n tags: parseQueryArray(getParamFromUrl(QUERY_PARAMS.TAGS)),\n };\n};\n","import { useMemo } 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 { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { parseQueryArray, toNum } from \"./util\";\n\nconst useSearchParam = <T = string | null>(\n key: string,\n transform?: (param: string | null) => T\n): T => {\n const queryParams = useQueryParams();\n const qp = queryParams.get(key);\n\n return useMemo(\n () => (transform ? transform(qp) : (qp as unknown as T)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [qp]\n );\n};\n\nexport const useCdkType = () => {\n const cdkType: CDKType | undefined =\n useSearchParam(QUERY_PARAMS.CDK_TYPE) ?? undefined;\n\n return cdkType;\n};\n\nexport const useCdkMajor = () => {\n const cdkMajor: number | undefined = useSearchParam(\n QUERY_PARAMS.CDK_MAJOR,\n (p) => (p ? toNum(p) : undefined)\n );\n\n return cdkMajor;\n};\n\nexport const useKeywords = () => {\n const keywords: string[] = useSearchParam(\n QUERY_PARAMS.KEYWORDS,\n parseQueryArray\n );\n\n return keywords;\n};\n\nexport const useLanguages = () => {\n const languages: Language[] = useSearchParam(\n QUERY_PARAMS.LANGUAGES,\n parseQueryArray\n ) as Language[];\n\n return languages;\n};\n\nexport const useOffset = () => {\n const offset = useSearchParam(QUERY_PARAMS.OFFSET, (o) => toNum(o ?? \"\"));\n return offset;\n};\n\nexport const useSearchQuery = () => {\n const query: string = useSearchParam(QUERY_PARAMS.SEARCH_QUERY) ?? \"\";\n return query;\n};\n\nexport const useSort = () => {\n const sort: CatalogSearchSort | undefined =\n useSearchParam(QUERY_PARAMS.SORT) ?? undefined;\n return sort;\n};\n\nexport const useTags = () => {\n const tags: string[] = useSearchParam(QUERY_PARAMS.TAGS, parseQueryArray);\n return tags;\n};\n","import { useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { getSearchPath } from \"../../util/url\";\nimport { getSearchUrlParams } from \"./util\";\n\nexport const useUpdateSearchParam = () => {\n const { push } = useHistory();\n\n return useCallback(\n (p?: Partial<Parameters<typeof getSearchPath>[0]>) => {\n const { offset, ...params } = p ?? {};\n\n push(\n getSearchPath({\n ...getSearchUrlParams(),\n ...params,\n offset: offset ?? 0,\n })\n );\n },\n [push]\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 testIds from \"./testIds\";\nimport { useCdkMajor, useCdkType } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\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 = useCdkType();\n const cdkMajor = useCdkMajor();\n\n const updateSearch = useUpdateSearchParam();\n\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 updateSearch({ cdkType: type ? cdk : undefined, cdkMajor: undefined });\n };\n\n const onCdkMajorChange = (major: string) => {\n let majorNum: number | undefined = undefined;\n\n if (major) {\n majorNum = parseInt(major, 10);\n }\n\n updateSearch({ cdkMajor: 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 { clickEvent, eventName, useAnalytics } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\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=\"textTertiary\"\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 const { trackCustomEvent } = useAnalytics();\n\n const getOnChange = (item: CheckboxOption) => () => {\n trackCustomEvent(\n clickEvent({\n name: eventName(SEARCH_ANALYTICS.FILTERS, name, \"Filter\", item.display),\n })\n );\n onValueChange(item.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)}\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)}\n />\n ))}\n </Stack>\n </Collapse>\n )}\n </Stack>\n {isExpandible && (\n <Flex align=\"start\" mt={1}>\n <Button\n color=\"textTertiary\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Show More\")}\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 testIds from \"./testIds\";\nimport { useKeywords } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const KeywordsFilter: FunctionComponent = () => {\n const keywords = useKeywords();\n const keywordMap = useSearchContext()!.keywords;\n const updateSearch = useUpdateSearchParam();\n\n const onKeywordChange = (keyword: string) => {\n updateSearch({\n keywords: 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 testIds from \"./testIds\";\nimport { useLanguages } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\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 = useLanguages();\n\n const updateSearch = useUpdateSearchParam();\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n updateSearch({\n languages: 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, useCallback, useMemo } from \"react\";\nimport { PackageTagConfig, TagGroupConfig } from \"../../api/config\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useTags } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\ninterface FilterGroup extends Partial<TagGroupConfig> {\n id: string;\n tags: PackageTagConfig[];\n}\ninterface FilterGroups {\n [group: string]: FilterGroup;\n}\n\n/**\n * Creates a plain object map of FilterGroups keyed by group id\n */\nexport const mapTagsToFilterGroups = (\n packageTags: PackageTagConfig[],\n tagGroupsMap: Map<string, TagGroupConfig>\n): FilterGroups => {\n return packageTags.reduce(\n (accum: FilterGroups, tag: PackageTagConfig): FilterGroups => {\n const groupIdOrName = tag.searchFilter?.groupBy;\n const customGroup = groupIdOrName\n ? tagGroupsMap.get(groupIdOrName)\n : undefined;\n\n if (groupIdOrName && customGroup) {\n const entry = accum[groupIdOrName];\n if (entry) {\n entry.tags = [...entry.tags, tag];\n return accum;\n }\n\n return {\n ...accum,\n [groupIdOrName]: {\n ...customGroup,\n tags: [tag],\n },\n };\n }\n\n if (groupIdOrName) {\n return {\n ...accum,\n [groupIdOrName]: {\n id: groupIdOrName,\n tags: [...(accum?.[groupIdOrName]?.tags ?? []), tag],\n },\n };\n }\n return accum;\n },\n {}\n );\n};\n\nexport const TagFilter: FunctionComponent = () => {\n const packageTags = useConfigValue(\"packageTags\");\n const packageTagGroups = useConfigValue(\"packageTagGroups\");\n\n const tagFilterGroups: FilterGroups = useMemo(() => {\n const tagGroupsMap = new Map<string, TagGroupConfig>();\n packageTagGroups?.forEach((group) => {\n tagGroupsMap.set(group.id, group);\n });\n\n const filterableTags =\n packageTags?.filter((tag) => Boolean(tag.searchFilter)) ?? [];\n\n return mapTagsToFilterGroups(filterableTags, tagGroupsMap);\n }, [packageTags, packageTagGroups]);\n\n const tags = useTags();\n const updateSearch = useUpdateSearchParam();\n\n const onTagsChange = (tag: string) => {\n updateSearch({\n tags: tags.includes(tag) ? tags.filter((t) => t !== tag) : [...tags, tag],\n });\n };\n\n const getOnRadioTagChange = useCallback(\n (groupName: string) => {\n const groupTags = new Set(\n (tagFilterGroups[groupName]?.tags ?? []).map(({ id }) => id)\n );\n\n return (tag: string) => {\n const filteredTags = tags.filter((t) => !groupTags.has(t));\n\n updateSearch({\n tags: tag ? [...filteredTags, tag] : filteredTags,\n });\n };\n },\n [tagFilterGroups, tags, updateSearch]\n );\n\n return (\n <>\n {Object.values(tagFilterGroups).map(\n ({ filterType, id, label, tooltip, tags: tagItems }) => {\n const sharedProps = {\n hint: tooltip,\n name: label ?? id,\n options: tagItems.map((tag) => {\n return {\n display: tag.searchFilter!.display,\n value: tag.id,\n };\n }),\n };\n\n if (filterType === \"radio\") {\n return (\n <RadioFilter\n {...sharedProps}\n key={id}\n onValueChange={getOnRadioTagChange(id)}\n options={[\n { display: `Any ${sharedProps.name}`, value: \"\" },\n ...sharedProps.options,\n ]}\n value={tagItems.find((t) => tags.includes(t.id))?.id ?? \"\"}\n />\n );\n }\n\n return (\n <CheckboxFilter\n {...sharedProps}\n key={id}\n onValueChange={onTagsChange}\n values={tags}\n />\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=\"sm\"\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=\"textPrimary\" h=\"max-content\" spacing={4} top={4}>\n <Heading as=\"h2\" 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 { ExtendedCatalogPackage } from \"../../api/catalog-search\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n \"data-event\"?: string;\n items: ExtendedCatalogPackage[];\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 \"data-event\": dataEvent,\n cardView = PackageCardType.Wide,\n items,\n loading,\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 data-event={dataEvent} 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 \"data-event\": dataEvent,\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n data-event={dataEvent}\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\";\n\nexport interface ArrowButtonProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n label: string;\n onClick?: () => void;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: Icon,\n label,\n onClick,\n}) => {\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-event\": dataEvent,\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 return <IconButton {...props} disabled={!onClick} onClick={onClick} />;\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 { clickEvent, useAnalytics } from \"../../contexts/Analytics\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport interface GoToPageProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n pageLimit,\n offset,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const { trackCustomEvent } = useAnalytics();\n const [inputValue, setInputValue] = useState((offset + 1).toString());\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 updateSearch({ offset: parseInt(inputValue) - 1 });\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n aria-label=\"Jump to page\"\n colorScheme=\"brand\"\n data-testid={dataTestid}\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n onFocus={() => {\n if (dataEvent) {\n trackCustomEvent(clickEvent({ name: dataEvent }));\n }\n }}\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 { eventName } from \"../../contexts/Analytics\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { GoToPage } from \"./GoToPage\";\nimport testIds from \"./testIds\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const goForward =\n offset < pageLimit ? () => updateSearch({ offset: offset + 1 }) : undefined;\n const goBack =\n offset > 0 ? () => updateSearch({ offset: 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-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Previous Page\")}\n data-testid={testIds.prevPage}\n icon={ChevronLeftIcon}\n label=\"Previous page button\"\n onClick={goBack}\n />\n <GoToPage\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Go to Page\")}\n data-testid={testIds.goToPage}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Next Page\")}\n data-testid={testIds.nextPage}\n icon={ChevronRightIcon}\n label=\"Next page button\"\n onClick={goForward}\n />\n </Stack>\n );\n};\n","import { FunctionComponent, useState } from \"react\";\nimport { SearchBar as SearchBarComponent } from \"../../components/SearchBar\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { useSearchQuery } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SearchBar: FunctionComponent = () => {\n const query = useSearchQuery();\n const updateSearch = useUpdateSearchParam();\n\n const [value, setValue] = useState(query ?? \"\");\n\n return (\n <SearchBarComponent\n bg=\"bgSecondary\"\n data-event={SEARCH_ANALYTICS.SEARCH}\n onChange={(e) => setValue(e.target.value)}\n onSubmit={(e) => {\n e.preventDefault();\n\n updateSearch({\n query: value,\n sort: undefined,\n });\n }}\n value={value}\n />\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=\"textSecondary\">\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 { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SortFilter: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const onSortChange = (newSort: string) => {\n updateSearch({\n sort: newSort ? (newSort as CatalogSearchSort) : undefined,\n });\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=\"brand\"\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=\"textPrimary\" maxH=\"full\">\n <DrawerHeader borderBottom=\"base\">Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"textPrimary\" 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 { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS, SORT_RENDER_MAP } from \"./constants\";\nimport testIds from \"./testIds\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SortedBy: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\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=\"link\"\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Menu\")}\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-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", \"Relevance\")}\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => updateSearch({ sort: undefined })}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", display)}\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => updateSearch({ sort: 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 } from \"react\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { LIMIT, SEARCH_ANALYTICS } from \"./constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchBar } from \"./SearchBar\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\nimport {\n useCdkType,\n useCdkMajor,\n useKeywords,\n useLanguages,\n useOffset,\n useSearchQuery,\n useSort,\n useTags,\n} from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SearchResults: FunctionComponent = () => {\n const updateSearch = useUpdateSearchParam();\n\n const offset = useOffset();\n const query = useSearchQuery();\n const keywords = useKeywords();\n const languages = useLanguages();\n const cdkMajor = useCdkMajor();\n const cdkType = useCdkType();\n const sort = useSort();\n const tags = useTags();\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit: LIMIT,\n query,\n keywords,\n languages,\n cdkMajor,\n cdkType,\n sort,\n tags,\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 updateSearch({ offset: 0 });\n } else {\n // Offset is too large, just take last page\n updateSearch({ offset: pageLimit });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\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\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 data-event={SEARCH_ANALYTICS.RESULTS} items={page} />\n\n <Box w=\"full\">\n <PageControls offset={offset} pageLimit={pageLimit} />\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 testIds from \"./testIds\";\n\nexport const Search: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description: \"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 );\n};\n"],"names":["SORT_RENDER_MAP","CatalogSearchSort","searchEvent","e","eventName","SEARCH_ANALYTICS","FILTERS","RESULTS","SEARCH","SORT","FilterHeading","name","hint","placement","useBreakpointValue","base","md","align","mb","as","size","w","colorScheme","strategy","ml","h","bg","borderRadius","color","fontSize","mx","shadow","createTestIds","RadioFilter","dataTestid","checkedValue","value","onValueChange","options","spacing","onChange","map","display","dataEvent","testIds","filterItem","isTruncated","toNum","val","result","parseInt","parseQueryArray","queryString","decodeURIComponent","split","getParamFromUrl","key","window","URL","location","href","searchParams","get","useSearchParam","transform","qp","useQueryParams","useMemo","useCdkType","QUERY_PARAMS","undefined","useCdkMajor","p","useKeywords","useLanguages","useSearchQuery","useSort","useTags","useUpdateSearchParam","push","useHistory","useCallback","offset","params","getSearchPath","query","keywords","cdkType","cdkMajor","cdkMajorParam","languages","sort","tags","getSearchUrlParams","CDKFilter","updateSearch","searchAPI","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","Object","entries","reduce","opts","meta","pkgCount","CDKTYPE_NAME_MAP","keys","length","majorsOptions","majorVersions","a","b","toString","cdkTypeFilter","type","values","cdkVersionFilter","major","majorNum","CheckboxItem","isDisabled","disabledHint","isChecked","hasArrow","label","CheckboxFilter","initialItemCount","checkedValues","collapse","useDisclosure","trackCustomEvent","useAnalytics","getOnChange","item","clickEvent","alwaysShow","showWhenExpanded","slice","isExpandible","direction","mt","includes","animateOpacity","in","isOpen","unmountOnExit","fontWeight","leftIcon","onClick","onToggle","textAlign","variant","KeywordsFilter","keywordMap","keywordOptions","baseOptions","filter","keyword","keywordsNotInOptions","k","some","opt","languagesFilter","languageOptions","LANGUAGE_NAME_MAP","TEMP_SUPPORTED_LANGUAGES","l1","l2","LanguageFilter","lang","language","l","TagFilter","packageTags","useConfigValue","packageTagGroups","tagFilterGroups","tagGroupsMap","Map","forEach","group","set","id","accum","tag","groupIdOrName","searchFilter","groupBy","customGroup","entry","mapTagsToFilterGroups","Boolean","onTagsChange","t","getOnRadioTagChange","groupName","groupTags","Set","filteredTags","has","filterType","tooltip","tagItems","sharedProps","find","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxH","maxW","minW","overflow","pos","top","zIndex","listViews","PackageCardType","items","pkg","PackageCard","version","PackageList","memo","cardView","loading","View","displayName","ArrowButton","Icon","icon","props","borderColor","disabled","GoToPage","pageLimit","useState","inputValue","setInputValue","useEffect","onSubmit","preventDefault","max","min","target","onFocus","PageControls","goForward","goBack","justify","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","SearchBar","setValue","Em","children","Count","first","count","last","SearchDetails","limit","filtered","hasResults","searchDetails","SortFilter","newSort","SortAndFilterDrawer","drawer","onOpen","rightIcon","borderBottom","pb","SortedBy","selected","Button","sortButton","pl","pr","py","sortDropdown","sortItem","SearchResults","o","useCatalogResults","page","results","scrollTo","Page","title","description","pageName","px","lg","Search","gap","templateColumns","templateRows"],"sourceRoot":""}
1
+ {"version":3,"file":"static/js/51.3152a56e.chunk.js","mappings":"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","sources":["views/Search/constants.ts","views/Search/FilterHeading.tsx","views/Search/testIds.ts","views/Search/RadioFilter.tsx","views/Search/util.ts","views/Search/useSearchParam.ts","views/Search/useUpdateSearchParam.ts","views/Search/CDKFilter.tsx","views/Search/CheckboxFilter.tsx","views/Search/KeywordsFilter.tsx","views/Search/LanguageFilter.tsx","views/Search/TagFilter.tsx","views/Search/FilterPanel.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","views/Search/ArrowButton.tsx","views/Search/GoToPage.tsx","views/Search/PageControls.tsx","views/Search/SearchBar.tsx","views/Search/SearchDetails.tsx","views/Search/SortFilter.tsx","views/Search/SortAndFilterDrawer.tsx","views/Search/SortedBy.tsx","views/Search/SearchResults.tsx","views/Search/Search.tsx"],"sourcesContent":["import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport type { QueryParamKey } from \"../../constants/url\";\nimport { eventName } from \"../../contexts/Analytics\";\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\",\n [CatalogSearchSort.PublishDateDesc]: \"Recently updated\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n\nconst searchEvent: typeof eventName = (...e) => eventName(\"Search\", ...e);\n\nexport const SEARCH_ANALYTICS = {\n FILTERS: searchEvent(\"Filters\"),\n RESULTS: searchEvent(\"Results\"),\n SEARCH: searchEvent(\"Search\"),\n SORT: searchEvent(\"Sort\"),\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\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\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=\"h3\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement={placement} strategy=\"fixed\">\n <PopoverTrigger>\n <Flex\n aria-label={`Hint: ${name}`}\n as=\"button\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Popover\")}\n ml={2}\n >\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 { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\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 const dataEvent = eventName(\n SEARCH_ANALYTICS.FILTERS,\n name,\n \"Filter\",\n display\n );\n return (\n <Radio data-event={dataEvent} key={value} value={value}>\n <Text\n color=\"textTertiary\"\n data-event={dataEvent}\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n );\n })}\n </Stack>\n </RadioGroup>\n </Stack>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\n\nexport const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseQueryArray = <T extends string>(\n queryString: string | null\n) => {\n if (!queryString) return [];\n\n return decodeURIComponent(queryString).split(\",\") as T[];\n};\n\nconst getParamFromUrl = (key: string) => {\n if (typeof window === \"undefined\") return null;\n const queryParams = new URL(window.location.href).searchParams;\n return queryParams.get(key);\n};\n\nexport const getSearchUrlParams = () => {\n return {\n query: getParamFromUrl(QUERY_PARAMS.SEARCH_QUERY) ?? \"\",\n keywords: parseQueryArray(getParamFromUrl(QUERY_PARAMS.KEYWORDS)),\n cdkType: (getParamFromUrl(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined,\n cdkMajor: (() => {\n const cdkMajorParam = getParamFromUrl(QUERY_PARAMS.CDK_MAJOR);\n return cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n })(),\n languages: parseQueryArray(\n getParamFromUrl(QUERY_PARAMS.LANGUAGES)\n ) as Language[],\n offset: toNum(getParamFromUrl(QUERY_PARAMS.OFFSET) ?? \"\"),\n sort:\n (getParamFromUrl(QUERY_PARAMS.SORT) as CatalogSearchSort) ?? undefined,\n tags: parseQueryArray(getParamFromUrl(QUERY_PARAMS.TAGS)),\n };\n};\n","import { useMemo } 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 { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { parseQueryArray, toNum } from \"./util\";\n\nconst useSearchParam = <T = string | null>(\n key: string,\n transform?: (param: string | null) => T\n): T => {\n const queryParams = useQueryParams();\n const qp = queryParams.get(key);\n\n return useMemo(\n () => (transform ? transform(qp) : (qp as unknown as T)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [qp]\n );\n};\n\nexport const useCdkType = () => {\n const cdkType: CDKType | undefined =\n useSearchParam(QUERY_PARAMS.CDK_TYPE) ?? undefined;\n\n return cdkType;\n};\n\nexport const useCdkMajor = () => {\n const cdkMajor: number | undefined = useSearchParam(\n QUERY_PARAMS.CDK_MAJOR,\n (p) => (p ? toNum(p) : undefined)\n );\n\n return cdkMajor;\n};\n\nexport const useKeywords = () => {\n const keywords: string[] = useSearchParam(\n QUERY_PARAMS.KEYWORDS,\n parseQueryArray\n );\n\n return keywords;\n};\n\nexport const useLanguages = () => {\n const languages: Language[] = useSearchParam(\n QUERY_PARAMS.LANGUAGES,\n parseQueryArray\n ) as Language[];\n\n return languages;\n};\n\nexport const useOffset = () => {\n const offset = useSearchParam(QUERY_PARAMS.OFFSET, (o) => toNum(o ?? \"\"));\n return offset;\n};\n\nexport const useSearchQuery = () => {\n const query: string = useSearchParam(QUERY_PARAMS.SEARCH_QUERY) ?? \"\";\n return query;\n};\n\nexport const useSort = () => {\n const sort: CatalogSearchSort | undefined =\n useSearchParam(QUERY_PARAMS.SORT) ?? undefined;\n return sort;\n};\n\nexport const useTags = () => {\n const tags: string[] = useSearchParam(QUERY_PARAMS.TAGS, parseQueryArray);\n return tags;\n};\n","import { useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { getSearchPath } from \"../../util/url\";\nimport { getSearchUrlParams } from \"./util\";\n\nexport const useUpdateSearchParam = () => {\n const { push } = useHistory();\n\n return useCallback(\n (p?: Partial<Parameters<typeof getSearchPath>[0]>) => {\n const { offset, ...params } = p ?? {};\n\n push(\n getSearchPath({\n ...getSearchUrlParams(),\n ...params,\n offset: offset ?? 0,\n })\n );\n },\n [push]\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 testIds from \"./testIds\";\nimport { useCdkMajor, useCdkType } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\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 = useCdkType();\n const cdkMajor = useCdkMajor();\n\n const updateSearch = useUpdateSearchParam();\n\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 updateSearch({ cdkType: type ? cdk : undefined, cdkMajor: undefined });\n };\n\n const onCdkMajorChange = (major: string) => {\n let majorNum: number | undefined = undefined;\n\n if (major) {\n majorNum = parseInt(major, 10);\n }\n\n updateSearch({ cdkMajor: 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 { clickEvent, eventName, useAnalytics } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\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=\"textTertiary\"\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 const { trackCustomEvent } = useAnalytics();\n\n const getOnChange = (item: CheckboxOption) => () => {\n trackCustomEvent(\n clickEvent({\n name: eventName(SEARCH_ANALYTICS.FILTERS, name, \"Filter\", item.display),\n })\n );\n onValueChange(item.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)}\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)}\n />\n ))}\n </Stack>\n </Collapse>\n )}\n </Stack>\n {isExpandible && (\n <Flex align=\"start\" mt={1}>\n <Button\n color=\"textTertiary\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Show More\")}\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 testIds from \"./testIds\";\nimport { useKeywords } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const KeywordsFilter: FunctionComponent = () => {\n const keywords = useKeywords();\n const keywordMap = useSearchContext()!.keywords;\n const updateSearch = useUpdateSearchParam();\n\n const onKeywordChange = (keyword: string) => {\n updateSearch({\n keywords: 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 testIds from \"./testIds\";\nimport { useLanguages } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\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 = useLanguages();\n\n const updateSearch = useUpdateSearchParam();\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n updateSearch({\n languages: 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, useCallback, useMemo } from \"react\";\nimport { PackageTagConfig, TagGroupConfig } from \"../../api/config\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useTags } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\ninterface FilterGroup extends Partial<TagGroupConfig> {\n id: string;\n tags: PackageTagConfig[];\n}\ninterface FilterGroups {\n [group: string]: FilterGroup;\n}\n\n/**\n * Creates a plain object map of FilterGroups keyed by group id\n */\nexport const mapTagsToFilterGroups = (\n packageTags: PackageTagConfig[],\n tagGroupsMap: Map<string, TagGroupConfig>\n): FilterGroups => {\n return packageTags.reduce(\n (accum: FilterGroups, tag: PackageTagConfig): FilterGroups => {\n const groupIdOrName = tag.searchFilter?.groupBy;\n const customGroup = groupIdOrName\n ? tagGroupsMap.get(groupIdOrName)\n : undefined;\n\n if (groupIdOrName && customGroup) {\n const entry = accum[groupIdOrName];\n if (entry) {\n entry.tags = [...entry.tags, tag];\n return accum;\n }\n\n return {\n ...accum,\n [groupIdOrName]: {\n ...customGroup,\n tags: [tag],\n },\n };\n }\n\n if (groupIdOrName) {\n return {\n ...accum,\n [groupIdOrName]: {\n id: groupIdOrName,\n tags: [...(accum?.[groupIdOrName]?.tags ?? []), tag],\n },\n };\n }\n return accum;\n },\n {}\n );\n};\n\nexport const TagFilter: FunctionComponent = () => {\n const packageTags = useConfigValue(\"packageTags\");\n const packageTagGroups = useConfigValue(\"packageTagGroups\");\n\n const tagFilterGroups: FilterGroups = useMemo(() => {\n const tagGroupsMap = new Map<string, TagGroupConfig>();\n packageTagGroups?.forEach((group) => {\n tagGroupsMap.set(group.id, group);\n });\n\n const filterableTags =\n packageTags?.filter((tag) => Boolean(tag.searchFilter)) ?? [];\n\n return mapTagsToFilterGroups(filterableTags, tagGroupsMap);\n }, [packageTags, packageTagGroups]);\n\n const tags = useTags();\n const updateSearch = useUpdateSearchParam();\n\n const onTagsChange = (tag: string) => {\n updateSearch({\n tags: tags.includes(tag) ? tags.filter((t) => t !== tag) : [...tags, tag],\n });\n };\n\n const getOnRadioTagChange = useCallback(\n (groupName: string) => {\n const groupTags = new Set(\n (tagFilterGroups[groupName]?.tags ?? []).map(({ id }) => id)\n );\n\n return (tag: string) => {\n const filteredTags = tags.filter((t) => !groupTags.has(t));\n\n updateSearch({\n tags: tag ? [...filteredTags, tag] : filteredTags,\n });\n };\n },\n [tagFilterGroups, tags, updateSearch]\n );\n\n return (\n <>\n {Object.values(tagFilterGroups).map(\n ({ filterType, id, label, tooltip, tags: tagItems }) => {\n const sharedProps = {\n hint: tooltip,\n name: label ?? id,\n options: tagItems.map((tag) => {\n return {\n display: tag.searchFilter!.display,\n value: tag.id,\n };\n }),\n };\n\n if (filterType === \"radio\") {\n return (\n <RadioFilter\n {...sharedProps}\n key={id}\n onValueChange={getOnRadioTagChange(id)}\n options={[\n { display: `Any ${sharedProps.name}`, value: \"\" },\n ...sharedProps.options,\n ]}\n value={tagItems.find((t) => tags.includes(t.id))?.id ?? \"\"}\n />\n );\n }\n\n return (\n <CheckboxFilter\n {...sharedProps}\n key={id}\n onValueChange={onTagsChange}\n values={tags}\n />\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=\"sm\"\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=\"textPrimary\" h=\"max-content\" spacing={4} top={4}>\n <Heading as=\"h2\" 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 { ExtendedCatalogPackage } from \"../../api/catalog-search\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n \"data-event\"?: string;\n items: ExtendedCatalogPackage[];\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 \"data-event\": dataEvent,\n cardView = PackageCardType.Wide,\n items,\n loading,\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 data-event={dataEvent} 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 \"data-event\": dataEvent,\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n data-event={dataEvent}\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\";\n\nexport interface ArrowButtonProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n label: string;\n onClick?: () => void;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: Icon,\n label,\n onClick,\n}) => {\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-event\": dataEvent,\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 return <IconButton {...props} disabled={!onClick} onClick={onClick} />;\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 { clickEvent, useAnalytics } from \"../../contexts/Analytics\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport interface GoToPageProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n pageLimit,\n offset,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const { trackCustomEvent } = useAnalytics();\n const [inputValue, setInputValue] = useState((offset + 1).toString());\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 updateSearch({ offset: parseInt(inputValue) - 1 });\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n aria-label=\"Jump to page\"\n colorScheme=\"brand\"\n data-testid={dataTestid}\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n onFocus={() => {\n if (dataEvent) {\n trackCustomEvent(clickEvent({ name: dataEvent }));\n }\n }}\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 { eventName } from \"../../contexts/Analytics\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { GoToPage } from \"./GoToPage\";\nimport testIds from \"./testIds\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const goForward =\n offset < pageLimit ? () => updateSearch({ offset: offset + 1 }) : undefined;\n const goBack =\n offset > 0 ? () => updateSearch({ offset: 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-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Previous Page\")}\n data-testid={testIds.prevPage}\n icon={ChevronLeftIcon}\n label=\"Previous page button\"\n onClick={goBack}\n />\n <GoToPage\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Go to Page\")}\n data-testid={testIds.goToPage}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Next Page\")}\n data-testid={testIds.nextPage}\n icon={ChevronRightIcon}\n label=\"Next page button\"\n onClick={goForward}\n />\n </Stack>\n );\n};\n","import { FunctionComponent, useState } from \"react\";\nimport { SearchBar as SearchBarComponent } from \"../../components/SearchBar\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { useSearchQuery } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SearchBar: FunctionComponent = () => {\n const query = useSearchQuery();\n const updateSearch = useUpdateSearchParam();\n\n const [value, setValue] = useState(query ?? \"\");\n\n return (\n <SearchBarComponent\n bg=\"bgSecondary\"\n data-event={SEARCH_ANALYTICS.SEARCH}\n onChange={(e) => setValue(e.target.value)}\n onSubmit={(e) => {\n e.preventDefault();\n\n updateSearch({\n query: value,\n sort: undefined,\n });\n }}\n value={value}\n />\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=\"textSecondary\">\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 { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SortFilter: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const onSortChange = (newSort: string) => {\n updateSearch({\n sort: newSort ? (newSort as CatalogSearchSort) : undefined,\n });\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=\"brand\"\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=\"textPrimary\" maxH=\"full\">\n <DrawerHeader borderBottom=\"base\">Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"textPrimary\" 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 { eventName } from \"../../contexts/Analytics\";\nimport { SEARCH_ANALYTICS, SORT_RENDER_MAP } from \"./constants\";\nimport testIds from \"./testIds\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SortedBy: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\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=\"link\"\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Menu\")}\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-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", \"Relevance\")}\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => updateSearch({ sort: undefined })}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", display)}\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => updateSearch({ sort: 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 } from \"react\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { LIMIT, SEARCH_ANALYTICS } from \"./constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchBar } from \"./SearchBar\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\nimport {\n useCdkType,\n useCdkMajor,\n useKeywords,\n useLanguages,\n useOffset,\n useSearchQuery,\n useSort,\n useTags,\n} from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\n\nexport const SearchResults: FunctionComponent = () => {\n const updateSearch = useUpdateSearchParam();\n\n const offset = useOffset();\n const query = useSearchQuery();\n const keywords = useKeywords();\n const languages = useLanguages();\n const cdkMajor = useCdkMajor();\n const cdkType = useCdkType();\n const sort = useSort();\n const tags = useTags();\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit: LIMIT,\n query,\n keywords,\n languages,\n cdkMajor,\n cdkType,\n sort,\n tags,\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 updateSearch({ offset: 0 });\n } else {\n // Offset is too large, just take last page\n updateSearch({ offset: pageLimit });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\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\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 data-event={SEARCH_ANALYTICS.RESULTS} items={page} />\n\n <Box w=\"full\">\n <PageControls offset={offset} pageLimit={pageLimit} />\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 testIds from \"./testIds\";\n\nexport const Search: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description: \"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 );\n};\n"],"names":["SORT_RENDER_MAP","CatalogSearchSort","searchEvent","e","eventName","SEARCH_ANALYTICS","FILTERS","RESULTS","SEARCH","SORT","FilterHeading","name","hint","placement","useBreakpointValue","base","md","align","mb","as","size","w","colorScheme","strategy","ml","h","bg","borderRadius","color","fontSize","mx","shadow","createTestIds","RadioFilter","dataTestid","checkedValue","value","onValueChange","options","spacing","onChange","map","display","dataEvent","testIds","filterItem","isTruncated","toNum","val","result","parseInt","parseQueryArray","queryString","decodeURIComponent","split","getParamFromUrl","key","window","URL","location","href","searchParams","get","useSearchParam","transform","qp","useQueryParams","useMemo","useCdkType","QUERY_PARAMS","undefined","useCdkMajor","p","useKeywords","useLanguages","useSearchQuery","useSort","useTags","useUpdateSearchParam","push","useHistory","useCallback","offset","params","getSearchPath","query","keywords","cdkType","cdkMajor","cdkMajorParam","languages","sort","tags","getSearchUrlParams","CDKFilter","updateSearch","searchAPI","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","Object","entries","reduce","opts","meta","pkgCount","CDKTYPE_NAME_MAP","keys","length","majorsOptions","majorVersions","a","b","toString","cdkTypeFilter","type","values","cdkVersionFilter","major","majorNum","CheckboxItem","isDisabled","disabledHint","isChecked","hasArrow","label","CheckboxFilter","initialItemCount","checkedValues","collapse","useDisclosure","trackCustomEvent","useAnalytics","getOnChange","item","clickEvent","alwaysShow","showWhenExpanded","slice","isExpandible","direction","mt","includes","animateOpacity","in","isOpen","unmountOnExit","fontWeight","leftIcon","onClick","onToggle","textAlign","variant","KeywordsFilter","keywordMap","keywordOptions","baseOptions","filter","keyword","keywordsNotInOptions","k","some","opt","languagesFilter","languageOptions","LANGUAGE_NAME_MAP","TEMP_SUPPORTED_LANGUAGES","l1","l2","LanguageFilter","lang","language","l","TagFilter","packageTags","useConfigValue","packageTagGroups","tagFilterGroups","tagGroupsMap","Map","forEach","group","set","id","accum","tag","groupIdOrName","searchFilter","groupBy","customGroup","entry","mapTagsToFilterGroups","Boolean","onTagsChange","t","getOnRadioTagChange","groupName","groupTags","Set","filteredTags","has","filterType","tooltip","tagItems","sharedProps","find","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxH","maxW","minW","overflow","pos","top","zIndex","listViews","PackageCardType","items","pkg","PackageCard","version","PackageList","memo","cardView","loading","View","displayName","ArrowButton","Icon","icon","props","borderColor","disabled","GoToPage","pageLimit","useState","inputValue","setInputValue","useEffect","onSubmit","preventDefault","max","min","target","onFocus","PageControls","goForward","goBack","justify","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","SearchBar","setValue","Em","children","Count","first","count","last","SearchDetails","limit","filtered","hasResults","searchDetails","SortFilter","newSort","SortAndFilterDrawer","drawer","onOpen","rightIcon","borderBottom","pb","SortedBy","selected","Button","sortButton","pl","pr","py","sortDropdown","sortItem","SearchResults","o","useCatalogResults","page","results","scrollTo","Page","title","description","pageName","px","lg","Search","gap","templateColumns","templateRows"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunkconstruct_hub_webapp=self.webpackChunkconstruct_hub_webapp||[]).push([[58],{46058:function(e,t,i){i.r(t),i.d(t,{default:function(){return ee}});var n,a=i(28735),c=i(41712),r=i(95038),l=i(82504),o=i(67003),C=i(56804),s=i(19748),d=i(8812),u=(0,i(88606).$)("homeRedesign",["page","packageGrid","heroHeader","heroSubtitle","infoContainer","infoSection","infoSectionHeading","infoSectionDescription","infoSectionIcon","featuredContainer","featuredHeader","featuredGrid","cdkTypeSection","cdkTypeSectionHeading","cdkTypeSectionDescription","cdkTypeTab","cdkTypeGrid","cdkTypeSeeAllButton","categoriesContainer","categoriesHeader","categoriesDescription"]),h=i(80184),p=[{title:"Monitoring",url:(0,s.yc)({keywords:["monitoring"]})},{title:"Containers",url:(0,s.yc)({keywords:["containers"]})},{title:"Serverless",url:(0,s.yc)({keywords:["serverless"]})},{title:"Databases",url:(0,s.yc)({keywords:["databases"]})},{title:"Utilities",url:(0,s.yc)({keywords:["utilities"]})},{title:"Deployment",url:(0,s.yc)({keywords:["deployment"]})},{title:"Websites",url:(0,s.yc)({keywords:["websites"]})},{title:"Security",url:(0,s.yc)({keywords:["security"]})},{title:"Compliance",url:(0,s.yc)({keywords:["compliance"]})},{title:"Network",url:(0,s.yc)({keywords:["network"]})},{title:"Artificial Intelligence (AI)",url:(0,s.yc)({keywords:["artificial intelligence (ai)"]})},{title:"Cloud Services Integrations",url:(0,s.yc)({keywords:["cloud services integrations"]})}],x=function(){var e,t=null!==(e=(0,C.E)("categories"))&&void 0!==e?e:p;return(0,h.jsxs)(a.kC,{"data-testid":u.categoriesContainer,direction:"column",my:4,px:d.W.X,py:d.W.Y,zIndex:"0",children:[(0,h.jsx)(a.X6,{as:"h3",color:"white","data-testid":u.categoriesHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:1,children:"Search by use case"}),(0,h.jsx)(a.xv,{color:"white","data-testid":u.categoriesDescription,lineHeight:"md",mb:5,children:"Find the right construct for your problem set from a community that\u2019s already tackled it."}),(0,h.jsx)(a.Eq,{children:t.map((function(e){return(0,h.jsx)(a.Uc,{children:(0,h.jsx)(o.O,{"data-event":d.a.USE_CASE.eventName(e.title),to:e.url,children:(0,h.jsx)(l.zx,{as:a.xu,boxShadow:"0px 4px 4px rgba(73, 73, 73, 0.63)",color:"textPrimary",colorScheme:"gray",size:"md",children:e.title})})},e.title)}))})]})},f=i(29439),m=i(1413),g=i(45987),j=i(13822),y=i(31959),v=i(16478),b=i(29499),F=i(59534),L=i(45832),w=i(4942),k=i(72791),S=i(79271),Z=i(64159),D=function(e){var t=e["data-event"],i=e.packages;return(0,h.jsx)(a.rj,{"data-testid":u.packageGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:i.map((function(e){return(0,h.jsx)(Z.L,{"data-event":t,pkg:e},"".concat(e.name,"-").concat(e.version))}))})},M=["data-event","label","data","tag"],A={community:{"data-event":d.a.PUBLISHER.eventName("Community"),label:"Community",tag:"community"},aws:{"data-event":d.a.PUBLISHER.eventName("AWS"),label:"AWS",tag:"aws-published"},hashicorp:{"data-event":d.a.PUBLISHER.eventName("HashiCorp"),label:"HashiCorp",tag:"hashicorp-published"}},H=function(e){var t=e["data-event"],i=e.data,n=e.label;return(0,h.jsx)(j.OK,{"data-event":(0,F.oJ)(t,"Tab"),"data-testid":u.cdkTypeTab,"data-value":n,isDisabled:i.page.length<1,children:n})},W=(0,y.Gp)((function(e,t){var i=e["data-event"],n=e.label,c=e.data,r=e.tag,C=(0,g.Z)(e,M);return(0,h.jsxs)(j.x4,(0,m.Z)((0,m.Z)({"data-testid":u.cdkTypeGrid,ref:t},C),{},{p:0,children:[(0,h.jsx)(D,{"data-event":i,packages:c.page}),(0,h.jsx)(a.kC,{justify:"center",w:"full",children:(0,h.jsxs)(l.zx,{as:o.O,colorScheme:"brand","data-event":(0,F.oJ)(i,"See All"),"data-testid":u.cdkTypeSeeAllButton,my:8,onClick:function(){return window.scrollTo(0,0)},to:(0,s.yc)({tags:r?[r]:void 0,sort:v.W.DownloadsDesc}),children:["See all ",n," constructs"]})})]}))})),T=function(){var e=(0,L.D)({tags:[A.community.tag],limit:4,sort:v.W.DownloadsDesc}),t=(0,L.D)({tags:[A.aws.tag],limit:4,sort:v.W.DownloadsDesc}),i=(0,L.D)({tags:[A.hashicorp.tag],limit:4,sort:v.W.DownloadsDesc}),n=function(e,t){var i=(0,S.k6)(),n=(0,k.useState)((function(){var n,a=null===(n=i.location.state)||void 0===n?void 0:n[e];return null!==a&&void 0!==a?a:t})),a=(0,f.Z)(n,2),c=a[0],r=a[1];return[c,function(t){i.replace((0,m.Z)((0,m.Z)({},i.location),{},{state:(0,m.Z)((0,m.Z)({},i.location.state),{},(0,w.Z)({},e,t))})),r(t)}]}("cdkTypeTab",0),c=(0,f.Z)(n,2),r=c[0],l=c[1];return(0,h.jsxs)(a.kC,{bg:"bgSecondary",color:"textPrimary","data-testid":u.cdkTypeSection,direction:"column",px:d.W.X,py:d.W.Y,zIndex:"0",children:[(0,h.jsx)(a.X6,{as:"h3","data-testid":u.cdkTypeSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:"Search by publisher"}),(0,h.jsxs)(a.xv,{"data-testid":u.cdkTypeSectionDescription,lineHeight:"md",mb:5,children:["Find constructs published by the open-source community, AWS, and cloud technology providers in one location. You can also include your own construct libraries on Construct Hub by publishing them on npm registry. More concrete guidance can be found in the"," ",(0,h.jsx)(o.O,{color:"link",to:b.Z6.CONTRIBUTE,children:"Contribute"})," ","page."]}),(0,h.jsxs)(j.mQ,{defaultIndex:r,onChange:function(e){return l(e)},variant:"line",children:[(0,h.jsxs)(j.td,{children:[(0,h.jsx)(H,(0,m.Z)({data:e},A.community)),(0,h.jsx)(H,(0,m.Z)({data:t},A.aws)),(0,h.jsx)(H,(0,m.Z)({data:i},A.hashicorp))]}),(0,h.jsxs)(j.nP,{minH:"28.5rem",children:[(0,h.jsx)(W,(0,m.Z)((0,m.Z)({data:e},A.community),{},{label:A.community.label.toLowerCase()})),(0,h.jsx)(W,(0,m.Z)({data:t},A.aws)),(0,h.jsx)(W,(0,m.Z)({data:i},A.hashicorp))]})]})]})},z=i(88907),I=i(59707),V=function(){var e=(0,C.E)("featuredPackages"),t=(0,f.Z)((null!==e&&void 0!==e?e:z.x).sections,1)[0],i=void 0===t?{name:"Recently Updated",showLastUpdated:4}:t,n=function(e){var t=e.showLastUpdated,i=e.showPackages,n=(0,r.r)(),a=n.isLoading,c=n.error,l=(0,L.D)({limit:25,sort:v.W.PublishDateDesc}).results,o=(0,I.A)();return(0,k.useMemo)((function(){return a||c||!l?[]:t?l.slice(0,t):i&&o?i.map((function(e){var t=o.findByName(e.name,{dedup:!0}),i=(0,f.Z)(t,1)[0];if(i)return(0,m.Z)((0,m.Z)({},i),{},{comment:e.comment})})).filter((function(e){return void 0!==e})):void 0}),[a,c,l,t,i,o])}(i);return n?(0,h.jsxs)(a.kC,{color:"white","data-testid":u.featuredContainer,direction:"column",px:d.W.X,py:d.W.Y,zIndex:"0",children:[(0,h.jsx)(a.X6,{as:"h3","data-testid":u.featuredHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",children:i.name}),(0,h.jsx)(a.rj,{"data-testid":u.featuredGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:null===n||void 0===n?void 0:n.slice(0,4).map((function(e){return(0,h.jsx)(Z.L,{"data-event":d.a.FEATURED,pkg:e},e.name)}))}),(0,h.jsx)(l.zx,{as:o.O,boxShadow:"md",colorScheme:"brand","data-event":(0,F.oJ)(d.a.FEATURED,"See All"),mx:"auto",my:8,onClick:function(){return window.scrollTo(0,0)},to:(0,s.yc)({sort:v.W.DownloadsDesc}),children:"See all constructs"})]}):null},R=i(30168),E=(0,i(52554).F4)(n||(n=(0,R.Z)(["\n 0% {\n background-position:0% 50%;\n }\n\n 50% {\n background-position:100% 50%;\n }\n\n 100% {\n background-position:0% 50%;\n }\n"]))),B=(0,y.Gp)((function(e,t){return(0,h.jsx)(a.xu,(0,m.Z)({animation:"".concat(E," 10s linear infinite"),bgGradient:"linear(to-bl, brand.900, brand.500)",bgSize:"200% 200%",ref:t},e))})),P=i(99185),K=function(){return(0,h.jsxs)(a.kC,{align:"center",color:"white",direction:"column",h:"20rem",justify:"center",px:d.W.X,py:d.W.Y,textAlign:"center",zIndex:"1",children:[(0,h.jsx)(a.X6,{as:"h1","data-testid":u.heroHeader,size:"xl",children:"Simplify cloud development with constructs"}),(0,h.jsx)(a.X6,{as:"h2","data-testid":u.heroSubtitle,fontWeight:"normal",mt:4,size:"md",children:"Find and use open-source Cloud Development Kit (CDK) libraries"}),(0,h.jsx)(a.xu,{color:"initial",maxW:"36rem",mt:8,mx:"auto",w:"full",children:(0,h.jsxs)(P.E1,{"data-event":d.a.SEARCH,hasButton:!0,children:[(0,h.jsx)(P.Fj,{}),(0,h.jsx)(P.Xj,{})]})})]})},O=i(28227),q=i(53046),X=i(30791),U=i(86617),N=i(69113),_=function(e){var t=e.title,i=e.description,n=e.children;return(0,h.jsxs)(a.kC,{color:"textPrimary","data-testid":u.infoSection,direction:"column",px:d.W.X,py:d.W.Y,children:[(0,h.jsx)(a.X6,{as:"h3","data-testid":u.infoSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:t}),(0,h.jsxs)(a.kC,{direction:"column",h:"full",justify:"space-between",children:[(0,h.jsx)(a.xv,{"data-testid":u.infoSectionDescription,fontSize:"lg",mb:4,children:i}),n]})]})},G=[{name:"Datadog",Icon:function(e){return"dark"===(0,O.If)().colorMode?(0,h.jsxs)(N.JO,(0,m.Z)((0,m.Z)({},e),{},{version:"1.1",viewBox:"0 0 800.5 801",x:"0px",y:"0px",children:[(0,h.jsx)("g",{children:(0,h.jsx)("path",{d:"M546.48,341.44c0.01,0,0.01-0.01,0.01-0.01h-0.01V341.44z",fill:"none"})}),(0,h.jsxs)("g",{children:[(0,h.jsx)("path",{d:"M22.42,780.42h26.36c24.81,0,37.23-14.58,37.23-43.77c0-24.84-12.41-37.27-37.23-37.27H22.42V780.42z M52.12,799.65H0.25V680.22h51.87c37.37,0,56.07,18.82,56.07,56.45C108.19,778.65,89.49,799.65,52.12,799.65",fill:"#FFFFFF"}),(0,h.jsx)("polygon",{fill:"#FFFFFF",points:"131.42,799.65 108.66,799.65 159.45,680.22 183.29,680.22 235.19,799.65 211.34,799.65 196.28,767.07 157.96,767.07 165.56,747.87 190.42,747.87 170.84,703.01 \t"}),(0,h.jsx)("polygon",{fill:"#FFFFFF",points:"222.65,680.22 313.45,680.22 313.45,699.42 279.15,699.42 279.15,799.65 256.98,799.65 256.98,699.42 222.65,699.42 \t"}),(0,h.jsx)("polygon",{fill:"#FFFFFF",points:"324.85,799.65 302.08,799.65 352.87,680.22 376.72,680.22 428.61,799.65 404.74,799.65 389.69,767.07 351.36,767.07 358.97,747.87 383.82,747.87 364.25,703.01 \t"}),(0,h.jsx)("path",{d:"M465.5,780.42h26.36c24.83,0,37.25-14.58,37.25-43.77c0-24.84-12.42-37.27-37.25-37.27H465.5V780.42z M495.21,799.65h-51.87V680.22h51.87c37.4,0,56.07,18.82,56.07,56.45C551.28,778.65,532.6,799.65,495.21,799.65",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M626.4,781.26c24.09,0,36.13-13.89,36.13-41.68c0-27.36-12.04-41.03-36.13-41.03 c-24.72,0-37.08,13.67-37.08,41.03C589.32,767.37,601.68,781.26,626.4,781.26 M566.3,740.1c0-40.49,20.04-60.73,60.1-60.73 c39.45,0,59.15,20.24,59.15,60.73c0,40.26-19.7,60.4-59.15,60.4C588.11,800.5,568.09,780.36,566.3,740.1",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M778.07,751.32v27.97c-5.11,1.34-9.7,1.99-13.72,1.99c-27.11,0-40.66-14.35-40.66-43 c0-26.48,14.36-39.7,43.08-39.7c12,0,23.16,2.23,33.48,6.69V685.2c-10.32-3.89-22.04-5.83-35.14-5.83 c-42.95,0-64.44,19.62-64.44,58.91c0,41.47,21.11,62.23,63.34,62.23c14.53,0,26.6-2.12,36.25-6.36v-62.47h-35.82l-7.49,19.64 L778.07,751.32L778.07,751.32z",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M349.36,166.26c21.81-14.87,49.91-9.02,45.2-4.55c-8.97,8.54,2.97,6.01,4.26,21.77 c0.95,11.6-2.85,18-6.1,21.64c-6.8,0.89-15.08,2.56-25.04,5.79c-5.89,1.91-11.03,4.04-15.51,6.18c-1.18-0.78-2.47-1.71-4-3.03 C332.77,200.74,333.28,177.22,349.36,166.26 M479.63,258.13c3.95-3.06,21.94-8.84,38.59-10.82c8.74-1.04,21.2-1.62,23.86-0.13 c5.28,2.92,5.28,11.93,1.67,20.26c-5.26,12.11-12.71,25.47-21.13,26.57c-13.74,1.81-26.75-5.62-41.6-16.71 C475.72,273.32,472.47,263.67,479.63,258.13 M504.7,140.3c20.3,9.45,17.64,27.42,18.2,37.97c0.16,3.03,0.1,5.07-0.16,6.49 c-2.82-1.53-7.25-2.64-14.29-2.33c-2.06,0.09-4.07,0.33-6,0.64c-7.49-4.01-11.96-11.87-16.06-20.22c-0.37-0.77-0.66-1.45-0.93-2.13 c-0.11-0.3-0.25-0.64-0.36-0.91c-0.05-0.15-0.09-0.28-0.14-0.42c-2.25-7.13-0.74-8.56,0.21-10.76c0.98-2.24,4.64-4.1-0.77-5.97 c-0.46-0.17-1.05-0.28-1.7-0.39C486.28,137.83,497.03,136.74,504.7,140.3 M394.05,355.15c-21.87-14.05-44.5-34.18-54.39-45.32 c-1.66-1.25-1.39-6.8-1.39-6.8c8.93,6.95,45.98,33.41,85.14,45.49c13.81,4.27,35.02,5.88,53.41-4.55 c14.06-7.97,30.97-21.86,41.07-36.17l1.85,3.21c-0.07,2.13-4.72,12.49-7.07,16.66c4.27,2.46,7.46,3.12,12.21,4.43l32.44-5.06 c11.64-18.8,19.98-49.13,11.09-78c-5.08-16.56-31.55-49.53-33.45-51.34c-6.66-6.39,1.12-31.09-12.07-58.02 c-13.94-28.49-50.24-58.2-66-71.13c4.65,3.4,33.26,14.92,46.59,31.02c1.25-1.67,1.77-10.31,2.92-12.49 c-11.44-14.99-12.34-41.69-12.34-48.82c0-13.08-6.66-27.91-6.66-27.91s11.46,9.07,14.42,24.68c3.5,18.51,10.96,33.07,20.82,45.39 c18.66,23.25,35.51,35.18,44.04,26.58c10.19-10.32-10.33-56.49-36.57-82.26C499.5-5.3,491.48-1.43,473.53,4.99 c-14.33,5.1-22.08,45.8-59.43,45c-6.33-0.73-22.63-1.14-30.68-1.07c4.2-5.86,7.79-10.4,7.79-10.4s-12.53,5.03-23.2,11.43 l-0.82-1.24c3.6-7.6,7.48-12.39,7.48-12.39s-10.01,6.01-19.15,13.21c1.67-9.06,7.95-14.8,7.95-14.8s-12.65,2.29-28.77,20 c-18.31,5-22.72,8.3-37.31,14.76c-23.72-5.17-34.93-13.53-45.58-28.9c-8.13-11.74-22.57-13.53-37.36-7.46 c-21.52,8.92-48.77,21.11-48.77,21.11s8.86-0.34,18.12,0.07c-12.66,4.8-24.85,11.4-24.85,11.4s5.94-0.2,13.26-0.08 c-5.06,4.2-7.85,6.21-12.66,9.39c-11.59,8.41-20.98,18.12-20.98,18.12s7.87-3.58,14.92-5.59c-4.93,11.32-14.72,19.64-12.92,33.5 c1.72,12.66,17.26,38.71,37.31,54.7c1.72,1.4,29.12,26.72,49.76,16.32c20.65-10.39,28.78-19.64,32.18-33.85 c3.99-16.31,1.71-28.62-6.8-64.01c-2.8-11.68-10.13-35.73-13.66-47.23l0.79-0.57c6.76,14.25,24.04,51.81,31,77.03 c10.87,39.34,7.47,59.3,2.5,66.61c-14.99,22.07-53.43,24.98-70.92,12.75c-2.67,42.36,6.79,61,9.99,70.4 c-1.6,10.8,5.41,30.85,5.41,30.85s0.79-9.12,3.99-13.92c0.86,10.72,6.26,23.45,6.26,23.45s-0.33-7.86,2.13-14.65 c3.46,5.86,6,7.25,9.28,11.66c3.27,11.46,9.84,19.82,9.84,19.82s-1.07-6.14-0.48-12.54c16.03,15.4,18.79,37.87,20.39,55.12 c4.49,47.48-74.85,85.21-90.22,114.9c-11.66,17.58-18.63,45.41,1.1,61.81c47.71,39.61,29.39,50.52,53.27,67.93 c32.75,23.88,73.75,13.18,87.71-6.24c19.43-27.07,14.43-52.6,7.21-76.47c-5.63-18.68-20.96-49.7-39.93-61.7 c-19.37-12.27-38.21-14.58-54.17-12.92l1.48-1.69c22.96-4.56,46.95-2.05,64.32,9.13c19.71,12.67,37.74,34.41,47.18,67.72 c10.69-1.52,12.21-2.22,21.99-3.6l-22.04-171.6L394.05,355.15z M406.78,570.25l-2.55-23.79l49.57-75.61l56.27,16.45l48.4-80.83 l58.02,38.26l44.07-92.43l15.67,168.33L406.78,570.25z M676.84,317.79L499.7,349.9c-4.38,5.67-15.24,15.59-20.45,18.18 c-22.37,11.26-37.5,8.01-50.55,4.61c-8.4-2.13-13.27-3.33-20.25-6.47l-43.24,5.94l26.24,218.96l303.44-54.7L676.84,317.79z",fill:"#FFFFFF"})]})]})):(0,h.jsxs)(N.JO,(0,m.Z)((0,m.Z)({viewBox:"0 0 32 34"},e),{},{children:[(0,h.jsx)("g",{clipPath:"url(#clip0_2245_48088)",children:(0,h.jsx)("path",{clipRule:"evenodd",d:"M26.6008 24.1363L23.774 22.2717L21.4158 26.2107L18.6731 25.4088L16.2581 29.0947L16.3819 30.2549L29.5121 27.8356L28.7495 19.6318L26.6008 24.1363ZM14.3559 20.5992L16.4625 20.3095C16.8034 20.4627 17.0406 20.521 17.4493 20.625C18.0858 20.7908 18.8227 20.9499 19.9139 20.4C20.1678 20.2742 20.6968 19.7905 20.9107 19.5147L29.5419 17.9489L30.4224 28.6054L15.6356 31.2704L14.3559 20.5992ZM30.3891 16.7593L29.5371 16.9216L27.9003 0.0106812L0.0106812 3.24462L3.44659 31.1271L6.71108 30.6533C6.45038 30.2811 6.04446 29.8308 5.35124 29.2542C4.38979 28.4554 4.72985 27.0988 5.29688 26.2421C6.04723 24.7946 9.91328 22.955 9.69424 20.6412C9.61568 19.8 9.48195 18.7048 8.70105 17.9545C8.67168 18.266 8.72446 18.5659 8.72446 18.5659C8.72446 18.5659 8.40384 18.1568 8.24393 17.5989C8.08521 17.3851 7.96061 17.3168 7.79197 17.0311C7.67174 17.3617 7.68761 17.745 7.68761 17.745C7.68761 17.745 7.42533 17.1252 7.38287 16.6022C7.22732 16.8363 7.18804 17.2811 7.18804 17.2811C7.18804 17.2811 6.84719 16.3042 6.92496 15.778C6.76941 15.3201 6.30833 14.4114 6.43888 12.3461C7.29002 12.9425 9.16372 12.8008 9.89383 11.7247C10.1363 11.3684 10.3021 10.3954 9.77281 8.47844C9.43275 7.24915 8.59074 5.4187 8.26258 4.7243L8.2233 4.75247C8.3963 5.31196 8.75303 6.48491 8.88992 7.05352C9.30419 8.77842 9.41529 9.37879 9.22086 10.174C9.05539 10.8652 8.65859 11.3176 7.6527 11.8231C6.6468 12.3302 5.31196 11.0961 5.22744 11.0279C4.25012 10.2494 3.49421 8.97921 3.40969 8.36218C3.322 7.68682 3.79895 7.28129 4.03941 6.72894C3.69539 6.82735 3.31168 7.00194 3.31168 7.00194C3.31168 7.00194 3.76959 6.52816 4.33424 6.11826C4.56796 5.96351 4.70525 5.8651 4.95166 5.66035C4.59494 5.6544 4.30527 5.66472 4.30527 5.66472C4.30527 5.66472 4.90008 5.34331 5.51671 5.10919C5.06554 5.08935 4.63382 5.10602 4.63382 5.10602C4.63382 5.10602 5.96113 4.5124 7.00948 4.07671C7.73047 3.7811 8.43479 3.86839 8.8304 4.44058C9.34982 5.19014 9.89542 5.59726 11.0517 5.84963C11.7616 5.53496 11.9774 5.37307 12.8695 5.13022C13.6547 4.26678 14.2714 4.15488 14.2714 4.15488C14.2714 4.15488 13.9654 4.43542 13.8837 4.87627C14.3289 4.5255 14.817 4.23266 14.817 4.23266C14.817 4.23266 14.6281 4.46598 14.4519 4.83659L14.4928 4.8973C15.0122 4.58581 15.6229 4.34019 15.6229 4.34019C15.6229 4.34019 15.4483 4.56081 15.2435 4.84651C15.6352 4.84334 16.4296 4.86318 16.7379 4.89809C18.558 4.93817 18.9358 2.95416 19.6341 2.70537C20.5087 2.39308 20.8995 2.2042 22.3899 3.66801C23.6688 4.92468 24.668 7.17415 24.172 7.67809C23.7561 8.09632 22.9355 7.51501 22.0261 6.38134C21.5455 5.78098 21.1821 5.0715 21.0118 4.16957C20.8682 3.4085 20.3091 2.96686 20.3091 2.96686C20.3091 2.96686 20.6337 3.68824 20.6337 4.32551C20.6337 4.6735 20.6773 5.97462 21.2352 6.70473C21.1801 6.81147 21.1543 7.23288 21.0932 7.31343C20.444 6.52895 19.05 5.96748 18.8227 5.80201C19.5921 6.43253 21.3606 7.88086 22.04 9.26887C22.6824 10.5815 22.3038 11.7846 22.6288 12.0961C22.7213 12.1854 24.0105 13.7916 24.2585 14.5987C24.691 16.0054 24.2843 17.4835 23.718 18.4005L22.1368 18.6469C21.9054 18.5826 21.7495 18.5505 21.542 18.4302C21.6562 18.2279 21.8836 17.7231 21.886 17.6192L21.7967 17.4624C21.3047 18.1596 20.4801 18.8366 19.7952 19.2254C18.8989 19.7333 17.8656 19.6552 17.193 19.4468C15.284 18.858 13.4789 17.568 13.0437 17.2291C13.0437 17.2291 13.0302 17.4997 13.1123 17.5604C13.5936 18.1033 14.6963 19.0854 15.7621 19.7698L13.4901 20.0198L14.5642 28.3836C14.088 28.4519 14.0138 28.4852 13.4924 28.5594C13.0329 26.9361 12.154 25.8762 11.1934 25.2588C10.3462 24.7144 9.17761 24.5918 8.05902 24.8132L7.9872 24.8965C8.76493 24.8156 9.68313 24.9283 10.6263 25.5255C11.5521 26.1107 12.2981 27.6226 12.5726 28.5328C12.9242 29.6962 13.1675 30.9406 12.2211 32.2596C11.5477 33.1972 9.58195 33.7155 7.99395 32.5945C8.41813 33.2766 8.99151 33.8345 9.76329 33.9397C10.9093 34.0952 11.9969 33.8964 12.7457 33.1278C13.3849 32.4707 13.7238 31.0966 13.6345 29.6494L14.6459 29.5026L15.011 32.1001L31.7553 30.0839L30.3891 16.7593ZM20.202 9.70535C20.1551 9.81209 20.0817 9.88193 20.192 10.2291L20.1988 10.249L20.2162 10.2938L20.2623 10.3978C20.4611 10.8041 20.6793 11.1874 21.044 11.383C21.1384 11.3672 21.236 11.3564 21.3372 11.3513C21.6797 11.3362 21.8959 11.3906 22.0332 11.4644C22.0455 11.3961 22.0483 11.2961 22.0407 11.1489C22.0142 10.6343 22.1427 9.75892 21.1535 9.29823C20.7801 9.12483 20.2563 9.1784 20.0817 9.39466C20.1135 9.39863 20.142 9.40537 20.1643 9.41291C20.4281 9.50537 20.2492 9.59623 20.202 9.70535ZM22.9744 14.5075C22.8447 14.436 22.2384 14.4642 21.8122 14.515C21.0003 14.6106 20.1238 14.8924 19.9317 15.0423C19.5826 15.3122 19.7413 15.7828 19.9992 15.976C20.7226 16.5165 21.3567 16.8787 22.0261 16.7907C22.4372 16.7367 22.7994 16.0859 23.0562 15.4955C23.2319 15.0888 23.2319 14.6499 22.9744 14.5075ZM15.7867 10.3426C16.0157 10.1252 14.6463 9.83947 13.5837 10.564C12.8 11.0985 12.775 12.2445 13.5254 12.8941C13.6004 12.9583 13.6623 13.004 13.7202 13.0413C13.9392 12.9381 14.1888 12.8337 14.4761 12.7405C14.9614 12.583 15.3649 12.5016 15.6967 12.4584C15.8554 12.281 16.0399 11.9687 15.9939 11.4033C15.9312 10.6363 15.3499 10.7581 15.7867 10.3426Z",fill:"#632CA6",fillRule:"evenodd"})}),(0,h.jsx)("defs",{children:(0,h.jsx)("clipPath",{id:"clip0_2245_48088",children:(0,h.jsx)("rect",{fill:"white",height:"34",width:"31.766"})})})]}))},url:(0,s.yc)({keywords:["Datadog"]})},{name:"AWS",Icon:function(e){return"dark"===(0,O.If)().colorMode?(0,h.jsxs)(N.JO,(0,m.Z)((0,m.Z)({viewBox:"0 0 50 30"},e),{},{children:[(0,h.jsx)("title",{children:"AWS-Logo_White-Color"}),(0,h.jsx)("path",{d:"M14.09,10.85a4.7,4.7,0,0,0,.19,1.48,7.73,7.73,0,0,0,.54,1.19.77.77,0,0,1,.12.38.64.64,0,0,1-.32.49l-1,.7a.83.83,0,0,1-.44.15.69.69,0,0,1-.49-.23,3.8,3.8,0,0,1-.6-.77q-.25-.42-.51-1a6.14,6.14,0,0,1-4.89,2.3,4.54,4.54,0,0,1-3.32-1.19,4.27,4.27,0,0,1-1.22-3.2A4.28,4.28,0,0,1,3.61,7.75,6.06,6.06,0,0,1,7.69,6.46a12.47,12.47,0,0,1,1.76.13q.92.13,1.91.36V5.73a3.65,3.65,0,0,0-.79-2.66A3.81,3.81,0,0,0,7.86,2.3a7.71,7.71,0,0,0-1.79.22,12.78,12.78,0,0,0-1.79.57,4.55,4.55,0,0,1-.58.22l-.26,0q-.35,0-.35-.52V2a1.09,1.09,0,0,1,.12-.58,1.2,1.2,0,0,1,.47-.35A10.88,10.88,0,0,1,5.77.32,10.19,10.19,0,0,1,8.36,0a6,6,0,0,1,4.35,1.35,5.49,5.49,0,0,1,1.38,4.09ZM7.34,13.38a5.36,5.36,0,0,0,1.72-.31A3.63,3.63,0,0,0,10.63,12,2.62,2.62,0,0,0,11.19,11a5.63,5.63,0,0,0,.16-1.44v-.7a14.35,14.35,0,0,0-1.53-.28,12.37,12.37,0,0,0-1.56-.1,3.84,3.84,0,0,0-2.47.67A2.34,2.34,0,0,0,5,11a2.35,2.35,0,0,0,.61,1.76A2.4,2.4,0,0,0,7.34,13.38Zm13.35,1.8a1,1,0,0,1-.64-.16,1.3,1.3,0,0,1-.35-.65L15.81,1.51a3,3,0,0,1-.15-.67.36.36,0,0,1,.41-.41H17.7a1,1,0,0,1,.65.16,1.4,1.4,0,0,1,.33.65l2.79,11,2.59-11A1.17,1.17,0,0,1,24.39.6a1.1,1.1,0,0,1,.67-.16H26.4a1.1,1.1,0,0,1,.67.16,1.17,1.17,0,0,1,.32.65L30,12.39,32.88,1.25A1.39,1.39,0,0,1,33.22.6a1,1,0,0,1,.65-.16h1.54a.36.36,0,0,1,.41.41,1.36,1.36,0,0,1,0,.26,3.64,3.64,0,0,1-.12.41l-4,12.86a1.3,1.3,0,0,1-.35.65,1,1,0,0,1-.64.16H29.25a1,1,0,0,1-.67-.17,1.26,1.26,0,0,1-.32-.67L25.67,3.64,23.11,14.34a1.26,1.26,0,0,1-.32.67,1,1,0,0,1-.67.17Zm21.36.44a11.28,11.28,0,0,1-2.56-.29,7.44,7.44,0,0,1-1.92-.67,1,1,0,0,1-.61-.93v-.84q0-.52.38-.52a.9.9,0,0,1,.31.06l.42.17a8.77,8.77,0,0,0,1.83.58,9.78,9.78,0,0,0,2,.2,4.48,4.48,0,0,0,2.43-.55,1.76,1.76,0,0,0,.86-1.57,1.61,1.61,0,0,0-.45-1.16A4.29,4.29,0,0,0,43,9.22l-2.41-.76A5.15,5.15,0,0,1,38,6.78a3.94,3.94,0,0,1-.83-2.41,3.7,3.7,0,0,1,.45-1.85,4.47,4.47,0,0,1,1.19-1.37A5.27,5.27,0,0,1,40.51.29,7.4,7.4,0,0,1,42.6,0a8.87,8.87,0,0,1,1.12.07q.57.07,1.08.19t.95.26a4.27,4.27,0,0,1,.7.29,1.59,1.59,0,0,1,.49.41.94.94,0,0,1,.15.55v.79q0,.52-.38.52a1.76,1.76,0,0,1-.64-.2,7.74,7.74,0,0,0-3.2-.64,4.37,4.37,0,0,0-2.21.47,1.6,1.6,0,0,0-.79,1.48,1.58,1.58,0,0,0,.49,1.18,4.94,4.94,0,0,0,1.83.92L44.55,7a5.08,5.08,0,0,1,2.57,1.6A3.76,3.76,0,0,1,47.9,11a4.21,4.21,0,0,1-.44,1.93,4.4,4.4,0,0,1-1.21,1.47,5.43,5.43,0,0,1-1.85.93A8.25,8.25,0,0,1,42.05,15.62Z",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M45.19,23.81C39.72,27.85,31.78,30,25,30A36.64,36.64,0,0,1,.22,20.57c-.51-.46-.06-1.09.56-.74A49.78,49.78,0,0,0,25.53,26.4,49.23,49.23,0,0,0,44.4,22.53C45.32,22.14,46.1,23.14,45.19,23.81Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{d:"M47.47,21.21c-.7-.9-4.63-.42-6.39-.21-.53.06-.62-.4-.14-.74,3.13-2.2,8.27-1.57,8.86-.83s-.16,5.89-3.09,8.35c-.45.38-.88.18-.68-.32C46.69,25.8,48.17,22.11,47.47,21.21Z",fill:"#FF9900",fillRule:"evenodd"})]})):(0,h.jsxs)(N.JO,(0,m.Z)((0,m.Z)({viewBox:"0 0 50 30"},e),{},{children:[(0,h.jsxs)("g",{clipPath:"url(#aws-logo-clippath)",children:[(0,h.jsx)("path",{d:"M14.09 10.85C14.0741 11.3503 14.1383 11.8499 14.28 12.33C14.4261 12.7412 14.6068 13.1393 14.82 13.52C14.8927 13.6339 14.9341 13.765 14.94 13.9C14.9295 14.0012 14.895 14.0985 14.8393 14.1837C14.7837 14.2689 14.7085 14.3397 14.62 14.39L13.62 15.09C13.4906 15.1809 13.338 15.2329 13.18 15.24C13.0871 15.2367 12.9957 15.2146 12.9115 15.1751C12.8273 15.1355 12.752 15.0794 12.69 15.01C12.4577 14.7802 12.2561 14.5214 12.09 14.24C11.9234 13.96 11.7534 13.6267 11.58 13.24C10.9944 13.971 10.2492 14.5582 9.40165 14.9569C8.55408 15.3555 7.62654 15.555 6.69002 15.54C6.08523 15.5731 5.47992 15.4849 4.90974 15.2806C4.33956 15.0762 3.81605 14.7598 3.37002 14.35C2.95682 13.9297 2.63512 13.4284 2.42515 12.8777C2.21519 12.3269 2.12151 11.7387 2.15002 11.15C2.12351 10.5102 2.24092 9.87251 2.49361 9.28407C2.74629 8.69564 3.1278 8.1714 3.61002 7.75C4.7679 6.83817 6.2184 6.37956 7.69002 6.46C8.27902 6.46172 8.86716 6.50516 9.45002 6.59C10.0634 6.67667 10.7 6.79667 11.36 6.95V5.73C11.4571 4.77391 11.1733 3.8181 10.57 3.07C9.79824 2.47652 8.82855 2.201 7.86002 2.3C7.2568 2.30306 6.65602 2.3769 6.07002 2.52C5.46018 2.66583 4.86189 2.85635 4.28002 3.09C4.09191 3.17645 3.89813 3.24995 3.70002 3.31H3.44002C3.20668 3.31 3.09002 3.13667 3.09002 2.79V2C3.07572 1.7993 3.11725 1.59856 3.21002 1.42C3.33535 1.26629 3.49683 1.14604 3.68002 1.07C4.34928 0.749381 5.0496 0.498073 5.77002 0.320004C6.61607 0.10277 7.48654 -0.00477814 8.36002 4.30644e-06C9.93109 -0.139235 11.4938 0.345748 12.71 1.35C13.2045 1.90312 13.5817 2.55072 13.8189 3.25369C14.056 3.95665 14.1483 4.7004 14.09 5.44V10.85ZM7.34002 13.38C7.92645 13.3715 8.50751 13.2667 9.06002 13.07C9.66906 12.859 10.211 12.4897 10.63 12C10.8882 11.7121 11.0794 11.3706 11.19 11C11.3051 10.5289 11.3589 10.0449 11.35 9.56001V8.86C10.8455 8.73908 10.3347 8.64561 9.82002 8.58C9.30265 8.51382 8.78161 8.48042 8.26002 8.48C7.38429 8.41433 6.51252 8.6508 5.79002 9.15C5.52906 9.38022 5.32274 9.66575 5.18608 9.98578C5.04941 10.3058 4.98585 10.6523 5.00002 11C4.97638 11.3195 5.01829 11.6404 5.12319 11.943C5.22809 12.2457 5.39376 12.5237 5.61002 12.76C5.84351 12.9719 6.11648 13.1358 6.41332 13.2422C6.71017 13.3485 7.02506 13.3954 7.34002 13.38ZM20.69 15.18C20.4647 15.2006 20.2391 15.1442 20.05 15.02C19.873 14.8417 19.7514 14.6159 19.7 14.37L15.81 1.51C15.7345 1.29315 15.6842 1.06834 15.66 0.840004C15.6515 0.784214 15.6563 0.727213 15.6739 0.673599C15.6915 0.619986 15.7215 0.571262 15.7614 0.53136C15.8013 0.491457 15.85 0.461494 15.9036 0.443888C15.9572 0.426282 16.0142 0.421526 16.07 0.430004H17.7C17.9286 0.407082 18.1582 0.463583 18.35 0.590004C18.5155 0.773729 18.6293 0.997998 18.68 1.24L21.47 12.24L24.06 1.24C24.1 0.997284 24.2155 0.773342 24.39 0.600004C24.5905 0.476315 24.8253 0.420231 25.06 0.440004H26.4C26.6347 0.420231 26.8696 0.476315 27.07 0.600004C27.2428 0.777356 27.3548 1.00494 27.39 1.25L30 12.39L32.88 1.25C32.9331 1.0068 33.0505 0.782318 33.22 0.600004C33.4119 0.473583 33.6414 0.417082 33.87 0.440004H35.41C35.4658 0.431526 35.5228 0.436282 35.5764 0.453888C35.63 0.471494 35.6788 0.501457 35.7187 0.54136C35.7586 0.581262 35.7885 0.629986 35.8061 0.683599C35.8237 0.737213 35.8285 0.794214 35.82 0.850004C35.8283 0.936472 35.8283 1.02354 35.82 1.11C35.7881 1.2489 35.748 1.3858 35.7 1.52L31.7 14.38C31.6486 14.6259 31.527 14.8517 31.35 15.03C31.1609 15.1542 30.9353 15.2106 30.71 15.19H29.25C29.0136 15.2148 28.776 15.1545 28.58 15.02C28.4085 14.8339 28.297 14.6004 28.26 14.35L25.67 3.64L23.11 14.34C23.0731 14.5904 22.9616 14.8239 22.79 15.01C22.594 15.1445 22.3565 15.2048 22.12 15.18H20.69ZM42.05 15.62C41.1884 15.6214 40.3295 15.5241 39.49 15.33C38.8224 15.1956 38.1763 14.9702 37.57 14.66C37.3877 14.5828 37.2324 14.4532 37.1238 14.2876C37.0152 14.1221 36.9582 13.928 36.96 13.73V12.89C36.96 12.5433 37.0867 12.37 37.34 12.37C37.4461 12.3716 37.551 12.3919 37.65 12.43L38.07 12.6C38.657 12.8597 39.2706 13.0542 39.9 13.18C40.558 13.3152 41.2283 13.3822 41.9 13.38C42.7457 13.4301 43.5883 13.2394 44.33 12.83C44.6007 12.6692 44.8233 12.4387 44.9745 12.1625C45.1258 11.8864 45.2002 11.5747 45.19 11.26C45.1957 11.0465 45.1589 10.8339 45.0816 10.6348C45.0043 10.4356 44.8882 10.2538 44.74 10.1C44.2353 9.677 43.6399 9.37589 43 9.22001L40.59 8.46C39.5752 8.17803 38.6712 7.59168 38 6.78C37.464 6.09083 37.172 5.24311 37.17 4.37C37.1561 3.72464 37.3112 3.08686 37.62 2.52C37.9188 1.98678 38.3239 1.5205 38.81 1.15C39.3197 0.76244 39.8958 0.471012 40.51 0.290004C41.1893 0.0940008 41.8931 -0.00365839 42.6 4.30644e-06C42.9745 -0.000325499 43.3485 0.0230546 43.72 0.0700043C44.1 0.116671 44.46 0.180004 44.8 0.260004C45.14 0.340004 45.4567 0.426671 45.75 0.520004C45.9915 0.595737 46.2257 0.692786 46.45 0.810004C46.6394 0.912109 46.8061 1.05159 46.94 1.22C47.0457 1.38339 47.0982 1.57556 47.09 1.77V2.56C47.09 2.90667 46.9634 3.08 46.71 3.08C46.4858 3.05497 46.2686 2.98707 46.07 2.88C45.061 2.44167 43.97 2.22349 42.87 2.24C42.1049 2.20023 41.3427 2.36231 40.66 2.71C40.4043 2.8594 40.195 3.07685 40.0555 3.33816C39.916 3.59947 39.8518 3.89436 39.87 4.19C39.865 4.40997 39.906 4.62855 39.9904 4.83174C40.0748 5.03494 40.2007 5.21828 40.36 5.37C40.899 5.80115 41.5224 6.11455 42.19 6.29L44.55 7C45.5494 7.25975 46.4459 7.81787 47.12 8.60001C47.6487 9.28626 47.9243 10.134 47.9 11C47.9088 11.6692 47.758 12.3308 47.46 12.93C47.1688 13.5024 46.7558 14.0042 46.25 14.4C45.6987 14.8258 45.0706 15.1415 44.4 15.33C43.6347 15.5392 42.8432 15.6368 42.05 15.62Z",fill:"#252F3E"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M45.19 23.81C39.72 27.85 31.78 30 25 30C15.8524 30.0602 7.01321 26.6965 0.219997 20.57C-0.290003 20.11 0.159997 19.48 0.779997 19.83C8.31593 24.1408 16.8482 26.4057 25.53 26.4C32.0135 26.3652 38.4262 25.05 44.4 22.53C45.32 22.14 46.1 23.14 45.19 23.81Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M47.47 21.21C46.77 20.31 42.84 20.79 41.08 21C40.55 21.06 40.46 20.6 40.94 20.26C44.07 18.06 49.21 18.69 49.8 19.43C50.39 20.17 49.64 25.32 46.71 27.78C46.26 28.16 45.83 27.96 46.03 27.46C46.69 25.8 48.17 22.11 47.47 21.21Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{d:"M14.09 10.85C14.0741 11.3503 14.1383 11.8499 14.28 12.33C14.4261 12.7412 14.6068 13.1393 14.82 13.52C14.8927 13.6339 14.9341 13.765 14.94 13.9C14.9295 14.0012 14.895 14.0985 14.8393 14.1837C14.7837 14.2689 14.7085 14.3397 14.62 14.39L13.62 15.09C13.4906 15.1809 13.338 15.2329 13.18 15.24C13.0871 15.2367 12.9957 15.2146 12.9115 15.1751C12.8273 15.1355 12.752 15.0794 12.69 15.01C12.4577 14.7802 12.2561 14.5214 12.09 14.24C11.9234 13.96 11.7534 13.6267 11.58 13.24C10.9944 13.971 10.2492 14.5582 9.40165 14.9569C8.55408 15.3555 7.62654 15.555 6.69002 15.54C6.08523 15.5731 5.47992 15.4849 4.90974 15.2806C4.33956 15.0762 3.81605 14.7598 3.37002 14.35C2.95682 13.9297 2.63512 13.4284 2.42515 12.8777C2.21519 12.3269 2.12151 11.7387 2.15002 11.15C2.12351 10.5102 2.24092 9.87251 2.49361 9.28407C2.74629 8.69564 3.1278 8.1714 3.61002 7.75C4.7679 6.83817 6.2184 6.37956 7.69002 6.46C8.27902 6.46172 8.86716 6.50516 9.45002 6.59C10.0634 6.67667 10.7 6.79667 11.36 6.95V5.73C11.4571 4.77391 11.1733 3.8181 10.57 3.07C9.79824 2.47652 8.82855 2.201 7.86002 2.3C7.2568 2.30306 6.65602 2.3769 6.07002 2.52C5.46018 2.66583 4.86189 2.85635 4.28002 3.09C4.09191 3.17645 3.89813 3.24995 3.70002 3.31H3.44002C3.20668 3.31 3.09002 3.13667 3.09002 2.79V2C3.07572 1.7993 3.11725 1.59856 3.21002 1.42C3.33535 1.26629 3.49683 1.14604 3.68002 1.07C4.34928 0.749381 5.0496 0.498073 5.77002 0.320004C6.61607 0.10277 7.48654 -0.00477814 8.36002 4.30644e-06C9.93109 -0.139235 11.4938 0.345748 12.71 1.35C13.2045 1.90312 13.5817 2.55072 13.8189 3.25369C14.056 3.95665 14.1483 4.7004 14.09 5.44V10.85ZM7.34002 13.38C7.92645 13.3715 8.50751 13.2667 9.06002 13.07C9.66906 12.859 10.211 12.4897 10.63 12C10.8882 11.7121 11.0794 11.3706 11.19 11C11.3051 10.5289 11.3589 10.0449 11.35 9.56001V8.86C10.8455 8.73908 10.3347 8.64561 9.82002 8.58C9.30265 8.51382 8.78161 8.48042 8.26002 8.48C7.38429 8.41433 6.51252 8.6508 5.79002 9.15C5.52906 9.38022 5.32274 9.66575 5.18608 9.98578C5.04941 10.3058 4.98585 10.6523 5.00002 11C4.97638 11.3195 5.01829 11.6404 5.12319 11.943C5.22809 12.2457 5.39376 12.5237 5.61002 12.76C5.84351 12.9719 6.11648 13.1358 6.41332 13.2422C6.71017 13.3485 7.02506 13.3954 7.34002 13.38ZM20.69 15.18C20.4647 15.2006 20.2391 15.1442 20.05 15.02C19.873 14.8417 19.7514 14.6159 19.7 14.37L15.81 1.51C15.7345 1.29315 15.6842 1.06834 15.66 0.840004C15.6515 0.784214 15.6563 0.727213 15.6739 0.673599C15.6915 0.619986 15.7215 0.571262 15.7614 0.53136C15.8013 0.491457 15.85 0.461494 15.9036 0.443888C15.9572 0.426282 16.0142 0.421526 16.07 0.430004H17.7C17.9286 0.407082 18.1582 0.463583 18.35 0.590004C18.5155 0.773729 18.6293 0.997998 18.68 1.24L21.47 12.24L24.06 1.24C24.1 0.997284 24.2155 0.773342 24.39 0.600004C24.5905 0.476315 24.8253 0.420231 25.06 0.440004H26.4C26.6347 0.420231 26.8696 0.476315 27.07 0.600004C27.2428 0.777356 27.3548 1.00494 27.39 1.25L30 12.39L32.88 1.25C32.9331 1.0068 33.0505 0.782318 33.22 0.600004C33.4119 0.473583 33.6414 0.417082 33.87 0.440004H35.41C35.4658 0.431526 35.5228 0.436282 35.5764 0.453888C35.63 0.471494 35.6788 0.501457 35.7187 0.54136C35.7586 0.581262 35.7885 0.629986 35.8061 0.683599C35.8237 0.737213 35.8285 0.794214 35.82 0.850004C35.8283 0.936472 35.8283 1.02354 35.82 1.11C35.7881 1.2489 35.748 1.3858 35.7 1.52L31.7 14.38C31.6486 14.6259 31.527 14.8517 31.35 15.03C31.1609 15.1542 30.9353 15.2106 30.71 15.19H29.25C29.0136 15.2148 28.776 15.1545 28.58 15.02C28.4085 14.8339 28.297 14.6004 28.26 14.35L25.67 3.64L23.11 14.34C23.0731 14.5904 22.9616 14.8239 22.79 15.01C22.594 15.1445 22.3565 15.2048 22.12 15.18H20.69ZM42.05 15.62C41.1884 15.6214 40.3295 15.5241 39.49 15.33C38.8224 15.1956 38.1763 14.9702 37.57 14.66C37.3877 14.5828 37.2324 14.4532 37.1238 14.2876C37.0152 14.1221 36.9582 13.928 36.96 13.73V12.89C36.96 12.5433 37.0867 12.37 37.34 12.37C37.4461 12.3716 37.551 12.3919 37.65 12.43L38.07 12.6C38.657 12.8597 39.2706 13.0542 39.9 13.18C40.558 13.3152 41.2283 13.3822 41.9 13.38C42.7457 13.4301 43.5883 13.2394 44.33 12.83C44.6007 12.6692 44.8233 12.4387 44.9745 12.1625C45.1258 11.8864 45.2002 11.5747 45.19 11.26C45.1957 11.0465 45.1589 10.8339 45.0816 10.6348C45.0043 10.4356 44.8882 10.2538 44.74 10.1C44.2353 9.677 43.6399 9.37589 43 9.22001L40.59 8.46C39.5752 8.17803 38.6712 7.59168 38 6.78C37.464 6.09083 37.172 5.24311 37.17 4.37C37.1561 3.72464 37.3112 3.08686 37.62 2.52C37.9188 1.98678 38.3239 1.5205 38.81 1.15C39.3197 0.76244 39.8958 0.471012 40.51 0.290004C41.1893 0.0940008 41.8931 -0.00365839 42.6 4.30644e-06C42.9745 -0.000325499 43.3485 0.0230546 43.72 0.0700043C44.1 0.116671 44.46 0.180004 44.8 0.260004C45.14 0.340004 45.4567 0.426671 45.75 0.520004C45.9915 0.595737 46.2257 0.692786 46.45 0.810004C46.6394 0.912109 46.8061 1.05159 46.94 1.22C47.0457 1.38339 47.0982 1.57556 47.09 1.77V2.56C47.09 2.90667 46.9634 3.08 46.71 3.08C46.4858 3.05497 46.2686 2.98707 46.07 2.88C45.061 2.44167 43.97 2.22349 42.87 2.24C42.1049 2.20023 41.3427 2.36231 40.66 2.71C40.4043 2.8594 40.195 3.07685 40.0555 3.33816C39.916 3.59947 39.8518 3.89436 39.87 4.19C39.865 4.40997 39.906 4.62855 39.9904 4.83174C40.0748 5.03494 40.2007 5.21828 40.36 5.37C40.899 5.80115 41.5224 6.11455 42.19 6.29L44.55 7C45.5494 7.25975 46.4459 7.81787 47.12 8.60001C47.6487 9.28626 47.9243 10.134 47.9 11C47.9088 11.6692 47.758 12.3308 47.46 12.93C47.1688 13.5024 46.7558 14.0042 46.25 14.4C45.6987 14.8258 45.0706 15.1415 44.4 15.33C43.6347 15.5392 42.8432 15.6368 42.05 15.62Z",fill:"#252F3E"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M45.19 23.81C39.72 27.85 31.78 30 25 30C15.8524 30.0602 7.01321 26.6965 0.219997 20.57C-0.290003 20.11 0.159997 19.48 0.779997 19.83C8.31593 24.1408 16.8482 26.4057 25.53 26.4C32.0135 26.3652 38.4262 25.05 44.4 22.53C45.32 22.14 46.1 23.14 45.19 23.81Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M47.47 21.21C46.77 20.31 42.84 20.79 41.08 21C40.55 21.06 40.46 20.6 40.94 20.26C44.07 18.06 49.21 18.69 49.8 19.43C50.39 20.17 49.64 25.32 46.71 27.78C46.26 28.16 45.83 27.96 46.03 27.46C46.69 25.8 48.17 22.11 47.47 21.21Z",fill:"#FF9900",fillRule:"evenodd"})]}),(0,h.jsx)("defs",{children:(0,h.jsx)("clipPath",{id:"aws-logo-clippath",children:(0,h.jsx)("rect",{fill:"white",height:"30",width:"50"})})})]}))},url:(0,s.yc)({query:"AWS"})},{name:"MongoDB",Icon:function(e){return(0,h.jsxs)(N.JO,(0,m.Z)((0,m.Z)({viewBox:"0 0 18 37"},e),{},{children:[(0,h.jsx)("path",{d:"M9.09725 0.469971L10.1001 2.35348C10.3255 2.70106 10.5698 3.00871 10.8575 3.29523C11.7009 4.12816 12.4871 5.01714 13.2107 5.95609C14.9099 8.18718 16.056 10.6649 16.8744 13.3445C17.3653 14.9814 17.6318 16.6606 17.6518 18.3586C17.734 23.4349 15.9937 27.7937 12.485 31.4163C11.9143 31.9908 11.2977 32.5178 10.6414 32.9921C10.2938 32.9921 10.1294 32.7256 9.98617 32.4802C9.72529 32.0251 9.55165 31.5253 9.4742 31.0065C9.3509 30.3923 9.26987 29.7782 9.3098 29.1441V28.8576C9.28161 28.7965 8.97513 0.614404 9.09725 0.469971Z",fill:"#599636"}),(0,h.jsx)("path",{d:"M9.09723 0.407647C9.05614 0.325449 9.01504 0.387684 8.97394 0.427609C8.9939 0.838599 8.85064 1.20497 8.62636 1.5549C8.37977 1.90248 8.05333 2.16903 7.72571 2.45555C5.90562 4.0314 4.47304 5.93487 3.3258 8.0638C1.79927 10.929 1.01253 13.9997 0.789419 17.2324C0.687259 18.3984 1.15813 22.513 1.52567 23.7002C2.52848 26.8519 4.32978 29.4928 6.66301 31.785C7.23605 32.3369 7.84901 32.8488 8.4831 33.3409C8.66746 33.3409 8.68742 33.1765 8.72969 33.0543C8.81052 32.793 8.87214 32.5261 8.91405 32.2558L9.32504 29.1863L9.09723 0.407647Z",fill:"#6CAC48"}),(0,h.jsx)("path",{d:"M10.1001 34.2391C10.1412 33.7694 10.3666 33.3796 10.6121 32.9909C10.3655 32.8888 10.1823 32.6856 10.039 32.459C9.91549 32.2444 9.81324 32.0183 9.73372 31.7838C9.44719 30.9243 9.38613 30.0224 9.30394 29.1441V28.6122C9.20177 28.6944 9.18064 29.3895 9.18064 29.4929C9.12088 30.4212 8.99769 31.3443 8.81192 32.2559C8.75086 32.6246 8.70976 32.9921 8.48312 33.3197C8.48312 33.3608 8.48312 33.4019 8.50309 33.463C8.87181 34.548 8.97279 35.6529 9.03503 36.779V37.19C9.03503 37.6808 9.01507 37.5775 9.42254 37.7419C9.58693 37.803 9.77012 37.8241 9.93452 37.9462C10.0578 37.9462 10.0778 37.8441 10.0778 37.7619L10.0167 37.0867V35.2032C9.99675 34.8744 10.0578 34.548 10.0989 34.2403L10.1001 34.2391Z",fill:"#C2BFBF"})]}))},url:(0,s.yc)({keywords:["MongoDB"]})},{name:"Aqua Security",imgsrc:"/assets/aqua-security.png",url:(0,s.yc)({keywords:["aqua"]})}],J=function(e){var t=e.url,i=e.imgsrc,n=e.label,c=e.Icon,r=(0,O.ff)(void 0,"invert(100%) brightness(1.5)");return(0,h.jsx)(o.O,{color:"link","data-event":d.a.INFO.eventName(n),"data-testid":u.infoSectionIcon,fontWeight:"bold",to:t,children:(0,h.jsxs)(a.Kq,{align:"center",spacing:2,textAlign:"center",children:[i&&(0,h.jsx)(q.Ee,{"aria-label":n,filter:"AWS CDK"===n?r:void 0,h:8,src:i}),c&&(0,h.jsx)(c,{"aria-label":n,h:8,w:8}),(0,h.jsx)("span",{children:n})]})})},Y=function(){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(a.iz,{display:{xl:"none"},mx:d.W.X,w:"auto"}),(0,h.jsx)(a.iz,{display:{base:"none",xl:"initial"},h:"auto",my:d.W.Y,orientation:"vertical"})]})},Q=function(e){var t=e.children;return(0,h.jsx)(a.kC,{align:"center",pt:4,sx:{gap:"2rem"},children:t})},$=function(){return(0,h.jsx)(a.kC,{bg:"bgSecondary","data-testid":u.infoContainer,direction:"column",children:(0,h.jsxs)(a.rj,{templateColumns:{base:"1fr",xl:"1fr auto 1fr auto 1fr"},templateRows:{base:"1fr auto 1fr auto 1fr",xl:"auto"},children:[(0,h.jsx)(_,{description:"Find libraries for AWS Cloud Development Kit (AWS CDK), which generates AWS CloudFormation templates, CDK for Terraform (CDKtf), which generates HashiCorp Terraform configuration files, and CDK for Kubernetes (CDK8s), which generates Kubernetes manifests.",title:"One home for all CDKs",children:(0,h.jsx)(Q,{children:Object.entries(X.mh).map((function(e){var t=(0,f.Z)(e,2),i=t[0],n=t[1],a=n.name,c=n.imgsrc;return(0,h.jsx)(J,{imgsrc:c,label:a,url:(0,s.yc)({cdkType:i,sort:v.W.DownloadsDesc})},i)}))})}),(0,h.jsx)(Y,{}),(0,h.jsx)(_,{description:"Define, test, and deploy cloud infrastructure using high level programming languages such as TypeScript, Python, Java, and .NET. Find documentation, API references and code samples to quickly build your application.",title:"Support across languages",children:(0,h.jsx)(Q,{children:Object.entries(U.kP).filter((function(e){var t=(0,f.Z)(e,1)[0];return U.dX.has(t)})).map((function(e){var t=(0,f.Z)(e,2),i=t[0],n=t[1],a=n.icon,c=n.name;return(0,h.jsx)(J,{Icon:a,label:c,url:(0,s.yc)({languages:[i],sort:v.W.DownloadsDesc})},i)}))})}),(0,h.jsx)(Y,{}),(0,h.jsx)(_,{description:"Find construct libraries published by the community and cloud service providers such as Datadog, Amazon Web Services (AWS), MongoDB, Aqua Security, and more.",title:"Provision a range of cloud resources",children:(0,h.jsx)(Q,{children:G.map((function(e){var t=e.url,i=e.name,n=e.imgsrc,a=e.Icon;return(0,h.jsx)(J,{Icon:a,imgsrc:n,label:i,url:t},i)}))})})]})})},ee=function(){var e,t=(0,r.r)().data,i=(null!==(e=null===t||void 0===t?void 0:t.packages.length)&&void 0!==e?e:0)>0;return(0,h.jsx)(c.T,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.",suffix:!1},pageName:"home",children:(0,h.jsxs)(B,{as:a.kC,"data-testid":u.page,direction:"column",children:[(0,h.jsx)(K,{}),(0,h.jsx)($,{}),i?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(x,{}),(0,h.jsx)(T,{}),(0,h.jsx)(V,{})]}):null]})})}}}]);
2
- //# sourceMappingURL=58.e067338b.chunk.js.map
1
+ "use strict";(self.webpackChunkconstruct_hub_webapp=self.webpackChunkconstruct_hub_webapp||[]).push([[58],{46058:function(e,t,i){i.r(t),i.d(t,{default:function(){return ee}});var n,a=i(28735),c=i(41712),r=i(95038),l=i(82504),o=i(67003),C=i(56804),s=i(19748),d=i(8812),u=(0,i(88606).$)("homeRedesign",["page","packageGrid","heroHeader","heroSubtitle","infoContainer","infoSection","infoSectionHeading","infoSectionDescription","infoSectionIcon","featuredContainer","featuredHeader","featuredGrid","cdkTypeSection","cdkTypeSectionHeading","cdkTypeSectionDescription","cdkTypeTab","cdkTypeGrid","cdkTypeSeeAllButton","categoriesContainer","categoriesHeader","categoriesDescription"]),h=i(80184),p=[{title:"Monitoring",url:(0,s.yc)({keywords:["monitoring"]})},{title:"Containers",url:(0,s.yc)({keywords:["containers"]})},{title:"Serverless",url:(0,s.yc)({keywords:["serverless"]})},{title:"Databases",url:(0,s.yc)({keywords:["databases"]})},{title:"Utilities",url:(0,s.yc)({keywords:["utilities"]})},{title:"Deployment",url:(0,s.yc)({keywords:["deployment"]})},{title:"Websites",url:(0,s.yc)({keywords:["websites"]})},{title:"Security",url:(0,s.yc)({keywords:["security"]})},{title:"Compliance",url:(0,s.yc)({keywords:["compliance"]})},{title:"Network",url:(0,s.yc)({keywords:["network"]})},{title:"Artificial Intelligence (AI)",url:(0,s.yc)({keywords:["artificial intelligence (ai)"]})},{title:"Cloud Services Integrations",url:(0,s.yc)({keywords:["cloud services integrations"]})}],x=function(){var e,t=null!==(e=(0,C.E)("categories"))&&void 0!==e?e:p;return(0,h.jsxs)(a.kC,{"data-testid":u.categoriesContainer,direction:"column",my:4,px:d.W.X,py:d.W.Y,zIndex:"0",children:[(0,h.jsx)(a.X6,{as:"h3",color:"white","data-testid":u.categoriesHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:1,children:"Search by use case"}),(0,h.jsx)(a.xv,{color:"white","data-testid":u.categoriesDescription,lineHeight:"md",mb:5,children:"Find the right construct for your problem set from a community that\u2019s already tackled it."}),(0,h.jsx)(a.Eq,{children:t.map((function(e){return(0,h.jsx)(a.Uc,{children:(0,h.jsx)(o.O,{"data-event":d.a.USE_CASE.eventName(e.title),to:e.url,children:(0,h.jsx)(l.zx,{as:a.xu,boxShadow:"0px 4px 4px rgba(73, 73, 73, 0.63)",color:"textPrimary",colorScheme:"gray",size:"md",children:e.title})})},e.title)}))})]})},m=i(29439),f=i(1413),g=i(45987),j=i(13822),y=i(31959),v=i(16478),b=i(29499),F=i(59534),L=i(45832),w=i(4942),k=i(72791),S=i(79271),Z=i(64159),D=function(e){var t=e["data-event"],i=e.packages;return(0,h.jsx)(a.rj,{"data-testid":u.packageGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:i.map((function(e){return(0,h.jsx)(Z.L,{"data-event":t,pkg:e},"".concat(e.name,"-").concat(e.version))}))})},M=["data-event","label","data","tag"],A={community:{"data-event":d.a.PUBLISHER.eventName("Community"),label:"Community",tag:"community"},aws:{"data-event":d.a.PUBLISHER.eventName("AWS"),label:"AWS",tag:"aws-published"},hashicorp:{"data-event":d.a.PUBLISHER.eventName("HashiCorp"),label:"HashiCorp",tag:"hashicorp-published"}},H=function(e){var t=e["data-event"],i=e.data,n=e.label;return(0,h.jsx)(j.OK,{"data-event":(0,F.oJ)(t,"Tab"),"data-testid":u.cdkTypeTab,"data-value":n,isDisabled:i.page.length<1,children:n})},W=(0,y.Gp)((function(e,t){var i=e["data-event"],n=e.label,c=e.data,r=e.tag,C=(0,g.Z)(e,M);return(0,h.jsxs)(j.x4,(0,f.Z)((0,f.Z)({"data-testid":u.cdkTypeGrid,ref:t},C),{},{p:0,children:[(0,h.jsx)(D,{"data-event":i,packages:c.page}),(0,h.jsx)(a.kC,{justify:"center",w:"full",children:(0,h.jsxs)(l.zx,{as:o.O,colorScheme:"brand","data-event":(0,F.oJ)(i,"See All"),"data-testid":u.cdkTypeSeeAllButton,my:8,onClick:function(){return window.scrollTo(0,0)},to:(0,s.yc)({tags:r?[r]:void 0,sort:v.W.DownloadsDesc}),children:["See all ",n," constructs"]})})]}))})),T=function(){var e=(0,L.D)({tags:[A.community.tag],limit:4,sort:v.W.DownloadsDesc}),t=(0,L.D)({tags:[A.aws.tag],limit:4,sort:v.W.DownloadsDesc}),i=(0,L.D)({tags:[A.hashicorp.tag],limit:4,sort:v.W.DownloadsDesc}),n=function(e,t){var i=(0,S.k6)(),n=(0,k.useState)((function(){var n,a=null===(n=i.location.state)||void 0===n?void 0:n[e];return null!==a&&void 0!==a?a:t})),a=(0,m.Z)(n,2),c=a[0],r=a[1];return[c,function(t){i.replace((0,f.Z)((0,f.Z)({},i.location),{},{state:(0,f.Z)((0,f.Z)({},i.location.state),{},(0,w.Z)({},e,t))})),r(t)}]}("cdkTypeTab",0),c=(0,m.Z)(n,2),r=c[0],l=c[1];return(0,h.jsxs)(a.kC,{bg:"bgSecondary",color:"textPrimary","data-testid":u.cdkTypeSection,direction:"column",px:d.W.X,py:d.W.Y,zIndex:"0",children:[(0,h.jsx)(a.X6,{as:"h3","data-testid":u.cdkTypeSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:"Search by publisher"}),(0,h.jsxs)(a.xv,{"data-testid":u.cdkTypeSectionDescription,lineHeight:"md",mb:5,children:["Find constructs published by the open-source community, AWS, and cloud technology providers in one location. You can also include your own construct libraries on Construct Hub by publishing them on npm registry. More concrete guidance can be found in the"," ",(0,h.jsx)(o.O,{color:"link",to:b.Z6.CONTRIBUTE,children:"Contribute"})," ","page."]}),(0,h.jsxs)(j.mQ,{defaultIndex:r,onChange:function(e){return l(e)},variant:"line",children:[(0,h.jsxs)(j.td,{children:[(0,h.jsx)(H,(0,f.Z)({data:e},A.community)),(0,h.jsx)(H,(0,f.Z)({data:t},A.aws)),(0,h.jsx)(H,(0,f.Z)({data:i},A.hashicorp))]}),(0,h.jsxs)(j.nP,{minH:"28.5rem",children:[(0,h.jsx)(W,(0,f.Z)((0,f.Z)({data:e},A.community),{},{label:A.community.label.toLowerCase()})),(0,h.jsx)(W,(0,f.Z)({data:t},A.aws)),(0,h.jsx)(W,(0,f.Z)({data:i},A.hashicorp))]})]})]})},z=i(88907),I=i(59707),V=function(){var e=(0,C.E)("featuredPackages"),t=(0,m.Z)((null!==e&&void 0!==e?e:z.x).sections,1)[0],i=void 0===t?{name:"Recently Updated",showLastUpdated:4}:t,n=function(e){var t=e.showLastUpdated,i=e.showPackages,n=(0,r.r)(),a=n.isLoading,c=n.error,l=(0,L.D)({limit:25,sort:v.W.PublishDateDesc}).results,o=(0,I.A)();return(0,k.useMemo)((function(){return a||c||!l?[]:t?l.slice(0,t):i&&o?i.map((function(e){var t=o.findByName(e.name,{dedup:!0}),i=(0,m.Z)(t,1)[0];if(i)return(0,f.Z)((0,f.Z)({},i),{},{comment:e.comment})})).filter((function(e){return void 0!==e})):void 0}),[a,c,l,t,i,o])}(i);return n?(0,h.jsxs)(a.kC,{color:"white","data-testid":u.featuredContainer,direction:"column",px:d.W.X,py:d.W.Y,zIndex:"0",children:[(0,h.jsx)(a.X6,{as:"h3","data-testid":u.featuredHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",children:i.name}),(0,h.jsx)(a.rj,{"data-testid":u.featuredGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:null===n||void 0===n?void 0:n.slice(0,4).map((function(e){return(0,h.jsx)(Z.L,{"data-event":d.a.FEATURED,pkg:e},e.name)}))}),(0,h.jsx)(l.zx,{as:o.O,boxShadow:"md",colorScheme:"brand","data-event":(0,F.oJ)(d.a.FEATURED,"See All"),mx:"auto",my:8,onClick:function(){return window.scrollTo(0,0)},to:(0,s.yc)({sort:v.W.DownloadsDesc}),children:"See all constructs"})]}):null},R=i(30168),E=(0,i(52554).F4)(n||(n=(0,R.Z)(["\n 0% {\n background-position:0% 50%;\n }\n\n 50% {\n background-position:100% 50%;\n }\n\n 100% {\n background-position:0% 50%;\n }\n"]))),B=(0,y.Gp)((function(e,t){return(0,h.jsx)(a.xu,(0,f.Z)({animation:"".concat(E," 10s linear infinite"),bgGradient:"linear(to-bl, brand.900, brand.500)",bgSize:"200% 200%",ref:t},e))})),P=i(99185),K=function(){return(0,h.jsxs)(a.kC,{align:"center",color:"white",direction:"column",h:"20rem",justify:"center",px:d.W.X,py:d.W.Y,textAlign:"center",zIndex:"1",children:[(0,h.jsx)(a.X6,{as:"h1","data-testid":u.heroHeader,size:"xl",children:"Simplify cloud development with constructs"}),(0,h.jsx)(a.X6,{as:"h2","data-testid":u.heroSubtitle,fontWeight:"normal",mt:4,size:"md",children:"Find and use open-source Cloud Development Kit (CDK) libraries"}),(0,h.jsx)(a.xu,{color:"initial",maxW:"36rem",mt:8,mx:"auto",w:"full",children:(0,h.jsxs)(P.E1,{"data-event":d.a.SEARCH,hasButton:!0,children:[(0,h.jsx)(P.Fj,{}),(0,h.jsx)(P.Xj,{})]})})]})},O=i(28227),q=i(53046),X=i(30791),U=i(86617),N=i(69113),_=function(e){var t=e.title,i=e.description,n=e.children;return(0,h.jsxs)(a.kC,{color:"textPrimary","data-testid":u.infoSection,direction:"column",px:d.W.X,py:d.W.Y,children:[(0,h.jsx)(a.X6,{as:"h3","data-testid":u.infoSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:t}),(0,h.jsxs)(a.kC,{direction:"column",h:"full",justify:"space-between",children:[(0,h.jsx)(a.xv,{"data-testid":u.infoSectionDescription,fontSize:"lg",mb:4,children:i}),n]})]})},G=[{name:"Datadog",Icon:function(e){return"dark"===(0,O.If)().colorMode?(0,h.jsxs)(N.JO,(0,f.Z)((0,f.Z)({},e),{},{version:"1.1",viewBox:"0 0 800.5 801",x:"0px",y:"0px",children:[(0,h.jsx)("g",{children:(0,h.jsx)("path",{d:"M546.48,341.44c0.01,0,0.01-0.01,0.01-0.01h-0.01V341.44z",fill:"none"})}),(0,h.jsxs)("g",{children:[(0,h.jsx)("path",{d:"M22.42,780.42h26.36c24.81,0,37.23-14.58,37.23-43.77c0-24.84-12.41-37.27-37.23-37.27H22.42V780.42z M52.12,799.65H0.25V680.22h51.87c37.37,0,56.07,18.82,56.07,56.45C108.19,778.65,89.49,799.65,52.12,799.65",fill:"#FFFFFF"}),(0,h.jsx)("polygon",{fill:"#FFFFFF",points:"131.42,799.65 108.66,799.65 159.45,680.22 183.29,680.22 235.19,799.65 211.34,799.65 196.28,767.07 157.96,767.07 165.56,747.87 190.42,747.87 170.84,703.01 \t"}),(0,h.jsx)("polygon",{fill:"#FFFFFF",points:"222.65,680.22 313.45,680.22 313.45,699.42 279.15,699.42 279.15,799.65 256.98,799.65 256.98,699.42 222.65,699.42 \t"}),(0,h.jsx)("polygon",{fill:"#FFFFFF",points:"324.85,799.65 302.08,799.65 352.87,680.22 376.72,680.22 428.61,799.65 404.74,799.65 389.69,767.07 351.36,767.07 358.97,747.87 383.82,747.87 364.25,703.01 \t"}),(0,h.jsx)("path",{d:"M465.5,780.42h26.36c24.83,0,37.25-14.58,37.25-43.77c0-24.84-12.42-37.27-37.25-37.27H465.5V780.42z M495.21,799.65h-51.87V680.22h51.87c37.4,0,56.07,18.82,56.07,56.45C551.28,778.65,532.6,799.65,495.21,799.65",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M626.4,781.26c24.09,0,36.13-13.89,36.13-41.68c0-27.36-12.04-41.03-36.13-41.03 c-24.72,0-37.08,13.67-37.08,41.03C589.32,767.37,601.68,781.26,626.4,781.26 M566.3,740.1c0-40.49,20.04-60.73,60.1-60.73 c39.45,0,59.15,20.24,59.15,60.73c0,40.26-19.7,60.4-59.15,60.4C588.11,800.5,568.09,780.36,566.3,740.1",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M778.07,751.32v27.97c-5.11,1.34-9.7,1.99-13.72,1.99c-27.11,0-40.66-14.35-40.66-43 c0-26.48,14.36-39.7,43.08-39.7c12,0,23.16,2.23,33.48,6.69V685.2c-10.32-3.89-22.04-5.83-35.14-5.83 c-42.95,0-64.44,19.62-64.44,58.91c0,41.47,21.11,62.23,63.34,62.23c14.53,0,26.6-2.12,36.25-6.36v-62.47h-35.82l-7.49,19.64 L778.07,751.32L778.07,751.32z",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M349.36,166.26c21.81-14.87,49.91-9.02,45.2-4.55c-8.97,8.54,2.97,6.01,4.26,21.77 c0.95,11.6-2.85,18-6.1,21.64c-6.8,0.89-15.08,2.56-25.04,5.79c-5.89,1.91-11.03,4.04-15.51,6.18c-1.18-0.78-2.47-1.71-4-3.03 C332.77,200.74,333.28,177.22,349.36,166.26 M479.63,258.13c3.95-3.06,21.94-8.84,38.59-10.82c8.74-1.04,21.2-1.62,23.86-0.13 c5.28,2.92,5.28,11.93,1.67,20.26c-5.26,12.11-12.71,25.47-21.13,26.57c-13.74,1.81-26.75-5.62-41.6-16.71 C475.72,273.32,472.47,263.67,479.63,258.13 M504.7,140.3c20.3,9.45,17.64,27.42,18.2,37.97c0.16,3.03,0.1,5.07-0.16,6.49 c-2.82-1.53-7.25-2.64-14.29-2.33c-2.06,0.09-4.07,0.33-6,0.64c-7.49-4.01-11.96-11.87-16.06-20.22c-0.37-0.77-0.66-1.45-0.93-2.13 c-0.11-0.3-0.25-0.64-0.36-0.91c-0.05-0.15-0.09-0.28-0.14-0.42c-2.25-7.13-0.74-8.56,0.21-10.76c0.98-2.24,4.64-4.1-0.77-5.97 c-0.46-0.17-1.05-0.28-1.7-0.39C486.28,137.83,497.03,136.74,504.7,140.3 M394.05,355.15c-21.87-14.05-44.5-34.18-54.39-45.32 c-1.66-1.25-1.39-6.8-1.39-6.8c8.93,6.95,45.98,33.41,85.14,45.49c13.81,4.27,35.02,5.88,53.41-4.55 c14.06-7.97,30.97-21.86,41.07-36.17l1.85,3.21c-0.07,2.13-4.72,12.49-7.07,16.66c4.27,2.46,7.46,3.12,12.21,4.43l32.44-5.06 c11.64-18.8,19.98-49.13,11.09-78c-5.08-16.56-31.55-49.53-33.45-51.34c-6.66-6.39,1.12-31.09-12.07-58.02 c-13.94-28.49-50.24-58.2-66-71.13c4.65,3.4,33.26,14.92,46.59,31.02c1.25-1.67,1.77-10.31,2.92-12.49 c-11.44-14.99-12.34-41.69-12.34-48.82c0-13.08-6.66-27.91-6.66-27.91s11.46,9.07,14.42,24.68c3.5,18.51,10.96,33.07,20.82,45.39 c18.66,23.25,35.51,35.18,44.04,26.58c10.19-10.32-10.33-56.49-36.57-82.26C499.5-5.3,491.48-1.43,473.53,4.99 c-14.33,5.1-22.08,45.8-59.43,45c-6.33-0.73-22.63-1.14-30.68-1.07c4.2-5.86,7.79-10.4,7.79-10.4s-12.53,5.03-23.2,11.43 l-0.82-1.24c3.6-7.6,7.48-12.39,7.48-12.39s-10.01,6.01-19.15,13.21c1.67-9.06,7.95-14.8,7.95-14.8s-12.65,2.29-28.77,20 c-18.31,5-22.72,8.3-37.31,14.76c-23.72-5.17-34.93-13.53-45.58-28.9c-8.13-11.74-22.57-13.53-37.36-7.46 c-21.52,8.92-48.77,21.11-48.77,21.11s8.86-0.34,18.12,0.07c-12.66,4.8-24.85,11.4-24.85,11.4s5.94-0.2,13.26-0.08 c-5.06,4.2-7.85,6.21-12.66,9.39c-11.59,8.41-20.98,18.12-20.98,18.12s7.87-3.58,14.92-5.59c-4.93,11.32-14.72,19.64-12.92,33.5 c1.72,12.66,17.26,38.71,37.31,54.7c1.72,1.4,29.12,26.72,49.76,16.32c20.65-10.39,28.78-19.64,32.18-33.85 c3.99-16.31,1.71-28.62-6.8-64.01c-2.8-11.68-10.13-35.73-13.66-47.23l0.79-0.57c6.76,14.25,24.04,51.81,31,77.03 c10.87,39.34,7.47,59.3,2.5,66.61c-14.99,22.07-53.43,24.98-70.92,12.75c-2.67,42.36,6.79,61,9.99,70.4 c-1.6,10.8,5.41,30.85,5.41,30.85s0.79-9.12,3.99-13.92c0.86,10.72,6.26,23.45,6.26,23.45s-0.33-7.86,2.13-14.65 c3.46,5.86,6,7.25,9.28,11.66c3.27,11.46,9.84,19.82,9.84,19.82s-1.07-6.14-0.48-12.54c16.03,15.4,18.79,37.87,20.39,55.12 c4.49,47.48-74.85,85.21-90.22,114.9c-11.66,17.58-18.63,45.41,1.1,61.81c47.71,39.61,29.39,50.52,53.27,67.93 c32.75,23.88,73.75,13.18,87.71-6.24c19.43-27.07,14.43-52.6,7.21-76.47c-5.63-18.68-20.96-49.7-39.93-61.7 c-19.37-12.27-38.21-14.58-54.17-12.92l1.48-1.69c22.96-4.56,46.95-2.05,64.32,9.13c19.71,12.67,37.74,34.41,47.18,67.72 c10.69-1.52,12.21-2.22,21.99-3.6l-22.04-171.6L394.05,355.15z M406.78,570.25l-2.55-23.79l49.57-75.61l56.27,16.45l48.4-80.83 l58.02,38.26l44.07-92.43l15.67,168.33L406.78,570.25z M676.84,317.79L499.7,349.9c-4.38,5.67-15.24,15.59-20.45,18.18 c-22.37,11.26-37.5,8.01-50.55,4.61c-8.4-2.13-13.27-3.33-20.25-6.47l-43.24,5.94l26.24,218.96l303.44-54.7L676.84,317.79z",fill:"#FFFFFF"})]})]})):(0,h.jsxs)(N.JO,(0,f.Z)((0,f.Z)({viewBox:"0 0 32 34"},e),{},{children:[(0,h.jsx)("g",{clipPath:"url(#clip0_2245_48088)",children:(0,h.jsx)("path",{clipRule:"evenodd",d:"M26.6008 24.1363L23.774 22.2717L21.4158 26.2107L18.6731 25.4088L16.2581 29.0947L16.3819 30.2549L29.5121 27.8356L28.7495 19.6318L26.6008 24.1363ZM14.3559 20.5992L16.4625 20.3095C16.8034 20.4627 17.0406 20.521 17.4493 20.625C18.0858 20.7908 18.8227 20.9499 19.9139 20.4C20.1678 20.2742 20.6968 19.7905 20.9107 19.5147L29.5419 17.9489L30.4224 28.6054L15.6356 31.2704L14.3559 20.5992ZM30.3891 16.7593L29.5371 16.9216L27.9003 0.0106812L0.0106812 3.24462L3.44659 31.1271L6.71108 30.6533C6.45038 30.2811 6.04446 29.8308 5.35124 29.2542C4.38979 28.4554 4.72985 27.0988 5.29688 26.2421C6.04723 24.7946 9.91328 22.955 9.69424 20.6412C9.61568 19.8 9.48195 18.7048 8.70105 17.9545C8.67168 18.266 8.72446 18.5659 8.72446 18.5659C8.72446 18.5659 8.40384 18.1568 8.24393 17.5989C8.08521 17.3851 7.96061 17.3168 7.79197 17.0311C7.67174 17.3617 7.68761 17.745 7.68761 17.745C7.68761 17.745 7.42533 17.1252 7.38287 16.6022C7.22732 16.8363 7.18804 17.2811 7.18804 17.2811C7.18804 17.2811 6.84719 16.3042 6.92496 15.778C6.76941 15.3201 6.30833 14.4114 6.43888 12.3461C7.29002 12.9425 9.16372 12.8008 9.89383 11.7247C10.1363 11.3684 10.3021 10.3954 9.77281 8.47844C9.43275 7.24915 8.59074 5.4187 8.26258 4.7243L8.2233 4.75247C8.3963 5.31196 8.75303 6.48491 8.88992 7.05352C9.30419 8.77842 9.41529 9.37879 9.22086 10.174C9.05539 10.8652 8.65859 11.3176 7.6527 11.8231C6.6468 12.3302 5.31196 11.0961 5.22744 11.0279C4.25012 10.2494 3.49421 8.97921 3.40969 8.36218C3.322 7.68682 3.79895 7.28129 4.03941 6.72894C3.69539 6.82735 3.31168 7.00194 3.31168 7.00194C3.31168 7.00194 3.76959 6.52816 4.33424 6.11826C4.56796 5.96351 4.70525 5.8651 4.95166 5.66035C4.59494 5.6544 4.30527 5.66472 4.30527 5.66472C4.30527 5.66472 4.90008 5.34331 5.51671 5.10919C5.06554 5.08935 4.63382 5.10602 4.63382 5.10602C4.63382 5.10602 5.96113 4.5124 7.00948 4.07671C7.73047 3.7811 8.43479 3.86839 8.8304 4.44058C9.34982 5.19014 9.89542 5.59726 11.0517 5.84963C11.7616 5.53496 11.9774 5.37307 12.8695 5.13022C13.6547 4.26678 14.2714 4.15488 14.2714 4.15488C14.2714 4.15488 13.9654 4.43542 13.8837 4.87627C14.3289 4.5255 14.817 4.23266 14.817 4.23266C14.817 4.23266 14.6281 4.46598 14.4519 4.83659L14.4928 4.8973C15.0122 4.58581 15.6229 4.34019 15.6229 4.34019C15.6229 4.34019 15.4483 4.56081 15.2435 4.84651C15.6352 4.84334 16.4296 4.86318 16.7379 4.89809C18.558 4.93817 18.9358 2.95416 19.6341 2.70537C20.5087 2.39308 20.8995 2.2042 22.3899 3.66801C23.6688 4.92468 24.668 7.17415 24.172 7.67809C23.7561 8.09632 22.9355 7.51501 22.0261 6.38134C21.5455 5.78098 21.1821 5.0715 21.0118 4.16957C20.8682 3.4085 20.3091 2.96686 20.3091 2.96686C20.3091 2.96686 20.6337 3.68824 20.6337 4.32551C20.6337 4.6735 20.6773 5.97462 21.2352 6.70473C21.1801 6.81147 21.1543 7.23288 21.0932 7.31343C20.444 6.52895 19.05 5.96748 18.8227 5.80201C19.5921 6.43253 21.3606 7.88086 22.04 9.26887C22.6824 10.5815 22.3038 11.7846 22.6288 12.0961C22.7213 12.1854 24.0105 13.7916 24.2585 14.5987C24.691 16.0054 24.2843 17.4835 23.718 18.4005L22.1368 18.6469C21.9054 18.5826 21.7495 18.5505 21.542 18.4302C21.6562 18.2279 21.8836 17.7231 21.886 17.6192L21.7967 17.4624C21.3047 18.1596 20.4801 18.8366 19.7952 19.2254C18.8989 19.7333 17.8656 19.6552 17.193 19.4468C15.284 18.858 13.4789 17.568 13.0437 17.2291C13.0437 17.2291 13.0302 17.4997 13.1123 17.5604C13.5936 18.1033 14.6963 19.0854 15.7621 19.7698L13.4901 20.0198L14.5642 28.3836C14.088 28.4519 14.0138 28.4852 13.4924 28.5594C13.0329 26.9361 12.154 25.8762 11.1934 25.2588C10.3462 24.7144 9.17761 24.5918 8.05902 24.8132L7.9872 24.8965C8.76493 24.8156 9.68313 24.9283 10.6263 25.5255C11.5521 26.1107 12.2981 27.6226 12.5726 28.5328C12.9242 29.6962 13.1675 30.9406 12.2211 32.2596C11.5477 33.1972 9.58195 33.7155 7.99395 32.5945C8.41813 33.2766 8.99151 33.8345 9.76329 33.9397C10.9093 34.0952 11.9969 33.8964 12.7457 33.1278C13.3849 32.4707 13.7238 31.0966 13.6345 29.6494L14.6459 29.5026L15.011 32.1001L31.7553 30.0839L30.3891 16.7593ZM20.202 9.70535C20.1551 9.81209 20.0817 9.88193 20.192 10.2291L20.1988 10.249L20.2162 10.2938L20.2623 10.3978C20.4611 10.8041 20.6793 11.1874 21.044 11.383C21.1384 11.3672 21.236 11.3564 21.3372 11.3513C21.6797 11.3362 21.8959 11.3906 22.0332 11.4644C22.0455 11.3961 22.0483 11.2961 22.0407 11.1489C22.0142 10.6343 22.1427 9.75892 21.1535 9.29823C20.7801 9.12483 20.2563 9.1784 20.0817 9.39466C20.1135 9.39863 20.142 9.40537 20.1643 9.41291C20.4281 9.50537 20.2492 9.59623 20.202 9.70535ZM22.9744 14.5075C22.8447 14.436 22.2384 14.4642 21.8122 14.515C21.0003 14.6106 20.1238 14.8924 19.9317 15.0423C19.5826 15.3122 19.7413 15.7828 19.9992 15.976C20.7226 16.5165 21.3567 16.8787 22.0261 16.7907C22.4372 16.7367 22.7994 16.0859 23.0562 15.4955C23.2319 15.0888 23.2319 14.6499 22.9744 14.5075ZM15.7867 10.3426C16.0157 10.1252 14.6463 9.83947 13.5837 10.564C12.8 11.0985 12.775 12.2445 13.5254 12.8941C13.6004 12.9583 13.6623 13.004 13.7202 13.0413C13.9392 12.9381 14.1888 12.8337 14.4761 12.7405C14.9614 12.583 15.3649 12.5016 15.6967 12.4584C15.8554 12.281 16.0399 11.9687 15.9939 11.4033C15.9312 10.6363 15.3499 10.7581 15.7867 10.3426Z",fill:"#632CA6",fillRule:"evenodd"})}),(0,h.jsx)("defs",{children:(0,h.jsx)("clipPath",{id:"clip0_2245_48088",children:(0,h.jsx)("rect",{fill:"white",height:"34",width:"31.766"})})})]}))},url:(0,s.yc)({keywords:["Datadog"]})},{name:"AWS",Icon:function(e){return"dark"===(0,O.If)().colorMode?(0,h.jsxs)(N.JO,(0,f.Z)((0,f.Z)({viewBox:"0 0 50 30"},e),{},{children:[(0,h.jsx)("title",{children:"AWS-Logo_White-Color"}),(0,h.jsx)("path",{d:"M14.09,10.85a4.7,4.7,0,0,0,.19,1.48,7.73,7.73,0,0,0,.54,1.19.77.77,0,0,1,.12.38.64.64,0,0,1-.32.49l-1,.7a.83.83,0,0,1-.44.15.69.69,0,0,1-.49-.23,3.8,3.8,0,0,1-.6-.77q-.25-.42-.51-1a6.14,6.14,0,0,1-4.89,2.3,4.54,4.54,0,0,1-3.32-1.19,4.27,4.27,0,0,1-1.22-3.2A4.28,4.28,0,0,1,3.61,7.75,6.06,6.06,0,0,1,7.69,6.46a12.47,12.47,0,0,1,1.76.13q.92.13,1.91.36V5.73a3.65,3.65,0,0,0-.79-2.66A3.81,3.81,0,0,0,7.86,2.3a7.71,7.71,0,0,0-1.79.22,12.78,12.78,0,0,0-1.79.57,4.55,4.55,0,0,1-.58.22l-.26,0q-.35,0-.35-.52V2a1.09,1.09,0,0,1,.12-.58,1.2,1.2,0,0,1,.47-.35A10.88,10.88,0,0,1,5.77.32,10.19,10.19,0,0,1,8.36,0a6,6,0,0,1,4.35,1.35,5.49,5.49,0,0,1,1.38,4.09ZM7.34,13.38a5.36,5.36,0,0,0,1.72-.31A3.63,3.63,0,0,0,10.63,12,2.62,2.62,0,0,0,11.19,11a5.63,5.63,0,0,0,.16-1.44v-.7a14.35,14.35,0,0,0-1.53-.28,12.37,12.37,0,0,0-1.56-.1,3.84,3.84,0,0,0-2.47.67A2.34,2.34,0,0,0,5,11a2.35,2.35,0,0,0,.61,1.76A2.4,2.4,0,0,0,7.34,13.38Zm13.35,1.8a1,1,0,0,1-.64-.16,1.3,1.3,0,0,1-.35-.65L15.81,1.51a3,3,0,0,1-.15-.67.36.36,0,0,1,.41-.41H17.7a1,1,0,0,1,.65.16,1.4,1.4,0,0,1,.33.65l2.79,11,2.59-11A1.17,1.17,0,0,1,24.39.6a1.1,1.1,0,0,1,.67-.16H26.4a1.1,1.1,0,0,1,.67.16,1.17,1.17,0,0,1,.32.65L30,12.39,32.88,1.25A1.39,1.39,0,0,1,33.22.6a1,1,0,0,1,.65-.16h1.54a.36.36,0,0,1,.41.41,1.36,1.36,0,0,1,0,.26,3.64,3.64,0,0,1-.12.41l-4,12.86a1.3,1.3,0,0,1-.35.65,1,1,0,0,1-.64.16H29.25a1,1,0,0,1-.67-.17,1.26,1.26,0,0,1-.32-.67L25.67,3.64,23.11,14.34a1.26,1.26,0,0,1-.32.67,1,1,0,0,1-.67.17Zm21.36.44a11.28,11.28,0,0,1-2.56-.29,7.44,7.44,0,0,1-1.92-.67,1,1,0,0,1-.61-.93v-.84q0-.52.38-.52a.9.9,0,0,1,.31.06l.42.17a8.77,8.77,0,0,0,1.83.58,9.78,9.78,0,0,0,2,.2,4.48,4.48,0,0,0,2.43-.55,1.76,1.76,0,0,0,.86-1.57,1.61,1.61,0,0,0-.45-1.16A4.29,4.29,0,0,0,43,9.22l-2.41-.76A5.15,5.15,0,0,1,38,6.78a3.94,3.94,0,0,1-.83-2.41,3.7,3.7,0,0,1,.45-1.85,4.47,4.47,0,0,1,1.19-1.37A5.27,5.27,0,0,1,40.51.29,7.4,7.4,0,0,1,42.6,0a8.87,8.87,0,0,1,1.12.07q.57.07,1.08.19t.95.26a4.27,4.27,0,0,1,.7.29,1.59,1.59,0,0,1,.49.41.94.94,0,0,1,.15.55v.79q0,.52-.38.52a1.76,1.76,0,0,1-.64-.2,7.74,7.74,0,0,0-3.2-.64,4.37,4.37,0,0,0-2.21.47,1.6,1.6,0,0,0-.79,1.48,1.58,1.58,0,0,0,.49,1.18,4.94,4.94,0,0,0,1.83.92L44.55,7a5.08,5.08,0,0,1,2.57,1.6A3.76,3.76,0,0,1,47.9,11a4.21,4.21,0,0,1-.44,1.93,4.4,4.4,0,0,1-1.21,1.47,5.43,5.43,0,0,1-1.85.93A8.25,8.25,0,0,1,42.05,15.62Z",fill:"#FFFFFF"}),(0,h.jsx)("path",{d:"M45.19,23.81C39.72,27.85,31.78,30,25,30A36.64,36.64,0,0,1,.22,20.57c-.51-.46-.06-1.09.56-.74A49.78,49.78,0,0,0,25.53,26.4,49.23,49.23,0,0,0,44.4,22.53C45.32,22.14,46.1,23.14,45.19,23.81Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{d:"M47.47,21.21c-.7-.9-4.63-.42-6.39-.21-.53.06-.62-.4-.14-.74,3.13-2.2,8.27-1.57,8.86-.83s-.16,5.89-3.09,8.35c-.45.38-.88.18-.68-.32C46.69,25.8,48.17,22.11,47.47,21.21Z",fill:"#FF9900",fillRule:"evenodd"})]})):(0,h.jsxs)(N.JO,(0,f.Z)((0,f.Z)({viewBox:"0 0 50 30"},e),{},{children:[(0,h.jsxs)("g",{clipPath:"url(#aws-logo-clippath)",children:[(0,h.jsx)("path",{d:"M14.09 10.85C14.0741 11.3503 14.1383 11.8499 14.28 12.33C14.4261 12.7412 14.6068 13.1393 14.82 13.52C14.8927 13.6339 14.9341 13.765 14.94 13.9C14.9295 14.0012 14.895 14.0985 14.8393 14.1837C14.7837 14.2689 14.7085 14.3397 14.62 14.39L13.62 15.09C13.4906 15.1809 13.338 15.2329 13.18 15.24C13.0871 15.2367 12.9957 15.2146 12.9115 15.1751C12.8273 15.1355 12.752 15.0794 12.69 15.01C12.4577 14.7802 12.2561 14.5214 12.09 14.24C11.9234 13.96 11.7534 13.6267 11.58 13.24C10.9944 13.971 10.2492 14.5582 9.40165 14.9569C8.55408 15.3555 7.62654 15.555 6.69002 15.54C6.08523 15.5731 5.47992 15.4849 4.90974 15.2806C4.33956 15.0762 3.81605 14.7598 3.37002 14.35C2.95682 13.9297 2.63512 13.4284 2.42515 12.8777C2.21519 12.3269 2.12151 11.7387 2.15002 11.15C2.12351 10.5102 2.24092 9.87251 2.49361 9.28407C2.74629 8.69564 3.1278 8.1714 3.61002 7.75C4.7679 6.83817 6.2184 6.37956 7.69002 6.46C8.27902 6.46172 8.86716 6.50516 9.45002 6.59C10.0634 6.67667 10.7 6.79667 11.36 6.95V5.73C11.4571 4.77391 11.1733 3.8181 10.57 3.07C9.79824 2.47652 8.82855 2.201 7.86002 2.3C7.2568 2.30306 6.65602 2.3769 6.07002 2.52C5.46018 2.66583 4.86189 2.85635 4.28002 3.09C4.09191 3.17645 3.89813 3.24995 3.70002 3.31H3.44002C3.20668 3.31 3.09002 3.13667 3.09002 2.79V2C3.07572 1.7993 3.11725 1.59856 3.21002 1.42C3.33535 1.26629 3.49683 1.14604 3.68002 1.07C4.34928 0.749381 5.0496 0.498073 5.77002 0.320004C6.61607 0.10277 7.48654 -0.00477814 8.36002 4.30644e-06C9.93109 -0.139235 11.4938 0.345748 12.71 1.35C13.2045 1.90312 13.5817 2.55072 13.8189 3.25369C14.056 3.95665 14.1483 4.7004 14.09 5.44V10.85ZM7.34002 13.38C7.92645 13.3715 8.50751 13.2667 9.06002 13.07C9.66906 12.859 10.211 12.4897 10.63 12C10.8882 11.7121 11.0794 11.3706 11.19 11C11.3051 10.5289 11.3589 10.0449 11.35 9.56001V8.86C10.8455 8.73908 10.3347 8.64561 9.82002 8.58C9.30265 8.51382 8.78161 8.48042 8.26002 8.48C7.38429 8.41433 6.51252 8.6508 5.79002 9.15C5.52906 9.38022 5.32274 9.66575 5.18608 9.98578C5.04941 10.3058 4.98585 10.6523 5.00002 11C4.97638 11.3195 5.01829 11.6404 5.12319 11.943C5.22809 12.2457 5.39376 12.5237 5.61002 12.76C5.84351 12.9719 6.11648 13.1358 6.41332 13.2422C6.71017 13.3485 7.02506 13.3954 7.34002 13.38ZM20.69 15.18C20.4647 15.2006 20.2391 15.1442 20.05 15.02C19.873 14.8417 19.7514 14.6159 19.7 14.37L15.81 1.51C15.7345 1.29315 15.6842 1.06834 15.66 0.840004C15.6515 0.784214 15.6563 0.727213 15.6739 0.673599C15.6915 0.619986 15.7215 0.571262 15.7614 0.53136C15.8013 0.491457 15.85 0.461494 15.9036 0.443888C15.9572 0.426282 16.0142 0.421526 16.07 0.430004H17.7C17.9286 0.407082 18.1582 0.463583 18.35 0.590004C18.5155 0.773729 18.6293 0.997998 18.68 1.24L21.47 12.24L24.06 1.24C24.1 0.997284 24.2155 0.773342 24.39 0.600004C24.5905 0.476315 24.8253 0.420231 25.06 0.440004H26.4C26.6347 0.420231 26.8696 0.476315 27.07 0.600004C27.2428 0.777356 27.3548 1.00494 27.39 1.25L30 12.39L32.88 1.25C32.9331 1.0068 33.0505 0.782318 33.22 0.600004C33.4119 0.473583 33.6414 0.417082 33.87 0.440004H35.41C35.4658 0.431526 35.5228 0.436282 35.5764 0.453888C35.63 0.471494 35.6788 0.501457 35.7187 0.54136C35.7586 0.581262 35.7885 0.629986 35.8061 0.683599C35.8237 0.737213 35.8285 0.794214 35.82 0.850004C35.8283 0.936472 35.8283 1.02354 35.82 1.11C35.7881 1.2489 35.748 1.3858 35.7 1.52L31.7 14.38C31.6486 14.6259 31.527 14.8517 31.35 15.03C31.1609 15.1542 30.9353 15.2106 30.71 15.19H29.25C29.0136 15.2148 28.776 15.1545 28.58 15.02C28.4085 14.8339 28.297 14.6004 28.26 14.35L25.67 3.64L23.11 14.34C23.0731 14.5904 22.9616 14.8239 22.79 15.01C22.594 15.1445 22.3565 15.2048 22.12 15.18H20.69ZM42.05 15.62C41.1884 15.6214 40.3295 15.5241 39.49 15.33C38.8224 15.1956 38.1763 14.9702 37.57 14.66C37.3877 14.5828 37.2324 14.4532 37.1238 14.2876C37.0152 14.1221 36.9582 13.928 36.96 13.73V12.89C36.96 12.5433 37.0867 12.37 37.34 12.37C37.4461 12.3716 37.551 12.3919 37.65 12.43L38.07 12.6C38.657 12.8597 39.2706 13.0542 39.9 13.18C40.558 13.3152 41.2283 13.3822 41.9 13.38C42.7457 13.4301 43.5883 13.2394 44.33 12.83C44.6007 12.6692 44.8233 12.4387 44.9745 12.1625C45.1258 11.8864 45.2002 11.5747 45.19 11.26C45.1957 11.0465 45.1589 10.8339 45.0816 10.6348C45.0043 10.4356 44.8882 10.2538 44.74 10.1C44.2353 9.677 43.6399 9.37589 43 9.22001L40.59 8.46C39.5752 8.17803 38.6712 7.59168 38 6.78C37.464 6.09083 37.172 5.24311 37.17 4.37C37.1561 3.72464 37.3112 3.08686 37.62 2.52C37.9188 1.98678 38.3239 1.5205 38.81 1.15C39.3197 0.76244 39.8958 0.471012 40.51 0.290004C41.1893 0.0940008 41.8931 -0.00365839 42.6 4.30644e-06C42.9745 -0.000325499 43.3485 0.0230546 43.72 0.0700043C44.1 0.116671 44.46 0.180004 44.8 0.260004C45.14 0.340004 45.4567 0.426671 45.75 0.520004C45.9915 0.595737 46.2257 0.692786 46.45 0.810004C46.6394 0.912109 46.8061 1.05159 46.94 1.22C47.0457 1.38339 47.0982 1.57556 47.09 1.77V2.56C47.09 2.90667 46.9634 3.08 46.71 3.08C46.4858 3.05497 46.2686 2.98707 46.07 2.88C45.061 2.44167 43.97 2.22349 42.87 2.24C42.1049 2.20023 41.3427 2.36231 40.66 2.71C40.4043 2.8594 40.195 3.07685 40.0555 3.33816C39.916 3.59947 39.8518 3.89436 39.87 4.19C39.865 4.40997 39.906 4.62855 39.9904 4.83174C40.0748 5.03494 40.2007 5.21828 40.36 5.37C40.899 5.80115 41.5224 6.11455 42.19 6.29L44.55 7C45.5494 7.25975 46.4459 7.81787 47.12 8.60001C47.6487 9.28626 47.9243 10.134 47.9 11C47.9088 11.6692 47.758 12.3308 47.46 12.93C47.1688 13.5024 46.7558 14.0042 46.25 14.4C45.6987 14.8258 45.0706 15.1415 44.4 15.33C43.6347 15.5392 42.8432 15.6368 42.05 15.62Z",fill:"#252F3E"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M45.19 23.81C39.72 27.85 31.78 30 25 30C15.8524 30.0602 7.01321 26.6965 0.219997 20.57C-0.290003 20.11 0.159997 19.48 0.779997 19.83C8.31593 24.1408 16.8482 26.4057 25.53 26.4C32.0135 26.3652 38.4262 25.05 44.4 22.53C45.32 22.14 46.1 23.14 45.19 23.81Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M47.47 21.21C46.77 20.31 42.84 20.79 41.08 21C40.55 21.06 40.46 20.6 40.94 20.26C44.07 18.06 49.21 18.69 49.8 19.43C50.39 20.17 49.64 25.32 46.71 27.78C46.26 28.16 45.83 27.96 46.03 27.46C46.69 25.8 48.17 22.11 47.47 21.21Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{d:"M14.09 10.85C14.0741 11.3503 14.1383 11.8499 14.28 12.33C14.4261 12.7412 14.6068 13.1393 14.82 13.52C14.8927 13.6339 14.9341 13.765 14.94 13.9C14.9295 14.0012 14.895 14.0985 14.8393 14.1837C14.7837 14.2689 14.7085 14.3397 14.62 14.39L13.62 15.09C13.4906 15.1809 13.338 15.2329 13.18 15.24C13.0871 15.2367 12.9957 15.2146 12.9115 15.1751C12.8273 15.1355 12.752 15.0794 12.69 15.01C12.4577 14.7802 12.2561 14.5214 12.09 14.24C11.9234 13.96 11.7534 13.6267 11.58 13.24C10.9944 13.971 10.2492 14.5582 9.40165 14.9569C8.55408 15.3555 7.62654 15.555 6.69002 15.54C6.08523 15.5731 5.47992 15.4849 4.90974 15.2806C4.33956 15.0762 3.81605 14.7598 3.37002 14.35C2.95682 13.9297 2.63512 13.4284 2.42515 12.8777C2.21519 12.3269 2.12151 11.7387 2.15002 11.15C2.12351 10.5102 2.24092 9.87251 2.49361 9.28407C2.74629 8.69564 3.1278 8.1714 3.61002 7.75C4.7679 6.83817 6.2184 6.37956 7.69002 6.46C8.27902 6.46172 8.86716 6.50516 9.45002 6.59C10.0634 6.67667 10.7 6.79667 11.36 6.95V5.73C11.4571 4.77391 11.1733 3.8181 10.57 3.07C9.79824 2.47652 8.82855 2.201 7.86002 2.3C7.2568 2.30306 6.65602 2.3769 6.07002 2.52C5.46018 2.66583 4.86189 2.85635 4.28002 3.09C4.09191 3.17645 3.89813 3.24995 3.70002 3.31H3.44002C3.20668 3.31 3.09002 3.13667 3.09002 2.79V2C3.07572 1.7993 3.11725 1.59856 3.21002 1.42C3.33535 1.26629 3.49683 1.14604 3.68002 1.07C4.34928 0.749381 5.0496 0.498073 5.77002 0.320004C6.61607 0.10277 7.48654 -0.00477814 8.36002 4.30644e-06C9.93109 -0.139235 11.4938 0.345748 12.71 1.35C13.2045 1.90312 13.5817 2.55072 13.8189 3.25369C14.056 3.95665 14.1483 4.7004 14.09 5.44V10.85ZM7.34002 13.38C7.92645 13.3715 8.50751 13.2667 9.06002 13.07C9.66906 12.859 10.211 12.4897 10.63 12C10.8882 11.7121 11.0794 11.3706 11.19 11C11.3051 10.5289 11.3589 10.0449 11.35 9.56001V8.86C10.8455 8.73908 10.3347 8.64561 9.82002 8.58C9.30265 8.51382 8.78161 8.48042 8.26002 8.48C7.38429 8.41433 6.51252 8.6508 5.79002 9.15C5.52906 9.38022 5.32274 9.66575 5.18608 9.98578C5.04941 10.3058 4.98585 10.6523 5.00002 11C4.97638 11.3195 5.01829 11.6404 5.12319 11.943C5.22809 12.2457 5.39376 12.5237 5.61002 12.76C5.84351 12.9719 6.11648 13.1358 6.41332 13.2422C6.71017 13.3485 7.02506 13.3954 7.34002 13.38ZM20.69 15.18C20.4647 15.2006 20.2391 15.1442 20.05 15.02C19.873 14.8417 19.7514 14.6159 19.7 14.37L15.81 1.51C15.7345 1.29315 15.6842 1.06834 15.66 0.840004C15.6515 0.784214 15.6563 0.727213 15.6739 0.673599C15.6915 0.619986 15.7215 0.571262 15.7614 0.53136C15.8013 0.491457 15.85 0.461494 15.9036 0.443888C15.9572 0.426282 16.0142 0.421526 16.07 0.430004H17.7C17.9286 0.407082 18.1582 0.463583 18.35 0.590004C18.5155 0.773729 18.6293 0.997998 18.68 1.24L21.47 12.24L24.06 1.24C24.1 0.997284 24.2155 0.773342 24.39 0.600004C24.5905 0.476315 24.8253 0.420231 25.06 0.440004H26.4C26.6347 0.420231 26.8696 0.476315 27.07 0.600004C27.2428 0.777356 27.3548 1.00494 27.39 1.25L30 12.39L32.88 1.25C32.9331 1.0068 33.0505 0.782318 33.22 0.600004C33.4119 0.473583 33.6414 0.417082 33.87 0.440004H35.41C35.4658 0.431526 35.5228 0.436282 35.5764 0.453888C35.63 0.471494 35.6788 0.501457 35.7187 0.54136C35.7586 0.581262 35.7885 0.629986 35.8061 0.683599C35.8237 0.737213 35.8285 0.794214 35.82 0.850004C35.8283 0.936472 35.8283 1.02354 35.82 1.11C35.7881 1.2489 35.748 1.3858 35.7 1.52L31.7 14.38C31.6486 14.6259 31.527 14.8517 31.35 15.03C31.1609 15.1542 30.9353 15.2106 30.71 15.19H29.25C29.0136 15.2148 28.776 15.1545 28.58 15.02C28.4085 14.8339 28.297 14.6004 28.26 14.35L25.67 3.64L23.11 14.34C23.0731 14.5904 22.9616 14.8239 22.79 15.01C22.594 15.1445 22.3565 15.2048 22.12 15.18H20.69ZM42.05 15.62C41.1884 15.6214 40.3295 15.5241 39.49 15.33C38.8224 15.1956 38.1763 14.9702 37.57 14.66C37.3877 14.5828 37.2324 14.4532 37.1238 14.2876C37.0152 14.1221 36.9582 13.928 36.96 13.73V12.89C36.96 12.5433 37.0867 12.37 37.34 12.37C37.4461 12.3716 37.551 12.3919 37.65 12.43L38.07 12.6C38.657 12.8597 39.2706 13.0542 39.9 13.18C40.558 13.3152 41.2283 13.3822 41.9 13.38C42.7457 13.4301 43.5883 13.2394 44.33 12.83C44.6007 12.6692 44.8233 12.4387 44.9745 12.1625C45.1258 11.8864 45.2002 11.5747 45.19 11.26C45.1957 11.0465 45.1589 10.8339 45.0816 10.6348C45.0043 10.4356 44.8882 10.2538 44.74 10.1C44.2353 9.677 43.6399 9.37589 43 9.22001L40.59 8.46C39.5752 8.17803 38.6712 7.59168 38 6.78C37.464 6.09083 37.172 5.24311 37.17 4.37C37.1561 3.72464 37.3112 3.08686 37.62 2.52C37.9188 1.98678 38.3239 1.5205 38.81 1.15C39.3197 0.76244 39.8958 0.471012 40.51 0.290004C41.1893 0.0940008 41.8931 -0.00365839 42.6 4.30644e-06C42.9745 -0.000325499 43.3485 0.0230546 43.72 0.0700043C44.1 0.116671 44.46 0.180004 44.8 0.260004C45.14 0.340004 45.4567 0.426671 45.75 0.520004C45.9915 0.595737 46.2257 0.692786 46.45 0.810004C46.6394 0.912109 46.8061 1.05159 46.94 1.22C47.0457 1.38339 47.0982 1.57556 47.09 1.77V2.56C47.09 2.90667 46.9634 3.08 46.71 3.08C46.4858 3.05497 46.2686 2.98707 46.07 2.88C45.061 2.44167 43.97 2.22349 42.87 2.24C42.1049 2.20023 41.3427 2.36231 40.66 2.71C40.4043 2.8594 40.195 3.07685 40.0555 3.33816C39.916 3.59947 39.8518 3.89436 39.87 4.19C39.865 4.40997 39.906 4.62855 39.9904 4.83174C40.0748 5.03494 40.2007 5.21828 40.36 5.37C40.899 5.80115 41.5224 6.11455 42.19 6.29L44.55 7C45.5494 7.25975 46.4459 7.81787 47.12 8.60001C47.6487 9.28626 47.9243 10.134 47.9 11C47.9088 11.6692 47.758 12.3308 47.46 12.93C47.1688 13.5024 46.7558 14.0042 46.25 14.4C45.6987 14.8258 45.0706 15.1415 44.4 15.33C43.6347 15.5392 42.8432 15.6368 42.05 15.62Z",fill:"#252F3E"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M45.19 23.81C39.72 27.85 31.78 30 25 30C15.8524 30.0602 7.01321 26.6965 0.219997 20.57C-0.290003 20.11 0.159997 19.48 0.779997 19.83C8.31593 24.1408 16.8482 26.4057 25.53 26.4C32.0135 26.3652 38.4262 25.05 44.4 22.53C45.32 22.14 46.1 23.14 45.19 23.81Z",fill:"#FF9900",fillRule:"evenodd"}),(0,h.jsx)("path",{clipRule:"evenodd",d:"M47.47 21.21C46.77 20.31 42.84 20.79 41.08 21C40.55 21.06 40.46 20.6 40.94 20.26C44.07 18.06 49.21 18.69 49.8 19.43C50.39 20.17 49.64 25.32 46.71 27.78C46.26 28.16 45.83 27.96 46.03 27.46C46.69 25.8 48.17 22.11 47.47 21.21Z",fill:"#FF9900",fillRule:"evenodd"})]}),(0,h.jsx)("defs",{children:(0,h.jsx)("clipPath",{id:"aws-logo-clippath",children:(0,h.jsx)("rect",{fill:"white",height:"30",width:"50"})})})]}))},url:(0,s.yc)({query:"AWS"})},{name:"MongoDB",Icon:function(e){return(0,h.jsxs)(N.JO,(0,f.Z)((0,f.Z)({viewBox:"0 0 18 37"},e),{},{children:[(0,h.jsx)("path",{d:"M9.09725 0.469971L10.1001 2.35348C10.3255 2.70106 10.5698 3.00871 10.8575 3.29523C11.7009 4.12816 12.4871 5.01714 13.2107 5.95609C14.9099 8.18718 16.056 10.6649 16.8744 13.3445C17.3653 14.9814 17.6318 16.6606 17.6518 18.3586C17.734 23.4349 15.9937 27.7937 12.485 31.4163C11.9143 31.9908 11.2977 32.5178 10.6414 32.9921C10.2938 32.9921 10.1294 32.7256 9.98617 32.4802C9.72529 32.0251 9.55165 31.5253 9.4742 31.0065C9.3509 30.3923 9.26987 29.7782 9.3098 29.1441V28.8576C9.28161 28.7965 8.97513 0.614404 9.09725 0.469971Z",fill:"#599636"}),(0,h.jsx)("path",{d:"M9.09723 0.407647C9.05614 0.325449 9.01504 0.387684 8.97394 0.427609C8.9939 0.838599 8.85064 1.20497 8.62636 1.5549C8.37977 1.90248 8.05333 2.16903 7.72571 2.45555C5.90562 4.0314 4.47304 5.93487 3.3258 8.0638C1.79927 10.929 1.01253 13.9997 0.789419 17.2324C0.687259 18.3984 1.15813 22.513 1.52567 23.7002C2.52848 26.8519 4.32978 29.4928 6.66301 31.785C7.23605 32.3369 7.84901 32.8488 8.4831 33.3409C8.66746 33.3409 8.68742 33.1765 8.72969 33.0543C8.81052 32.793 8.87214 32.5261 8.91405 32.2558L9.32504 29.1863L9.09723 0.407647Z",fill:"#6CAC48"}),(0,h.jsx)("path",{d:"M10.1001 34.2391C10.1412 33.7694 10.3666 33.3796 10.6121 32.9909C10.3655 32.8888 10.1823 32.6856 10.039 32.459C9.91549 32.2444 9.81324 32.0183 9.73372 31.7838C9.44719 30.9243 9.38613 30.0224 9.30394 29.1441V28.6122C9.20177 28.6944 9.18064 29.3895 9.18064 29.4929C9.12088 30.4212 8.99769 31.3443 8.81192 32.2559C8.75086 32.6246 8.70976 32.9921 8.48312 33.3197C8.48312 33.3608 8.48312 33.4019 8.50309 33.463C8.87181 34.548 8.97279 35.6529 9.03503 36.779V37.19C9.03503 37.6808 9.01507 37.5775 9.42254 37.7419C9.58693 37.803 9.77012 37.8241 9.93452 37.9462C10.0578 37.9462 10.0778 37.8441 10.0778 37.7619L10.0167 37.0867V35.2032C9.99675 34.8744 10.0578 34.548 10.0989 34.2403L10.1001 34.2391Z",fill:"#C2BFBF"})]}))},url:(0,s.yc)({keywords:["MongoDB"]})},{name:"Aqua Security",imgsrc:"/assets/aqua-security.png",url:(0,s.yc)({keywords:["aqua"]})}],J=function(e){var t=e.url,i=e.imgsrc,n=e.label,c=e.Icon,r=(0,O.ff)(void 0,"invert(100%) brightness(1.5)");return(0,h.jsx)(o.O,{color:"link","data-event":d.a.INFO.eventName(n),"data-testid":u.infoSectionIcon,fontWeight:"bold",to:t,children:(0,h.jsxs)(a.Kq,{align:"center",spacing:2,textAlign:"center",children:[i&&(0,h.jsx)(q.Ee,{"aria-label":n,filter:"AWS CDK"===n?r:void 0,h:8,src:i}),c&&(0,h.jsx)(c,{"aria-label":n,h:8,w:8}),(0,h.jsx)("span",{children:n})]})})},Y=function(){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(a.iz,{display:{xl:"none"},mx:d.W.X,w:"auto"}),(0,h.jsx)(a.iz,{display:{base:"none",xl:"initial"},h:"auto",my:d.W.Y,orientation:"vertical"})]})},Q=function(e){var t=e.children;return(0,h.jsx)(a.kC,{align:"center",pt:4,sx:{gap:"2rem"},children:t})},$=function(){return(0,h.jsx)(a.kC,{bg:"bgSecondary","data-testid":u.infoContainer,direction:"column",children:(0,h.jsxs)(a.rj,{templateColumns:{base:"1fr",xl:"1fr auto 1fr auto 1fr"},templateRows:{base:"1fr auto 1fr auto 1fr",xl:"auto"},children:[(0,h.jsx)(_,{description:"Find libraries for AWS Cloud Development Kit (AWS CDK), which generates AWS CloudFormation templates, CDK for Terraform (CDKTF), which generates HashiCorp Terraform configuration files, and CDK for Kubernetes (CDK8s), which generates Kubernetes manifests.",title:"One home for all CDKs",children:(0,h.jsx)(Q,{children:Object.entries(X.mh).map((function(e){var t=(0,m.Z)(e,2),i=t[0],n=t[1],a=n.name,c=n.imgsrc;return(0,h.jsx)(J,{imgsrc:c,label:a,url:(0,s.yc)({cdkType:i,sort:v.W.DownloadsDesc})},i)}))})}),(0,h.jsx)(Y,{}),(0,h.jsx)(_,{description:"Define, test, and deploy cloud infrastructure using high level programming languages such as TypeScript, Python, Java, and .NET. Find documentation, API references and code samples to quickly build your application.",title:"Support across languages",children:(0,h.jsx)(Q,{children:Object.entries(U.kP).filter((function(e){var t=(0,m.Z)(e,1)[0];return U.dX.has(t)})).map((function(e){var t=(0,m.Z)(e,2),i=t[0],n=t[1],a=n.icon,c=n.name;return(0,h.jsx)(J,{Icon:a,label:c,url:(0,s.yc)({languages:[i],sort:v.W.DownloadsDesc})},i)}))})}),(0,h.jsx)(Y,{}),(0,h.jsx)(_,{description:"Find construct libraries published by the community and cloud service providers such as Datadog, Amazon Web Services (AWS), MongoDB, Aqua Security, and more.",title:"Provision a range of cloud resources",children:(0,h.jsx)(Q,{children:G.map((function(e){var t=e.url,i=e.name,n=e.imgsrc,a=e.Icon;return(0,h.jsx)(J,{Icon:a,imgsrc:n,label:i,url:t},i)}))})})]})})},ee=function(){var e,t=(0,r.r)().data,i=(null!==(e=null===t||void 0===t?void 0:t.packages.length)&&void 0!==e?e:0)>0;return(0,h.jsx)(c.T,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTF and other construct-based tools.",suffix:!1},pageName:"home",children:(0,h.jsxs)(B,{as:a.kC,"data-testid":u.page,direction:"column",children:[(0,h.jsx)(K,{}),(0,h.jsx)($,{}),i?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(x,{}),(0,h.jsx)(T,{}),(0,h.jsx)(V,{})]}):null]})})}}}]);
2
+ //# sourceMappingURL=58.65618176.chunk.js.map