construct-hub 0.2.50 → 0.2.51

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/.jsii +2 -2
  2. package/lib/construct-hub.js +1 -1
  3. package/lib/package-sources/code-artifact.js +1 -1
  4. package/lib/package-sources/npmjs.js +1 -1
  5. package/lib/package-tag/index.js +2 -2
  6. package/lib/spdx-license.js +1 -1
  7. package/package.json +2 -2
  8. package/website/asset-manifest.json +37 -37
  9. package/website/index.html +1 -1
  10. package/website/service-worker.js +1 -1
  11. package/website/service-worker.js.map +1 -1
  12. package/website/static/js/{0.476ccc35.chunk.js → 0.14ae620d.chunk.js} +2 -2
  13. package/website/static/js/{0.476ccc35.chunk.js.map → 0.14ae620d.chunk.js.map} +1 -1
  14. package/website/static/js/{1.dce521b7.chunk.js → 1.ba696ffb.chunk.js} +2 -2
  15. package/website/static/js/{1.dce521b7.chunk.js.map → 1.ba696ffb.chunk.js.map} +1 -1
  16. package/website/static/js/{10.511ed889.chunk.js → 10.48221095.chunk.js} +2 -2
  17. package/website/static/js/{10.511ed889.chunk.js.map → 10.48221095.chunk.js.map} +1 -1
  18. package/website/static/js/{11.fedfcf57.chunk.js → 11.c3c4095a.chunk.js} +2 -2
  19. package/website/static/js/{11.fedfcf57.chunk.js.map → 11.c3c4095a.chunk.js.map} +1 -1
  20. package/website/static/js/{12.f223385d.chunk.js → 12.cadd501c.chunk.js} +2 -2
  21. package/website/static/js/{12.f223385d.chunk.js.map → 12.cadd501c.chunk.js.map} +1 -1
  22. package/website/static/js/13.fe1e2da5.chunk.js +2 -0
  23. package/website/static/js/{13.97b408c9.chunk.js.map → 13.fe1e2da5.chunk.js.map} +1 -1
  24. package/website/static/js/{14.5a16949a.chunk.js → 14.0902aefd.chunk.js} +2 -2
  25. package/website/static/js/{14.5a16949a.chunk.js.map → 14.0902aefd.chunk.js.map} +1 -1
  26. package/website/static/js/{15.d29607c9.chunk.js → 15.50336305.chunk.js} +2 -2
  27. package/website/static/js/{15.d29607c9.chunk.js.map → 15.50336305.chunk.js.map} +1 -1
  28. package/website/static/js/{2.8028f8f1.chunk.js → 2.5cef3eb0.chunk.js} +2 -2
  29. package/website/static/js/{2.8028f8f1.chunk.js.map → 2.5cef3eb0.chunk.js.map} +1 -1
  30. package/website/static/js/{5.9ad3252f.chunk.js → 5.a2fc9d7c.chunk.js} +3 -3
  31. package/website/static/js/{5.9ad3252f.chunk.js.LICENSE.txt → 5.a2fc9d7c.chunk.js.LICENSE.txt} +0 -0
  32. package/website/static/js/{5.9ad3252f.chunk.js.map → 5.a2fc9d7c.chunk.js.map} +1 -1
  33. package/website/static/js/6.c49f34c2.chunk.js +3 -0
  34. package/website/static/js/{6.e67c67fc.chunk.js.LICENSE.txt → 6.c49f34c2.chunk.js.LICENSE.txt} +0 -0
  35. package/website/static/js/{6.e67c67fc.chunk.js.map → 6.c49f34c2.chunk.js.map} +1 -1
  36. package/website/static/js/{7.85487e43.chunk.js → 7.4fcbd19f.chunk.js} +2 -2
  37. package/website/static/js/{7.85487e43.chunk.js.map → 7.4fcbd19f.chunk.js.map} +1 -1
  38. package/website/static/js/8.31a21ecd.chunk.js +2 -0
  39. package/website/static/js/8.31a21ecd.chunk.js.map +1 -0
  40. package/website/static/js/9.e8c984d8.chunk.js +2 -0
  41. package/website/static/js/9.e8c984d8.chunk.js.map +1 -0
  42. package/website/static/js/main.65f1e14b.chunk.js +2 -0
  43. package/website/static/js/main.65f1e14b.chunk.js.map +1 -0
  44. package/website/static/js/{runtime-main.fc2986a7.js → runtime-main.d3c4ab29.js} +2 -2
  45. package/website/static/js/{runtime-main.fc2986a7.js.map → runtime-main.d3c4ab29.js.map} +1 -1
  46. package/website/static/js/13.97b408c9.chunk.js +0 -2
  47. package/website/static/js/6.e67c67fc.chunk.js +0 -3
  48. package/website/static/js/8.e3d4e000.chunk.js +0 -2
  49. package/website/static/js/8.e3d4e000.chunk.js.map +0 -1
  50. package/website/static/js/9.a24ba07b.chunk.js +0 -2
  51. package/website/static/js/9.a24ba07b.chunk.js.map +0 -1
  52. package/website/static/js/main.3e01d988.chunk.js +0 -2
  53. package/website/static/js/main.3e01d988.chunk.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["hooks/useQueryParams/useQueryParams.ts","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/constants.ts","views/SearchResults/components/NextPage.tsx","views/SearchResults/components/PageControls.tsx","views/SearchResults/components/ShowingDetails.tsx","views/SearchResults/SearchResults.tsx"],"names":["useQueryParams","search","useLocation","useMemo","URLSearchParams","ArrowButton","Icon","icon","offset","getPageUrl","props","borderRadius","borderColor","colorScheme","color","h","w","mx","variant","undefined","as","Link","to","disabled","GoToPage","pageLimit","useState","toString","inputValue","setInputValue","push","useHistory","useEffect","align","onSubmit","e","preventDefault","parseInt","max","min","name","onChange","target","value","p","textAlign","type","ml","LIMIT","btnProps","children","rightIcon","ArrowForward","NextPage","nextPageUrl","PageControls","nextOffset","prevOffset","alignItems","pt","templateColumns","templateRows","colStart","justifySelf","justify","py","ChevronLeftIcon","ChevronRightIcon","Em","fontWeight","ShowingDetails","limit","count","filtered","first","last","SearchResults","queryParams","searchQuery","decodeURIComponent","get","QUERY_PARAMS","SEARCH_QUERY","languageQuery","LANGUAGE","searchAPI","useCatalogSearch","defaultQuery","defaultLanguage","val","result","toNum","OFFSET","useCatalogResults","query","language","results","page","getUrl","params","getSearchPath","q","length","setQuery","Page","meta","title","description","pageName","direction","maxW","CatalogSearch","pb","wrap","Results"],"mappings":"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","file":"static/js/11.fedfcf57.chunk.js","sourcesContent":["import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport interface GoToPageProps {\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n pageLimit,\n offset,\n getPageUrl,\n}) => {\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n const { push } = useHistory();\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n push(getPageUrl({ offset: parseInt(inputValue) - 1 }));\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n colorScheme=\"blue\"\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import type { QueryParamKey } from \"../../constants/url\";\n\nexport const LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n","import { ArrowForwardIcon } from \"@chakra-ui/icons\";\nimport { Button } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NextPageProps {\n nextPageUrl?: string;\n}\n\nconst btnProps = {\n children: \"Next Page\",\n colorScheme: \"blue\",\n rightIcon: <ArrowForwardIcon color=\"white\" />,\n};\n\nexport const NextPage: FunctionComponent<NextPageProps> = ({ nextPageUrl }) => {\n if (!nextPageUrl) {\n return <Button {...btnProps} disabled />;\n }\n\n return <Button {...btnProps} as={Link} to={nextPageUrl} />;\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Flex, Grid, GridItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { GoToPage } from \"./GoToPage\";\nimport { NextPage } from \"./NextPage\";\n\nexport interface PageControlsProps {\n limit: number;\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n getPageUrl,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Grid\n alignItems=\"center\"\n pt={4}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <NextPage\n nextPageUrl={\n nextOffset ? getPageUrl({ offset: nextOffset }) : undefined\n }\n />\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <GoToPage\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface ShowingDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"em\" color=\"blue.500\" fontWeight=\"bold\">\n {children}\n </Text>\n);\n\nexport const ShowingDetails: FunctionComponent<ShowingDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n return (\n <Text>\n Displaying{\" \"}\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em> {filtered ? \"search results\" : \"constructs\"}.\n </Text>\n );\n};\n","import { Box, Divider, Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Results } from \"../../components/Results\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { getSearchPath } from \"../../util/url\";\nimport { PageControls } from \"./components/PageControls\";\nimport { ShowingDetails } from \"./components/ShowingDetails\";\nimport { LIMIT, SearchQueryParam } from \"./constants\";\n\nconst toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const SearchResults: FunctionComponent = () => {\n const queryParams = useQueryParams();\n\n const searchQuery = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languageQuery = queryParams.get(\n QUERY_PARAMS.LANGUAGE\n ) as Language | null;\n\n const searchAPI = useCatalogSearch({\n defaultQuery: searchQuery ?? undefined,\n defaultLanguage: languageQuery ?? undefined,\n });\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const { push } = useHistory();\n\n const { results, page, pageLimit } = useCatalogResults({\n query: searchQuery,\n offset,\n limit: LIMIT,\n language: languageQuery,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n query: (params.q ?? searchQuery) as string,\n language: languageQuery ?? undefined,\n offset: params.offset ?? offset,\n });\n };\n\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, pageLimit, offset]);\n\n useEffect(() => {\n // Reflect changes to queryParam to search input (specifically for tag clicks)\n if (searchQuery !== searchAPI.query) {\n searchAPI.setQuery(searchQuery);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery]);\n\n return (\n <Page\n meta={{\n title: searchQuery || \"Search\",\n description: searchQuery\n ? `${results.length} results for ${searchQuery} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Flex direction=\"column\" maxW=\"100vw\">\n <Box p={4}>\n <CatalogSearch {...searchAPI} />\n </Box>\n <Divider />\n <Box p={4}>\n <Flex align=\"center\" justify=\"space-between\" pb={4} wrap=\"wrap\">\n <ShowingDetails\n count={results.length}\n filtered={!!searchQuery}\n limit={LIMIT}\n offset={offset}\n />\n </Flex>\n <Results language={languageQuery ?? undefined} results={page} />\n <PageControls\n getPageUrl={getUrl}\n limit={LIMIT}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Flex>\n </Page>\n );\n};\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["hooks/useQueryParams/useQueryParams.ts","views/SearchResults/components/ArrowButton.tsx","views/SearchResults/components/GoToPage.tsx","views/SearchResults/constants.ts","views/SearchResults/components/NextPage.tsx","views/SearchResults/components/PageControls.tsx","views/SearchResults/components/ShowingDetails.tsx","views/SearchResults/SearchResults.tsx"],"names":["useQueryParams","search","useLocation","useMemo","URLSearchParams","ArrowButton","Icon","icon","offset","getPageUrl","props","borderRadius","borderColor","colorScheme","color","h","w","mx","variant","undefined","as","Link","to","disabled","GoToPage","pageLimit","useState","toString","inputValue","setInputValue","push","useHistory","useEffect","align","onSubmit","e","preventDefault","parseInt","max","min","name","onChange","target","value","p","textAlign","type","ml","LIMIT","btnProps","children","rightIcon","ArrowForward","NextPage","nextPageUrl","PageControls","nextOffset","prevOffset","alignItems","pt","templateColumns","templateRows","colStart","justifySelf","justify","py","ChevronLeftIcon","ChevronRightIcon","Em","fontWeight","ShowingDetails","limit","count","filtered","first","last","SearchResults","queryParams","searchQuery","decodeURIComponent","get","QUERY_PARAMS","SEARCH_QUERY","languageQuery","LANGUAGE","searchAPI","useCatalogSearch","defaultQuery","defaultLanguage","val","result","toNum","OFFSET","useCatalogResults","query","language","results","page","getUrl","params","getSearchPath","q","length","setQuery","Page","meta","title","description","pageName","direction","maxW","CatalogSearch","pb","wrap","Results"],"mappings":"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","file":"static/js/11.c3c4095a.chunk.js","sourcesContent":["import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport interface GoToPageProps {\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n pageLimit,\n offset,\n getPageUrl,\n}) => {\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n const { push } = useHistory();\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n push(getPageUrl({ offset: parseInt(inputValue) - 1 }));\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n colorScheme=\"blue\"\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import type { QueryParamKey } from \"../../constants/url\";\n\nexport const LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n","import { ArrowForwardIcon } from \"@chakra-ui/icons\";\nimport { Button } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NextPageProps {\n nextPageUrl?: string;\n}\n\nconst btnProps = {\n children: \"Next Page\",\n colorScheme: \"blue\",\n rightIcon: <ArrowForwardIcon color=\"white\" />,\n};\n\nexport const NextPage: FunctionComponent<NextPageProps> = ({ nextPageUrl }) => {\n if (!nextPageUrl) {\n return <Button {...btnProps} disabled />;\n }\n\n return <Button {...btnProps} as={Link} to={nextPageUrl} />;\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Flex, Grid, GridItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { GoToPage } from \"./GoToPage\";\nimport { NextPage } from \"./NextPage\";\n\nexport interface PageControlsProps {\n limit: number;\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n getPageUrl,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Grid\n alignItems=\"center\"\n pt={4}\n templateColumns=\"repeat(3, 1fr)\"\n templateRows=\"1fr\"\n >\n <GridItem colStart={2} justifySelf=\"center\">\n <NextPage\n nextPageUrl={\n nextOffset ? getPageUrl({ offset: nextOffset }) : undefined\n }\n />\n </GridItem>\n <GridItem colStart={3} justifySelf=\"end\">\n <Flex align=\"center\" justify=\"center\" py={4}>\n <GoToPage\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <ArrowButton\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Flex>\n </GridItem>\n </Grid>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface ShowingDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"em\" color=\"blue.500\" fontWeight=\"bold\">\n {children}\n </Text>\n);\n\nexport const ShowingDetails: FunctionComponent<ShowingDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n return (\n <Text>\n Displaying{\" \"}\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em> {filtered ? \"search results\" : \"constructs\"}.\n </Text>\n );\n};\n","import { Box, Divider, Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { CatalogSearch } from \"../../components/CatalogSearch\";\nimport { Page } from \"../../components/Page\";\nimport { Results } from \"../../components/Results\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useCatalogSearch } from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { getSearchPath } from \"../../util/url\";\nimport { PageControls } from \"./components/PageControls\";\nimport { ShowingDetails } from \"./components/ShowingDetails\";\nimport { LIMIT, SearchQueryParam } from \"./constants\";\n\nconst toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const SearchResults: FunctionComponent = () => {\n const queryParams = useQueryParams();\n\n const searchQuery = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languageQuery = queryParams.get(\n QUERY_PARAMS.LANGUAGE\n ) as Language | null;\n\n const searchAPI = useCatalogSearch({\n defaultQuery: searchQuery ?? undefined,\n defaultLanguage: languageQuery ?? undefined,\n });\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const { push } = useHistory();\n\n const { results, page, pageLimit } = useCatalogResults({\n query: searchQuery,\n offset,\n limit: LIMIT,\n language: languageQuery,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n query: (params.q ?? searchQuery) as string,\n language: languageQuery ?? undefined,\n offset: params.offset ?? offset,\n });\n };\n\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, pageLimit, offset]);\n\n useEffect(() => {\n // Reflect changes to queryParam to search input (specifically for tag clicks)\n if (searchQuery !== searchAPI.query) {\n searchAPI.setQuery(searchQuery);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery]);\n\n return (\n <Page\n meta={{\n title: searchQuery || \"Search\",\n description: searchQuery\n ? `${results.length} results for ${searchQuery} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Flex direction=\"column\" maxW=\"100vw\">\n <Box p={4}>\n <CatalogSearch {...searchAPI} />\n </Box>\n <Divider />\n <Box p={4}>\n <Flex align=\"center\" justify=\"space-between\" pb={4} wrap=\"wrap\">\n <ShowingDetails\n count={results.length}\n filtered={!!searchQuery}\n limit={LIMIT}\n offset={offset}\n />\n </Flex>\n <Results language={languageQuery ?? undefined} results={page} />\n <PageControls\n getPageUrl={getUrl}\n limit={LIMIT}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Flex>\n </Page>\n );\n};\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[12],{236:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(0),c=n(251),s={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(118),r=n(1),o=function(e){var t=e.children,n=e.meta,o=e.pageName,u=Object(i.b)(s[o]);Object(a.useEffect)((function(){u()}),[u]);var d=n.suffix,j=void 0===d||d,m=n.title,b=n.description,p=j?"".concat(m," - Construct Hub"):m;return Object(r.jsxs)(r.Fragment,{children:[Object(r.jsxs)(c.a,{children:[!1,Object(r.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(r.jsx)("meta",{charSet:"utf-8"}),Object(r.jsx)("title",{children:p}),Object(r.jsx)("meta",{content:p,property:"og:title"}),Object(r.jsx)("meta",{content:p,name:"twitter:title"}),Object(r.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(r.jsx)("meta",{content:b,name:"description"}),Object(r.jsx)("meta",{content:b,property:"og:description"}),Object(r.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},271:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(28),s=n(17),i=n(194),r=n(230),o=n(1),u=["sources"],d=Object(s.a)((function(e,t){var n=e.sources,s=Object(c.a)(e,u);return Object(o.jsxs)(i.a,{as:"picture",children:[null===n||void 0===n?void 0:n.map((function(e,t){return Object(o.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(o.jsx)(r.a,Object(a.a)({ref:t},s))]})}));d.displayName="Picture"},283:function(e,t,n){"use strict";n.r(t),n.d(t,"NotFound",(function(){return j})),n.d(t,"default",(function(){return j}));var a=n(216),c=n(207),s=n(153),i=n(33),r=n(236),o=n(271),u=n(1),d={optimal:[{media:"(max-width:1024px)",srcSet:"/assets/404-hive@50.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.png"}],fallback:"/assets/404-hive@50.png"},j=function(){return Object(u.jsx)(r.a,{meta:{title:"Not Found",description:"Oops! The page you were looking for does not exist"},pageName:"notFound",children:Object(u.jsxs)(a.a,{h:"100%",position:"relative",w:"100%",children:[Object(u.jsx)(o.a,{alt:"",inset:0,position:"absolute",sources:d.optimal,src:d.fallback,zIndex:"hide"}),Object(u.jsxs)(c.a,{align:"center",direction:"column",justify:"center",children:[Object(u.jsx)(o.a,{alt:"404 Image",sources:[{srcSet:"/assets/robot.webp"}],src:"/assets/robot.png"}),Object(u.jsx)(s.a,{as:i.b,colorScheme:"blue",to:"/",children:"Take Me Home"})]})]})})}}}]);
2
- //# sourceMappingURL=12.f223385d.chunk.js.map
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[12],{236:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(0),c=n(251),s={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(119),r=n(1),o=function(e){var t=e.children,n=e.meta,o=e.pageName,u=Object(i.b)(s[o]);Object(a.useEffect)((function(){u()}),[u]);var d=n.suffix,j=void 0===d||d,m=n.title,b=n.description,p=j?"".concat(m," - Construct Hub"):m;return Object(r.jsxs)(r.Fragment,{children:[Object(r.jsxs)(c.a,{children:[!1,Object(r.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(r.jsx)("meta",{charSet:"utf-8"}),Object(r.jsx)("title",{children:p}),Object(r.jsx)("meta",{content:p,property:"og:title"}),Object(r.jsx)("meta",{content:p,name:"twitter:title"}),Object(r.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(r.jsx)("meta",{content:b,name:"description"}),Object(r.jsx)("meta",{content:b,property:"og:description"}),Object(r.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},271:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(28),s=n(17),i=n(194),r=n(230),o=n(1),u=["sources"],d=Object(s.a)((function(e,t){var n=e.sources,s=Object(c.a)(e,u);return Object(o.jsxs)(i.a,{as:"picture",children:[null===n||void 0===n?void 0:n.map((function(e,t){return Object(o.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(o.jsx)(r.a,Object(a.a)({ref:t},s))]})}));d.displayName="Picture"},283:function(e,t,n){"use strict";n.r(t),n.d(t,"NotFound",(function(){return j})),n.d(t,"default",(function(){return j}));var a=n(216),c=n(207),s=n(153),i=n(33),r=n(236),o=n(271),u=n(1),d={optimal:[{media:"(max-width:1024px)",srcSet:"/assets/404-hive@50.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.webp"},{media:"(min-width:1024px)",srcSet:"/assets/404-hive@100.png"}],fallback:"/assets/404-hive@50.png"},j=function(){return Object(u.jsx)(r.a,{meta:{title:"Not Found",description:"Oops! The page you were looking for does not exist"},pageName:"notFound",children:Object(u.jsxs)(a.a,{h:"100%",position:"relative",w:"100%",children:[Object(u.jsx)(o.a,{alt:"",inset:0,position:"absolute",sources:d.optimal,src:d.fallback,zIndex:"hide"}),Object(u.jsxs)(c.a,{align:"center",direction:"column",justify:"center",children:[Object(u.jsx)(o.a,{alt:"404 Image",sources:[{srcSet:"/assets/robot.webp"}],src:"/assets/robot.png"}),Object(u.jsx)(s.a,{as:i.b,colorScheme:"blue",to:"/",children:"Take Me Home"})]})]})})}}}]);
2
+ //# sourceMappingURL=12.cadd501c.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","views/NotFound/NotFound.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","Picture","forwardRef","ref","sources","props","as","map","source","idx","media","srcSet","displayName","bgSources","optimal","fallback","NotFound","h","position","w","alt","inset","src","zIndex","align","direction","justify","Link","colorScheme","to"],"mappings":"2LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,qICvCMe,EAAUC,aACrB,WAAwBC,GAAxB,IAAGC,EAAH,EAAGA,QAAYC,EAAf,wBACE,eAAC,IAAD,CAAKC,GAAG,UAAR,iBACGF,QADH,IACGA,OADH,EACGA,EAASG,KAAI,SAACC,EAAQC,GAAT,OACZ,wBAAkBC,MAAOF,EAAOE,MAAOC,OAAQH,EAAOG,QAAzCF,MAEf,cAAC,IAAD,aAAON,IAAKA,GAASE,UAK3BJ,EAAQW,YAAc,W,yLChBhBC,EAAY,CAChBC,QAAS,CACP,CAAEJ,MAAO,qBAAsBC,OAAQ,4BACvC,CAAED,MAAO,qBAAsBC,OAAQ,6BACvC,CAAED,MAAO,qBAAsBC,OAAQ,6BAEzCI,SAAU,2BAGCC,EAA8B,WACzC,OACE,cAAC/B,EAAA,EAAD,CACEE,KAAM,CACJM,MAAO,YACPC,YAAa,sDAEfN,SAAS,WALX,SAOE,eAAC,IAAD,CAAQ6B,EAAE,OAAOC,SAAS,WAAWC,EAAE,OAAvC,UACE,cAAClB,EAAA,EAAD,CACEmB,IAAI,GACJC,MAAO,EACPH,SAAS,WACTd,QAASS,EAAUC,QACnBQ,IAAKT,EAAUE,SACfQ,OAAO,SAET,eAAC,IAAD,CAAMC,MAAM,SAASC,UAAU,SAASC,QAAQ,SAAhD,UACE,cAACzB,EAAA,EAAD,CACEmB,IAAI,YACJhB,QAAS,CAAC,CAAEO,OAAQ,uBACpBW,IAAI,sBAEN,cAAC,IAAD,CAAQhB,GAAIqB,IAAMC,YAAY,OAAOC,GAAG,IAAxC","file":"static/js/12.f223385d.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, HTMLChakraProps, forwardRef, Image } from \"@chakra-ui/react\";\n\nexport interface PictureProps extends HTMLChakraProps<\"img\"> {\n alt: string;\n src: string;\n sources?: {\n media?: string;\n srcSet: string;\n }[];\n}\n\nexport const Picture = forwardRef<PictureProps, \"img\">(\n ({ sources, ...props }, ref) => (\n <Box as=\"picture\">\n {sources?.map((source, idx) => (\n <source key={idx} media={source.media} srcSet={source.srcSet} />\n ))}\n <Image ref={ref} {...props} />\n </Box>\n )\n);\n\nPicture.displayName = \"Picture\";\n","import { Button, Center, Flex } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Page } from \"../../components/Page\";\nimport { Picture } from \"../../components/Picture\";\n\nconst bgSources = {\n optimal: [\n { media: \"(max-width:1024px)\", srcSet: \"/assets/404-hive@50.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/404-hive@100.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/404-hive@100.png\" },\n ],\n fallback: \"/assets/404-hive@50.png\",\n};\n\nexport const NotFound: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Not Found\",\n description: \"Oops! The page you were looking for does not exist\",\n }}\n pageName=\"notFound\"\n >\n <Center h=\"100%\" position=\"relative\" w=\"100%\">\n <Picture\n alt=\"\"\n inset={0}\n position=\"absolute\"\n sources={bgSources.optimal}\n src={bgSources.fallback}\n zIndex=\"hide\"\n />\n <Flex align=\"center\" direction=\"column\" justify=\"center\">\n <Picture\n alt=\"404 Image\"\n sources={[{ srcSet: \"/assets/robot.webp\" }]}\n src=\"/assets/robot.png\"\n />\n <Button as={Link} colorScheme=\"blue\" to=\"/\">\n Take Me Home\n </Button>\n </Flex>\n </Center>\n </Page>\n );\n};\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/Picture/Picture.tsx","views/NotFound/NotFound.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","Picture","forwardRef","ref","sources","props","as","map","source","idx","media","srcSet","displayName","bgSources","optimal","fallback","NotFound","h","position","w","alt","inset","src","zIndex","align","direction","justify","Link","colorScheme","to"],"mappings":"2LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,qICvCMe,EAAUC,aACrB,WAAwBC,GAAxB,IAAGC,EAAH,EAAGA,QAAYC,EAAf,wBACE,eAAC,IAAD,CAAKC,GAAG,UAAR,iBACGF,QADH,IACGA,OADH,EACGA,EAASG,KAAI,SAACC,EAAQC,GAAT,OACZ,wBAAkBC,MAAOF,EAAOE,MAAOC,OAAQH,EAAOG,QAAzCF,MAEf,cAAC,IAAD,aAAON,IAAKA,GAASE,UAK3BJ,EAAQW,YAAc,W,yLChBhBC,EAAY,CAChBC,QAAS,CACP,CAAEJ,MAAO,qBAAsBC,OAAQ,4BACvC,CAAED,MAAO,qBAAsBC,OAAQ,6BACvC,CAAED,MAAO,qBAAsBC,OAAQ,6BAEzCI,SAAU,2BAGCC,EAA8B,WACzC,OACE,cAAC/B,EAAA,EAAD,CACEE,KAAM,CACJM,MAAO,YACPC,YAAa,sDAEfN,SAAS,WALX,SAOE,eAAC,IAAD,CAAQ6B,EAAE,OAAOC,SAAS,WAAWC,EAAE,OAAvC,UACE,cAAClB,EAAA,EAAD,CACEmB,IAAI,GACJC,MAAO,EACPH,SAAS,WACTd,QAASS,EAAUC,QACnBQ,IAAKT,EAAUE,SACfQ,OAAO,SAET,eAAC,IAAD,CAAMC,MAAM,SAASC,UAAU,SAASC,QAAQ,SAAhD,UACE,cAACzB,EAAA,EAAD,CACEmB,IAAI,YACJhB,QAAS,CAAC,CAAEO,OAAQ,uBACpBW,IAAI,sBAEN,cAAC,IAAD,CAAQhB,GAAIqB,IAAMC,YAAY,OAAOC,GAAG,IAAxC","file":"static/js/12.cadd501c.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, HTMLChakraProps, forwardRef, Image } from \"@chakra-ui/react\";\n\nexport interface PictureProps extends HTMLChakraProps<\"img\"> {\n alt: string;\n src: string;\n sources?: {\n media?: string;\n srcSet: string;\n }[];\n}\n\nexport const Picture = forwardRef<PictureProps, \"img\">(\n ({ sources, ...props }, ref) => (\n <Box as=\"picture\">\n {sources?.map((source, idx) => (\n <source key={idx} media={source.media} srcSet={source.srcSet} />\n ))}\n <Image ref={ref} {...props} />\n </Box>\n )\n);\n\nPicture.displayName = \"Picture\";\n","import { Button, Center, Flex } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Page } from \"../../components/Page\";\nimport { Picture } from \"../../components/Picture\";\n\nconst bgSources = {\n optimal: [\n { media: \"(max-width:1024px)\", srcSet: \"/assets/404-hive@50.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/404-hive@100.webp\" },\n { media: \"(min-width:1024px)\", srcSet: \"/assets/404-hive@100.png\" },\n ],\n fallback: \"/assets/404-hive@50.png\",\n};\n\nexport const NotFound: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Not Found\",\n description: \"Oops! The page you were looking for does not exist\",\n }}\n pageName=\"notFound\"\n >\n <Center h=\"100%\" position=\"relative\" w=\"100%\">\n <Picture\n alt=\"\"\n inset={0}\n position=\"absolute\"\n sources={bgSources.optimal}\n src={bgSources.fallback}\n zIndex=\"hide\"\n />\n <Flex align=\"center\" direction=\"column\" justify=\"center\">\n <Picture\n alt=\"404 Image\"\n sources={[{ srcSet: \"/assets/robot.webp\" }]}\n src=\"/assets/robot.png\"\n />\n <Button as={Link} colorScheme=\"blue\" to=\"/\">\n Take Me Home\n </Button>\n </Flex>\n </Center>\n </Page>\n );\n};\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[13],{236:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(0),o=n(251),a={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},c=n(119),s=n(1),i=function(e){var t=e.children,n=e.meta,i=e.pageName,l=Object(c.b)(a[i]);Object(r.useEffect)((function(){l()}),[l]);var d=n.suffix,u=void 0===d||d,h=n.title,b=n.description,p=u?"".concat(h," - Construct Hub"):h;return Object(s.jsxs)(s.Fragment,{children:[Object(s.jsxs)(o.a,{children:[!1,Object(s.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(s.jsx)("meta",{charSet:"utf-8"}),Object(s.jsx)("title",{children:p}),Object(s.jsx)("meta",{content:p,property:"og:title"}),Object(s.jsx)("meta",{content:p,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:b,name:"description"}),Object(s.jsx)("meta",{content:b,property:"og:description"}),Object(s.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},609:function(e,t,n){"use strict";n.r(t),n.d(t,"FAQ",(function(){return ne})),n.d(t,"default",(function(){return ne}));var r=n(194),o=n(218),a=n(5),c=n(107),s=n(17),i=n(55),l=n(34),d=n(46),u=n(20),h=n(203),b=n(13),p=n(8),j=n(29),m=n(117),f=n(0),g=n(226),O=n(142),y=n(145),x=n(115),v=n(154),w=n(100),C=n(176);function k(){return k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},k.apply(this,arguments)}function I(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var D=Object(g.a)(),A=Object(a.a)(D,4),P=A[0],H=(A[1],A[2]),T=A[3];function K(e){var t=e.onChange,n=e.defaultIndex,r=e.index,o=e.allowMultiple,c=e.allowToggle,s=I(e,["onChange","defaultIndex","index","allowMultiple","allowToggle"]);!function(e){var t=e.index||e.defaultIndex,n=!Object(p.l)(t)&&!Object(p.b)(t)&&e.allowMultiple;Object(j.f)({condition:!!n,message:"If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: "+typeof t+","})}(e),function(e){Object(j.f)({condition:!(!e.allowMultiple||!e.allowToggle),message:"If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not"})}(e);var i=H(),l=Object(f.useState)(-1),d=Object(a.a)(l,2),u=d[0],h=d[1];Object(O.a)((function(){h(-1)}));var b=Object(y.b)({value:r,defaultValue:function(){return o?null!=n?n:[]:null!=n?n:-1},onChange:t}),m=Object(a.a)(b,2),g=m[0],x=m[1];return{index:g,setIndex:x,htmlProps:s,getAccordionItemProps:function(e){var t=!1;null!==e&&(t=Object(p.b)(g)?g.includes(e):g===e);return{isOpen:t,onChange:function(t){if(null!==e)if(o&&Object(p.b)(g)){var n=t?Object(w.a)(g,e):Object(w.d)(g,e);x(n)}else t?x(e):c&&x(-1)}}},focusedIndex:u,setFocusedIndex:h,descendants:i}}var S=Object(m.a)({name:"AccordionContext",errorMessage:"useAccordionContext: `context` is undefined. Seems you forgot to wrap the accordion components in `<Accordion />`"}),q=Object(a.a)(S,2),M=q[0],E=q[1];function F(e){var t=e.isDisabled,n=e.isFocusable,r=e.id,o=I(e,["isDisabled","isFocusable","id"]),c=E(),s=c.getAccordionItemProps,i=c.setFocusedIndex,l=Object(f.useRef)(null),d=Object(x.c)(r,"accordion-button","accordion-panel"),u=Object(a.a)(d,2),h=u[0],p=u[1];!function(e){Object(j.f)({condition:!(!e.isFocusable||e.isDisabled),message:"Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well.\n "})}(e);var m=T({disabled:t&&!n}),g=m.register,O=m.index,y=m.descendants,w=s(-1===O?null:O),D=w.isOpen,A=w.onChange;!function(e){Object(j.f)({condition:e.isOpen&&!!e.isDisabled,message:"Cannot open a disabled accordion item"})}({isOpen:D,isDisabled:t});var P=Object(f.useCallback)((function(){null==A||A(!D),i(O)}),[O,i,D,A]),H=Object(f.useCallback)((function(e){var t={ArrowDown:function(){var e=y.nextEnabled(O);e&&Object(C.a)(e.node)},ArrowUp:function(){var e=y.prevEnabled(O);e&&Object(C.a)(e.node)},Home:function(){var e=y.firstEnabled();e&&Object(C.a)(e.node)},End:function(){var e=y.lastEnabled();e&&Object(C.a)(e.node)}}[Object(b.m)(e)];t&&(e.preventDefault(),t(e))}),[y,O]),K=Object(f.useCallback)((function(){i(O)}),[i,O]),S=Object(f.useCallback)((function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),k({},e,{type:"button",ref:Object(v.a)(g,l,n),id:h,disabled:!!t,"aria-expanded":!!D,"aria-controls":p,onClick:Object(j.b)(e.onClick,P),onFocus:Object(j.b)(e.onFocus,K),onKeyDown:Object(j.b)(e.onKeyDown,H)})}),[h,t,D,P,K,H,p,g]),q=Object(f.useCallback)((function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),k({},e,{ref:t,role:"region",id:p,"aria-labelledby":h,hidden:!D})}),[h,D,p]);return{isOpen:D,isDisabled:t,isFocusable:n,onOpen:function(){null==A||A(!0)},onClose:function(){null==A||A(!1)},getButtonProps:S,getPanelProps:q,htmlProps:o}}function W(){return W=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},W.apply(this,arguments)}function N(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var _=Object(s.a)((function(e,t){var n=e.children,r=e.reduceMotion,o=N(e,["children","reduceMotion"]),a=Object(i.a)("Accordion",o),c=K(Object(l.b)(o)),s=c.htmlProps,h=c.descendants,p=N(c,["htmlProps","descendants"]),j=f.useMemo((function(){return W({},p,{reduceMotion:!!r})}),[p,r]);return f.createElement(P,{value:h},f.createElement(M,{value:j},f.createElement(d.b,{value:a},f.createElement(u.a.div,W({ref:t},s,{className:Object(b.d)("chakra-accordion",o.className)}),n))))}));p.a&&(_.displayName="Accordion");var z=Object(m.a)({name:"AccordionItemContext",errorMessage:"useAccordionItemContext: `context` is undefined. Seems you forgot to wrap the accordion item parts in `<AccordionItem />` "}),B=Object(a.a)(z,2),J=B[0],L=B[1],Y=Object(s.a)((function(e,t){var n=e.children,r=e.className,o=F(e),a=o.htmlProps,c=N(o,["htmlProps"]),s=W({},Object(d.d)().container,{overflowAnchor:"none"}),i=f.useMemo((function(){return c}),[c]);return f.createElement(J,{value:i},f.createElement(u.a.div,W({ref:t},a,{className:Object(b.d)("chakra-accordion__item",r),__css:s}),Object(j.e)(n,{isExpanded:!!c.isOpen,isDisabled:!!c.isDisabled})))}));p.a&&(Y.displayName="AccordionItem");var G=Object(s.a)((function(e,t){var n=(0,L().getButtonProps)(e,t),r=W({display:"flex",alignItems:"center",width:"100%",outline:0},Object(d.d)().button);return f.createElement(u.a.button,W({},n,{className:Object(b.d)("chakra-accordion__button",e.className),__css:r}))}));p.a&&(G.displayName="AccordionButton");var R=Object(s.a)((function(e,t){var n=E().reduceMotion,r=L(),o=r.getPanelProps,a=r.isOpen,c=o(e,t),s=Object(b.d)("chakra-accordion__panel",e.className),i=Object(d.d)();n||delete c.hidden;var l=f.createElement(u.a.div,W({},c,{__css:i.panel,className:s}));return n?l:f.createElement(h.a,{in:a},l)}));p.a&&(R.displayName="AccordionPanel");var Q=function(e){var t=L(),n=t.isOpen,r=t.isDisabled,o=E().reduceMotion,a=Object(b.d)("chakra-accordion__icon",e.className),s=W({opacity:r?.4:1,transform:n?"rotate(-180deg)":void 0,transition:o?void 0:"transform 0.2s",transformOrigin:"center"},Object(d.d)().icon);return f.createElement(c.a,W({viewBox:"0 0 24 24","aria-hidden":!0,className:a,__css:s},e),f.createElement("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"}))};p.a&&(Q.displayName="AccordionIcon");var U=n(236),V=n(198),X=n(1),Z=function(e){var t=e.question,n=e.children;return Object(X.jsxs)(Y,{children:[Object(X.jsxs)(G,{children:[Object(X.jsx)(r.a,{flex:"1",py:2,textAlign:"left",children:Object(X.jsx)(o.a,{as:"h3",ml:8,size:"sm",children:t})}),Object(X.jsx)(Q,{})]}),Object(X.jsx)(R,{px:12,py:4,children:Object(X.jsx)(V.a,{color:"gray.800",fontSize:"md",sx:{p:{marginTop:"0",marginBottom:"4"}},children:n})})]})},$=n(58),ee=function(e){var t=e.href,n=e.children;return Object(X.jsx)($.a,{color:"inherit",hasWarning:!1,href:t,textDecoration:"underline",children:n})},te=function(e){var t=e.heading,n=e.children;return Object(X.jsxs)(Y,{children:[Object(X.jsxs)(G,{children:[Object(X.jsx)(r.a,{flex:"1",textAlign:"left",children:Object(X.jsx)(o.a,{as:"h2",ml:4,size:"lg",children:t})}),Object(X.jsx)(Q,{})]}),Object(X.jsx)(R,{p:0,children:Object(X.jsx)(_,{allowMultiple:!0,w:"100%",children:n})})]})},ne=function(){return Object(X.jsx)(U.a,{meta:{title:"FAQ",description:"Frequently Asked Questions"},pageName:"faq",children:Object(X.jsxs)(r.a,{bg:"white",color:"blue.800",h:"100%",w:"100%",children:[Object(X.jsx)(r.a,{bg:"gray.50",py:20,width:"100%",children:Object(X.jsx)(o.a,{as:"h1",mx:"auto",textAlign:"center",children:"Frequently Asked Questions"})}),Object(X.jsxs)(_,{allowMultiple:!0,defaultIndex:[0,1],children:[Object(X.jsxs)(te,{heading:"General",children:[Object(X.jsx)(Z,{question:"What is Construct Hub?",children:Object(X.jsx)("p",{children:"It is a central destination to discover and share cloud application design patterns and reference architectures defined for the AWS CDK, CDK for Kubernetes (CDK8s), CDK for Terraform (CDKtf) and any other construct-based tool."})}),Object(X.jsxs)(Z,{question:"Why should I use Construct Hub?",children:[Object(X.jsx)("p",{children:"Construct Hub is built to serve the community that uses the constructs programming model (CPM) and to allow them find publicly available constructs they can reuse. Before the Construct Hub, developers did not have an easy way to discover construct libraries created by the community since they were published across various package managers and without a central index."}),Object(X.jsx)("p",{children:"The Construct Hub is a central, trusted venue CDK developers can use to discover published constructs to help them build their applications. In the Dev Preview Construct Hub you can discover constructs in TypeScript and Python and read their documentation and improved API reference in the programming language that the package supports."})]}),Object(X.jsxs)(Z,{question:"How can I add my construct to the Construct Hub?",children:[Object(X.jsxs)("p",{children:["In order to add your construct to the Construct Hub, you will need to publish it to the"," ",Object(X.jsx)(ee,{href:"https://www.npmjs.com/",children:"npmjs.com"})," ","registry, use a permissive license (Apache, BSD, MIT), and annotate it with one of the supported keywords (aws-cdk, cdk8s or cdktf)."]}),Object(X.jsxs)("p",{children:["Additionally, since one of the main goals of the Construct Hub is to enable an ecosystem of constructs that can be consumed by all CDK languages, your library ",Object(X.jsx)("strong",{children:"must"})," be compiled with"," ",Object(X.jsx)(ee,{href:"https://aws.github.io/jsii/",children:"JSII"}),", which is a TypeScript-based programming language for creating multi-language libraries. The Construct Hub uses the type information produced by the JSII compiler in order to render the rich multi-language API reference displayed at the Construct Hub."]}),Object(X.jsx)("p",{children:"The Construct Hub monitors all updates to the npm Registry and will list any packages that meet the above requirements within 5-10 minutes. If your package does not appear in the Construct Hub, please file an issue on our GitHub repository."}),Object(X.jsxs)("p",{children:["There\u2019s some great community content about publishing construct libraries. Check out"," ",Object(X.jsx)(ee,{href:"https://dev.to/aws-builders/a-beginner-s-guide-to-create-aws-cdk-construct-library-with-projen-5eh4",children:'"A Beginner\'s Guide to Create AWS CDK Construct Library with projen"'})," ","by ",Object(X.jsx)(ee,{href:"https://hayao-k.dev/",children:"hayao-k"}),"."]}),Object(X.jsxs)("p",{children:["If you already have a library written in TypeScript and you are looking for information on how to migrate to JSII, see the"," ",Object(X.jsx)(ee,{href:"https://aws.github.io/jsii/user-guides/#library-author-guide",children:"JSII library author guide"}),"."]})]}),Object(X.jsx)(Z,{question:"What is a construct?",children:Object(X.jsxs)("p",{children:["The Constructs Programming Model (CPM) introduces the notion of"," ",Object(X.jsx)("strong",{children:"constructs"}),", which represent cloud building blocks that can be used to assemble complete applications of any complexity. AWS, enterprises, start-ups, and individual developers use CDK constructs to share proven architecture patterns as reusable code libraries, so that everyone can benefit from the collective wisdom of the community."]})}),Object(X.jsx)(Z,{question:"Who owns the constructs in the Construct Hub?",children:Object(X.jsx)("p",{children:"The constructs are owned by the publishers of the packages. Constructs are user generated content that are governed by their own license terms which is displayed in the search results and can be accessed directly through the hyperlinked package page."})}),Object(X.jsx)(Z,{question:"Is the content served in Construct Hub meant to be consumed programmatically?",children:Object(X.jsxs)("p",{children:["No. The content displayed in the site is user generated, with some display formatting. We do not advise that you consume constructs from the search results programmatically. Please note that Construct Hub is a search engine intended to surface third party content from a public endpoint and we provide these results for your convenience AS-IS in accordance with our"," ",Object(X.jsx)(ee,{href:"https://constructs.dev/terms",children:"Site Terms"}),"."]})}),Object(X.jsx)(Z,{question:"Which CDK types are available on the Construct Hub?",children:Object(X.jsx)("p",{children:"AWS CDK, CDK for Kubernetes (CDK8s) and CDK for Terraform (CDKtf)."})}),Object(X.jsx)(Z,{question:"What is AWS CDK?",children:Object(X.jsxs)("p",{children:["AWS CDK is an open-source software development framework for defining applications on AWS and reusable abstractions using familiar programming languages and rich object-oriented APIs. AWS CDK apps synthesize intostandard CloudFormation templates which can be deployed to create infrastructure on AWS. For more information, click"," ",Object(X.jsx)(ee,{href:"https://docs.aws.amazon.com/cdk/latest/guide/home.html",children:"here"}),"."]})}),Object(X.jsx)(Z,{question:"What is CDK8s?",children:Object(X.jsxs)("p",{children:["CDK8s is an open-source software development framework for defining Kubernetes applications and reusable abstractions using familiar programming languages and rich object-oriented APIs."," ",Object(X.jsx)("strong",{children:"cdk8s"})," apps synthesize into standard Kubernetes manifests which can be applied to any Kubernetes cluster. For more information, click"," ",Object(X.jsx)(ee,{href:"https://cdk8s.io/",children:"here"}),"."]})}),Object(X.jsx)(Z,{question:"What is CDKtf?",children:Object(X.jsxs)("p",{children:["The community preview of the"," ",Object(X.jsx)(ee,{href:"https://aws.amazon.com/cdk/",children:"Cloud Development Kit"}),"for Terraform allows you to define infrastructure using a familiar programming language such as TypeScript, Python, or Go, while leveraging the hundreds of providers and thousands of module definitions provided by Terraform and the Terraform ecosystem. For more information, click"," ",Object(X.jsx)(ee,{href:"https://learn.hashicorp.com/tutorials/terraform/cdktf",children:"here"}),"."]})}),Object(X.jsx)(Z,{question:"What programming languages are supported in Dev Preview?",children:Object(X.jsx)("p",{children:"The Construct Hub Dev Preview supports Python and TypeScript."})}),Object(X.jsx)(Z,{question:"Is the support for .NET, Java and Go in the roadmap?",children:Object(X.jsx)("p",{children:"Yes."})}),Object(X.jsx)(Z,{question:"Can I view the source code of a construct?",children:Object(X.jsx)("p",{children:"For each package you can click the repository link that the publisher provided with the package. Theoretically this link should redirect your to the package\u2019s repository. However, we noticed that sometimes the code in the repository can be more or less updated than the package\u2019s code. Please take that into account."})}),Object(X.jsx)(Z,{question:"How can I install a package?",children:Object(X.jsx)("p",{children:"Press \u201cInstall\u201d in the package page and you\u2019ll see the installation instructions."})}),Object(X.jsx)(Z,{question:"How can I report a package?",children:Object(X.jsxs)("p",{children:['You can report a package by clicking "Report a package" from the package page. For claims of copyright infringement, read here:'," ",Object(X.jsx)(ee,{href:"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement",children:"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement"}),"."]})}),Object(X.jsx)(Z,{question:"How can I open a bug or send a PR for a package?",children:Object(X.jsx)("p",{children:"The package is owned by the publisher. To report a bug or send a PR, you should go to the repository link the publisher provided and open a ticket there"})}),Object(X.jsx)(Z,{question:"Why isn\u2019t my package displayed in the Construct Hub?",children:Object(X.jsx)("p",{children:"The Construct Hub displays only publicly available constructs that are JSII compatible and that were published on a public npm registry with an open source license. The package should be published on npm registry with the one of the following Keywords: aws-cdk, cdk8s or cdktf."})}),Object(X.jsx)(Z,{question:"Can I update my package after it has been displayed?",children:Object(X.jsx)("p",{children:"Yes. You should publish a new valid version to the public npm registry. We will detect the new version and display it on the Construct Hub."})}),Object(X.jsx)(Z,{question:"How does the Construct Hub relates to the Construct Catalog?",children:Object(X.jsxs)("p",{children:["The Construct Catalog was built by the CDK community in collaboration with the AWS CDK team. The Construct Hub is the official version for the Construct Catalog."," ",Object(X.jsx)(ee,{href:"https://awscdk.io",children:"https://awscdk.io"})," now redirects to the Construct Hub."]})}),Object(X.jsx)(Z,{question:"How can I participate in the Construct Hub community?",children:Object(X.jsxs)("p",{children:["The Construct Hub is built as a public construct. Please join the"," ",Object(X.jsx)(ee,{href:"https://github.com/cdklabs/construct-hub-webapp",children:"Construct Hub GitHub community"}),". You are also welcome to join the #construct-hub-dev channel in the ",Object(X.jsx)(ee,{href:"https://cdk.dev/",children:"CDK community"})," Slack workspace."]})}),Object(X.jsx)(Z,{question:"Is there a community slack channel for the CDK community?",children:Object(X.jsxs)("p",{children:["Please join the CDK Slack channel (",Object(X.jsx)(ee,{href:"https://cdk.dev/",children:"https://cdk.dev/"}),"). This Slack channel is managed by the CDK community for the CDK community."]})})]}),Object(X.jsxs)(te,{heading:"Getting Started",children:[Object(X.jsx)(Z,{question:"Do I need a user for the Construct Hub?",children:Object(X.jsx)("p",{children:"No. The Construct Hub doesn\u2019t require any signup."})}),Object(X.jsx)(Z,{question:"How do I get started?",children:Object(X.jsx)("p",{children:"Use our home page to discover publicly available packages. You may run a search to find packages you\u2019re interested in and mention your preferred programming language. For each package you will find helpful information such as README and API reference for the supported programming languages. You will also find links and keywords that the publisher provided with the package and installation instructions."})})]})]})]})})}}}]);
2
+ //# sourceMappingURL=13.fe1e2da5.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","../../../src/use-accordion.ts","../../../src/accordion.tsx","views/FAQ/FAQItem.tsx","views/FAQ/FAQLink.tsx","views/FAQ/FAQSection.tsx","views/FAQ/FAQ.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","createDescendantContext","useAccordion","props","index","allowToggle","condition","isUndefined","isArray","warn","message","allowMultipleWarning","allowMultipleAndAllowToggleWarning","descendants","useAccordionDescendants","useState","useUnmountEffect","setFocusedIndex","useControllableState","value","defaultValue","defaultIndex","onChange","setIndex","htmlProps","getAccordionItemProps","idx","isOpen","allowMultiple","nextState","addItem","removeItem","focusedIndex","createContext","errorMessage","useAccordionItem","id","useAccordionContext","buttonRef","useRef","useIds","focusableNotDisabledWarning","useAccordionDescendant","disabled","isDisabled","isFocusable","warnIfOpenAndDisabled","onClick","useCallback","onKeyDown","action","ArrowDown","next","focus","ArrowUp","prev","Home","first","End","last","normalizeEventKey","onFocus","getButtonProps","ref","type","mergeRefs","register","callAllHandlers","getPanelProps","role","hidden","buttonId","onOpen","onClose","Accordion","forwardRef","reduceMotion","styles","useMultiStyleConfig","omitThemingProps","ctx","context","className","cx","AccordionItem","containerStyles","useStyles","overflowAnchor","React","__css","runIfFn","isExpanded","AccordionButton","buttonProps","useAccordionItemContext","buttonStyles","display","alignItems","width","outline","AccordionPanel","panelProps","_className","child","in","AccordionIcon","iconStyles","opacity","transform","transition","undefined","transformOrigin","viewBox","fill","d","FAQItem","question","flex","py","textAlign","as","ml","size","px","color","fontSize","sx","p","marginTop","marginBottom","FAQLink","href","ExternalLink","hasWarning","textDecoration","FAQSection","heading","w","FAQ","bg","h","mx"],"mappings":"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","file":"static/js/13.97b408c9.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { createDescendantContext } from \"@chakra-ui/descendant\"\nimport {\n useControllableState,\n useIds,\n useUnmountEffect,\n} from \"@chakra-ui/hooks\"\nimport {\n createContext,\n EventKeyMap,\n mergeRefs,\n PropGetter,\n} from \"@chakra-ui/react-utils\"\nimport {\n addItem,\n callAllHandlers,\n focus,\n isArray,\n isUndefined,\n normalizeEventKey,\n removeItem,\n warn,\n} from \"@chakra-ui/utils\"\nimport React, { useCallback, useRef, useState } from \"react\"\n\n/* -------------------------------------------------------------------------------------------------\n * Create context to track descendants and their indices\n * -----------------------------------------------------------------------------------------------*/\n\nexport const [\n AccordionDescendantsProvider,\n useAccordionDescendantsContext,\n useAccordionDescendants,\n useAccordionDescendant,\n] = createDescendantContext<HTMLButtonElement>()\n\n/* -------------------------------------------------------------------------------------------------\n * useAccordion - The root react hook that manages all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport type ExpandedIndex = number | number[]\n\nexport interface UseAccordionProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n */\n allowMultiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n */\n allowToggle?: boolean\n /**\n * The index(es) of the expanded accordion item\n */\n index?: ExpandedIndex\n /**\n * The initial index(es) of the expanded accordion item\n */\n defaultIndex?: ExpandedIndex\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?(expandedIndex: ExpandedIndex): void\n}\n\n/**\n * useAccordion hook provides all the state and focus management logic\n * for accordion items.\n */\nexport function useAccordion(props: UseAccordionProps) {\n const {\n onChange,\n defaultIndex,\n index: indexProp,\n allowMultiple,\n allowToggle,\n ...htmlProps\n } = props\n\n // validate the props and `warn` if used incorrectly\n allowMultipleWarning(props)\n allowMultipleAndAllowToggleWarning(props)\n\n /**\n * Think of this as the register to each accordion item.\n * We used to manage focus between accordion item buttons.\n *\n * Every accordion item, registers their button refs in this context\n */\n const descendants = useAccordionDescendants()\n\n /**\n * This state is used to track the index focused accordion\n * button when click on the button, tab on the button, or\n * use the down/up arrow to navigate.\n */\n const [focusedIndex, setFocusedIndex] = useState(-1)\n\n /**\n * Reset focused index when accordion unmounts\n * or descendants change\n */\n useUnmountEffect(() => {\n setFocusedIndex(-1)\n })\n\n /**\n * Hook that manages the controlled and un-controlled state\n * for the accordion.\n */\n const [index, setIndex] = useControllableState({\n value: indexProp,\n defaultValue() {\n if (allowMultiple) return defaultIndex ?? []\n return defaultIndex ?? -1\n },\n onChange,\n })\n\n /**\n * Gets the `isOpen` and `onChange` props for a child accordion item based on\n * the child's index.\n *\n * @param idx {number} The index of the child accordion item\n */\n const getAccordionItemProps = (idx: number | null) => {\n let isOpen = false\n if (idx !== null) {\n isOpen = isArray(index) ? index.includes(idx) : index === idx\n }\n\n const onChange = (isOpen: boolean) => {\n if (idx === null) return\n\n if (allowMultiple && isArray(index)) {\n const nextState = isOpen ? addItem(index, idx) : removeItem(index, idx)\n setIndex(nextState)\n } else if (isOpen) {\n setIndex(idx)\n } else if (allowToggle) {\n setIndex(-1)\n }\n }\n\n return { isOpen, onChange }\n }\n\n return {\n index,\n setIndex,\n htmlProps,\n getAccordionItemProps,\n focusedIndex,\n setFocusedIndex,\n descendants,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\n/* -------------------------------------------------------------------------------------------------\n * Create context for the root accordion logic\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AccordionContext\n extends Omit<UseAccordionReturn, \"htmlProps\" | \"descendants\"> {\n reduceMotion: boolean\n}\n\nexport const [\n AccordionProvider,\n useAccordionContext,\n] = createContext<AccordionContext>({\n name: \"AccordionContext\",\n errorMessage:\n \"useAccordionContext: `context` is undefined. Seems you forgot to wrap the accordion components in `<Accordion />`\",\n})\n\n/* -------------------------------------------------------------------------------------------------\n * Hook for a single accordion item\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface UseAccordionItemProps {\n /**\n * If `true`, the accordion item will be disabled.\n */\n isDisabled?: boolean\n /**\n * If `true`, the accordion item will be focusable.\n */\n isFocusable?: boolean\n /**\n * A unique id for the accordion item.\n */\n id?: string\n}\n\n/**\n * useAccordionItem\n *\n * React hook that provides the open/close functionality\n * for an accordion item and its children\n */\nexport function useAccordionItem(props: UseAccordionItemProps) {\n const { isDisabled, isFocusable, id, ...htmlProps } = props\n const { getAccordionItemProps, setFocusedIndex } = useAccordionContext()\n\n const buttonRef = useRef<HTMLElement>(null)\n\n /**\n * Generate unique ids for all accordion item components (button and panel)\n */\n const [buttonId, panelId] = useIds(id, `accordion-button`, `accordion-panel`)\n\n focusableNotDisabledWarning(props)\n\n /**\n * Think of this as a way to register this accordion item\n * with its parent `useAccordion`\n */\n const { register, index, descendants } = useAccordionDescendant({\n disabled: isDisabled && !isFocusable,\n })\n\n const { isOpen, onChange } = getAccordionItemProps(\n index === -1 ? null : index,\n )\n\n warnIfOpenAndDisabled({ isOpen, isDisabled })\n\n const onOpen = () => {\n onChange?.(true)\n }\n\n const onClose = () => {\n onChange?.(false)\n }\n\n /**\n * Toggle the visibility of the accordion item\n */\n const onClick = useCallback(() => {\n onChange?.(!isOpen)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, isOpen, onChange])\n\n /**\n * Manage keyboard navigation between accordion items.\n */\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const eventKey = normalizeEventKey(event)\n\n const keyMap: EventKeyMap = {\n ArrowDown: () => {\n const next = descendants.nextEnabled(index)\n if (next) focus(next.node)\n },\n ArrowUp: () => {\n const prev = descendants.prevEnabled(index)\n if (prev) focus(prev.node)\n },\n Home: () => {\n const first = descendants.firstEnabled()\n if (first) focus(first.node)\n },\n End: () => {\n const last = descendants.lastEnabled()\n if (last) focus(last.node)\n },\n }\n\n const action = keyMap[eventKey]\n\n if (action) {\n event.preventDefault()\n action(event)\n }\n },\n [descendants, index],\n )\n\n /**\n * Since each accordion item's button still remains tabbable, let's\n * update the focusedIndex when it receives focus\n */\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const getButtonProps: PropGetter<HTMLButtonElement> = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n type: \"button\",\n ref: mergeRefs(register, buttonRef, ref),\n id: buttonId,\n disabled: !!isDisabled,\n \"aria-expanded\": !!isOpen,\n \"aria-controls\": panelId,\n onClick: callAllHandlers(props.onClick, onClick),\n onFocus: callAllHandlers(props.onFocus, onFocus),\n onKeyDown: callAllHandlers(props.onKeyDown, onKeyDown),\n }),\n [\n buttonId,\n isDisabled,\n isOpen,\n onClick,\n onFocus,\n onKeyDown,\n panelId,\n register,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref,\n role: \"region\",\n id: panelId,\n \"aria-labelledby\": buttonId,\n hidden: !isOpen,\n }),\n [buttonId, isOpen, panelId],\n )\n\n return {\n isOpen,\n isDisabled,\n isFocusable,\n onOpen,\n onClose,\n getButtonProps,\n getPanelProps,\n htmlProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n\n/* -------------------------------------------------------------------------------------------------\n * Validate accordion and accordion item props, and emit warnings.\n * -----------------------------------------------------------------------------------------------*/\n\nfunction allowMultipleWarning(props: UseAccordionProps) {\n const index = props.index || props.defaultIndex\n const condition =\n !isUndefined(index) && !isArray(index) && props.allowMultiple\n\n warn({\n condition: !!condition,\n message: `If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof index},`,\n })\n}\n\nfunction allowMultipleAndAllowToggleWarning(props: UseAccordionProps) {\n warn({\n condition: !!(props.allowMultiple && props.allowToggle),\n message: `If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not`,\n })\n}\n\nfunction focusableNotDisabledWarning(props: UseAccordionItemProps) {\n warn({\n condition: !!(props.isFocusable && !props.isDisabled),\n message: `Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well.\n `,\n })\n}\n\nfunction warnIfOpenAndDisabled(props: {\n isOpen: boolean\n isDisabled?: boolean\n}) {\n warn({\n condition: props.isOpen && !!props.isDisabled,\n message: \"Cannot open a disabled accordion item\",\n })\n}\n","import { Icon, IconProps } from \"@chakra-ui/icon\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { Collapse } from \"@chakra-ui/transition\"\nimport { cx, Omit, runIfFn, __DEV__ } from \"@chakra-ui/utils\"\nimport { createContext, MaybeRenderProp } from \"@chakra-ui/react-utils\"\nimport * as React from \"react\"\nimport {\n AccordionProvider,\n useAccordion,\n useAccordionContext,\n useAccordionItem,\n UseAccordionItemProps,\n UseAccordionItemReturn,\n UseAccordionProps,\n AccordionDescendantsProvider,\n} from \"./use-accordion\"\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion - The wrapper that provides context for all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionProps\n extends UseAccordionProps,\n Omit<HTMLChakraProps<\"div\">, keyof UseAccordionProps>,\n ThemingProps<\"Accordion\"> {\n /**\n * If `true`, height animation and transitions will be disabled.\n */\n reduceMotion?: boolean\n}\n\n/**\n * The wrapper that provides context and focus management\n * for all accordion items.\n *\n * It wraps all accordion items in a `div` for better grouping.\n * @see Docs https://chakra-ui.com/accordion\n */\nexport const Accordion = forwardRef<AccordionProps, \"div\">(\n ({ children, reduceMotion, ...props }, ref) => {\n const styles = useMultiStyleConfig(\"Accordion\", props)\n const ownProps = omitThemingProps(props)\n\n const { htmlProps, descendants, ...context } = useAccordion(ownProps)\n\n const ctx = React.useMemo(\n () => ({ ...context, reduceMotion: !!reduceMotion }),\n [context, reduceMotion],\n )\n\n return (\n <AccordionDescendantsProvider value={descendants}>\n <AccordionProvider value={ctx}>\n <StylesProvider value={styles}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion\", props.className)}\n >\n {children}\n </chakra.div>\n </StylesProvider>\n </AccordionProvider>\n </AccordionDescendantsProvider>\n )\n },\n)\n\nif (__DEV__) {\n Accordion.displayName = \"Accordion\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item\n * -----------------------------------------------------------------------------------------------*/\n\ntype AccordionItemContext = Omit<UseAccordionItemReturn, \"htmlProps\">\n\nconst [\n AccordionItemProvider,\n useAccordionItemContext,\n] = createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n errorMessage:\n \"useAccordionItemContext: `context` is undefined. Seems you forgot to wrap the accordion item parts in `<AccordionItem />` \",\n})\n\nexport interface AccordionItemProps\n extends Omit<HTMLChakraProps<\"div\">, keyof UseAccordionItemProps>,\n UseAccordionItemProps {\n children?: MaybeRenderProp<{\n isExpanded: boolean\n isDisabled: boolean\n }>\n}\n\n/**\n * AccordionItem is a single accordion that provides the open-close\n * behavior when the accordion button is clicked.\n *\n * It also provides context for the accordion button and panel.\n */\nexport const AccordionItem = forwardRef<AccordionItemProps, \"div\">(\n (props, ref) => {\n const { children, className } = props\n const { htmlProps, ...context } = useAccordionItem(props)\n\n const styles = useStyles()\n const containerStyles: SystemStyleObject = {\n ...styles.container,\n overflowAnchor: \"none\",\n }\n\n const ctx = React.useMemo(() => context, [context])\n\n return (\n <AccordionItemProvider value={ctx}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion__item\", className)}\n __css={containerStyles}\n >\n {runIfFn(children, {\n isExpanded: !!context.isOpen,\n isDisabled: !!context.isDisabled,\n })}\n </chakra.div>\n </AccordionItemProvider>\n )\n },\n)\n\nif (__DEV__) {\n AccordionItem.displayName = \"AccordionItem\"\n}\n\n/**\n * React hook to get the state and actions of an accordion item\n */\nexport function useAccordionItemState() {\n const { isOpen, isDisabled, onClose, onOpen } = useAccordionItemContext()\n return { isOpen, onClose, isDisabled, onOpen }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Button\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionButtonProps extends HTMLChakraProps<\"button\"> {}\n\n/**\n * AccordionButton is used expands and collapses an accordion item.\n * It must be a child of `AccordionItem`.\n *\n * Note 🚨: Each accordion button must be wrapped in an heading tag,\n * that is appropriate for the information architecture of the page.\n */\nexport const AccordionButton = forwardRef<AccordionButtonProps, \"button\">(\n (props, ref) => {\n const { getButtonProps } = useAccordionItemContext()\n const buttonProps = getButtonProps(props, ref)\n\n const styles = useStyles()\n const buttonStyles: SystemStyleObject = {\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n outline: 0,\n ...styles.button,\n }\n\n return (\n <chakra.button\n {...buttonProps}\n className={cx(\"chakra-accordion__button\", props.className)}\n __css={buttonStyles}\n />\n )\n },\n)\n\nif (__DEV__) {\n AccordionButton.displayName = \"AccordionButton\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Panel\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionPanelProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * Accordion panel that holds the content for each accordion.\n * It shows and hides based on the state login from the `AccordionItem`.\n *\n * It uses the `Collapse` component to animate its height.\n */\nexport const AccordionPanel = forwardRef<AccordionPanelProps, \"div\">(\n (props, ref) => {\n const { reduceMotion } = useAccordionContext()\n const { getPanelProps, isOpen } = useAccordionItemContext()\n\n // remove `hidden` prop, 'coz we're using height animation\n const panelProps = getPanelProps(props, ref)\n\n const _className = cx(\"chakra-accordion__panel\", props.className)\n const styles = useStyles()\n\n if (!reduceMotion) {\n delete panelProps.hidden\n }\n\n const child = (\n <chakra.div {...panelProps} __css={styles.panel} className={_className} />\n )\n\n if (!reduceMotion) {\n return <Collapse in={isOpen}>{child}</Collapse>\n }\n\n return child\n },\n)\n\nif (__DEV__) {\n AccordionPanel.displayName = \"AccordionPanel\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Icon\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * AccordionIcon that gives a visual cue of the open/close state of the accordion item.\n * It rotates `180deg` based on the open/close state.\n */\nexport const AccordionIcon: React.FC<IconProps> = (props) => {\n const { isOpen, isDisabled } = useAccordionItemContext()\n const { reduceMotion } = useAccordionContext()\n\n const _className = cx(\"chakra-accordion__icon\", props.className)\n const styles = useStyles()\n\n const iconStyles: SystemStyleObject = {\n opacity: isDisabled ? 0.4 : 1,\n transform: isOpen ? \"rotate(-180deg)\" : undefined,\n transition: reduceMotion ? undefined : \"transform 0.2s\",\n transformOrigin: \"center\",\n ...styles.icon,\n }\n\n return (\n <Icon\n viewBox=\"0 0 24 24\"\n aria-hidden\n className={_className}\n __css={iconStyles}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n />\n </Icon>\n )\n}\n\nif (__DEV__) {\n AccordionIcon.displayName = \"AccordionIcon\"\n}\n","import {\n Heading,\n Text,\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Box,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactChild } from \"react\";\n\nexport interface FAQItemProps {\n question: ReactChild;\n}\n\nexport const FAQItem: FunctionComponent<FAQItemProps> = ({\n question,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" py={2} textAlign=\"left\">\n <Heading as=\"h3\" ml={8} size=\"sm\">\n {question}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel px={12} py={4}>\n <Text\n color=\"gray.800\"\n fontSize=\"md\"\n sx={{ p: { marginTop: \"0\", marginBottom: \"4\" } }}\n >\n {children}\n </Text>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\n\nexport interface FAQLinkProps {\n href: string;\n}\n\nexport const FAQLink: FunctionComponent<FAQLinkProps> = ({\n href,\n children,\n}) => (\n <ExternalLink\n color=\"inherit\"\n hasWarning={false}\n href={href}\n textDecoration=\"underline\"\n >\n {children}\n </ExternalLink>\n);\n","import {\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Heading,\n Box,\n Accordion,\n} from \"@chakra-ui/react\";\n\nimport type { FunctionComponent } from \"react\";\n\nexport interface FAQSectionProps {\n heading: string;\n}\n\nexport const FAQSection: FunctionComponent<FAQSectionProps> = ({\n heading,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" textAlign=\"left\">\n <Heading as=\"h2\" ml={4} size=\"lg\">\n {heading}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel p={0}>\n <Accordion allowMultiple w=\"100%\">\n {children}\n </Accordion>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { Box, Heading, Accordion } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FAQItem } from \"./FAQItem\";\nimport { FAQLink } from \"./FAQLink\";\nimport { FAQSection } from \"./FAQSection\";\n\nexport const FAQ: FunctionComponent = () => (\n <Page\n meta={{\n title: \"FAQ\",\n description: \"Frequently Asked Questions\",\n }}\n pageName=\"faq\"\n >\n <Box bg=\"white\" color=\"blue.800\" h=\"100%\" w=\"100%\">\n <Box bg=\"gray.50\" py={20} width=\"100%\">\n <Heading as=\"h1\" mx=\"auto\" textAlign=\"center\">\n Frequently Asked Questions\n </Heading>\n </Box>\n <Accordion allowMultiple defaultIndex={[0, 1]}>\n <FAQSection heading=\"General\">\n <FAQItem question=\"What is Construct Hub?\">\n <p>\n It is a central destination to discover and share cloud\n application design patterns and reference architectures defined\n for the AWS CDK, CDK for Kubernetes (CDK8s), CDK for Terraform\n (CDKtf) and any other construct-based tool.\n </p>\n </FAQItem>\n <FAQItem question=\"Why should I use Construct Hub?\">\n <p>\n Construct Hub is built to serve the community that uses the\n constructs programming model (CPM) and to allow them find publicly\n available constructs they can reuse. Before the Construct Hub,\n developers did not have an easy way to discover construct\n libraries created by the community since they were published\n across various package managers and without a central index.\n </p>\n <p>\n The Construct Hub is a central, trusted venue CDK developers can\n use to discover published constructs to help them build their\n applications. In the Dev Preview Construct Hub you can discover\n constructs in TypeScript and Python and read their documentation\n and improved API reference in the programming language that the\n package supports.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I add my construct to the Construct Hub?\">\n <p>\n In order to add your construct to the Construct Hub, you will need\n to publish it to the{\" \"}\n <FAQLink href=\"https://www.npmjs.com/\">npmjs.com</FAQLink>{\" \"}\n registry, use a permissive license (Apache, BSD, MIT), and\n annotate it with one of the supported keywords (aws-cdk, cdk8s or\n cdktf).\n </p>\n <p>\n Additionally, since one of the main goals of the Construct Hub is\n to enable an ecosystem of constructs that can be consumed by all\n CDK languages, your library <strong>must</strong> be compiled with{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/\">JSII</FAQLink>, which\n is a TypeScript-based programming language for creating\n multi-language libraries. The Construct Hub uses the type\n information produced by the JSII compiler in order to render the\n rich multi-language API reference displayed at the Construct Hub.\n </p>\n <p>\n The Construct Hub monitors all updates to the npm Registry and\n will list any packages that meet the above requirements within\n 5-10 minutes. If your package does not appear in the Construct\n Hub, please file an issue on our GitHub repository.\n </p>\n <p>\n There’s some great community content about publishing construct\n libraries. Check out{\" \"}\n <FAQLink href=\"https://dev.to/aws-builders/a-beginner-s-guide-to-create-aws-cdk-construct-library-with-projen-5eh4\">\n &quot;A Beginner&apos;s Guide to Create AWS CDK Construct\n Library with projen&quot;\n </FAQLink>{\" \"}\n by <FAQLink href=\"https://hayao-k.dev/\">hayao-k</FAQLink>.\n </p>\n <p>\n If you already have a library written in TypeScript and you are\n looking for information on how to migrate to JSII, see the{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/user-guides/#library-author-guide\">\n JSII library author guide\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is a construct?\">\n <p>\n The Constructs Programming Model (CPM) introduces the notion of{\" \"}\n <strong>constructs</strong>, which represent cloud building blocks\n that can be used to assemble complete applications of any\n complexity. AWS, enterprises, start-ups, and individual developers\n use CDK constructs to share proven architecture patterns as\n reusable code libraries, so that everyone can benefit from the\n collective wisdom of the community.\n </p>\n </FAQItem>\n <FAQItem question=\"Who owns the constructs in the Construct Hub?\">\n <p>\n The constructs are owned by the publishers of the packages.\n Constructs are user generated content that are governed by their\n own license terms which is displayed in the search results and can\n be accessed directly through the hyperlinked package page.\n </p>\n </FAQItem>\n <FAQItem question=\"Is the content served in Construct Hub meant to be consumed programmatically?\">\n <p>\n No. The content displayed in the site is user generated, with some\n display formatting. We do not advise that you consume constructs\n from the search results programmatically. Please note that\n Construct Hub is a search engine intended to surface third party\n content from a public endpoint and we provide these results for\n your convenience AS-IS in accordance with our{\" \"}\n <FAQLink href=\"https://constructs.dev/terms\">Site Terms</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"Which CDK types are available on the Construct Hub?\">\n <p>\n AWS CDK, CDK for Kubernetes (CDK8s) and CDK for Terraform (CDKtf).\n </p>\n </FAQItem>\n <FAQItem question=\"What is AWS CDK?\">\n <p>\n AWS CDK is an open-source software development framework for\n defining applications on AWS and reusable abstractions using\n familiar programming languages and rich object-oriented APIs. AWS\n CDK apps synthesize intostandard CloudFormation templates which\n can be deployed to create infrastructure on AWS. For more\n information, click{\" \"}\n <FAQLink href=\"https://docs.aws.amazon.com/cdk/latest/guide/home.html\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDK8s?\">\n <p>\n CDK8s is an open-source software development framework for\n defining Kubernetes applications and reusable abstractions using\n familiar programming languages and rich object-oriented APIs.{\" \"}\n <strong>cdk8s</strong> apps synthesize into standard Kubernetes\n manifests which can be applied to any Kubernetes cluster. For more\n information, click{\" \"}\n <FAQLink href=\"https://cdk8s.io/\">here</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDKtf?\">\n <p>\n The community preview of the{\" \"}\n <FAQLink href=\"https://aws.amazon.com/cdk/\">\n Cloud Development Kit\n </FAQLink>\n for Terraform allows you to define infrastructure using a familiar\n programming language such as TypeScript, Python, or Go, while\n leveraging the hundreds of providers and thousands of module\n definitions provided by Terraform and the Terraform ecosystem. For\n more information, click{\" \"}\n <FAQLink href=\"https://learn.hashicorp.com/tutorials/terraform/cdktf\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What programming languages are supported in Dev Preview?\">\n <p>The Construct Hub Dev Preview supports Python and TypeScript.</p>\n </FAQItem>\n <FAQItem question=\"Is the support for .NET, Java and Go in the roadmap?\">\n <p>Yes.</p>\n </FAQItem>\n <FAQItem question=\"Can I view the source code of a construct?\">\n <p>\n For each package you can click the repository link that the\n publisher provided with the package. Theoretically this link\n should redirect your to the package’s repository. However, we\n noticed that sometimes the code in the repository can be more or\n less updated than the package’s code. Please take that into\n account.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I install a package?\">\n <p>\n Press “Install” in the package page and you’ll see the\n installation instructions.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I report a package?\">\n <p>\n You can report a package by clicking &quot;Report a package&quot;\n from the package page. For claims of copyright infringement, read\n here:{\" \"}\n <FAQLink href=\"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\">\n https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"How can I open a bug or send a PR for a package?\">\n <p>\n The package is owned by the publisher. To report a bug or send a\n PR, you should go to the repository link the publisher provided\n and open a ticket there\n </p>\n </FAQItem>\n <FAQItem question=\"Why isn’t my package displayed in the Construct Hub?\">\n <p>\n The Construct Hub displays only publicly available constructs that\n are JSII compatible and that were published on a public npm\n registry with an open source license. The package should be\n published on npm registry with the one of the following Keywords:\n aws-cdk, cdk8s or cdktf.\n </p>\n </FAQItem>\n <FAQItem question=\"Can I update my package after it has been displayed?\">\n <p>\n Yes. You should publish a new valid version to the public npm\n registry. We will detect the new version and display it on the\n Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How does the Construct Hub relates to the Construct Catalog?\">\n <p>\n The Construct Catalog was built by the CDK community in\n collaboration with the AWS CDK team. The Construct Hub is the\n official version for the Construct Catalog.{\" \"}\n <FAQLink href=\"https://awscdk.io\">https://awscdk.io</FAQLink> now\n redirects to the Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I participate in the Construct Hub community?\">\n <p>\n The Construct Hub is built as a public construct. Please join the{\" \"}\n <FAQLink href=\"https://github.com/cdklabs/construct-hub-webapp\">\n Construct Hub GitHub community\n </FAQLink>\n . You are also welcome to join the #construct-hub-dev channel in\n the <FAQLink href=\"https://cdk.dev/\">CDK community</FAQLink> Slack\n workspace.\n </p>\n </FAQItem>\n <FAQItem question=\"Is there a community slack channel for the CDK community?\">\n <p>\n Please join the CDK Slack channel (\n <FAQLink href=\"https://cdk.dev/\">https://cdk.dev/</FAQLink>). This\n Slack channel is managed by the CDK community for the CDK\n community.\n </p>\n </FAQItem>\n </FAQSection>\n <FAQSection heading=\"Getting Started\">\n <FAQItem question=\"Do I need a user for the Construct Hub?\">\n <p>No. The Construct Hub doesn’t require any signup.</p>\n </FAQItem>\n <FAQItem question=\"How do I get started?\">\n <p>\n Use our home page to discover publicly available packages. You may\n run a search to find packages you’re interested in and mention\n your preferred programming language. For each package you will\n find helpful information such as README and API reference for the\n supported programming languages. You will also find links and\n keywords that the publisher provided with the package and\n installation instructions.\n </p>\n </FAQItem>\n </FAQSection>\n </Accordion>\n </Box>\n </Page>\n);\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","../../../src/use-accordion.ts","../../../src/accordion.tsx","views/FAQ/FAQItem.tsx","views/FAQ/FAQLink.tsx","views/FAQ/FAQSection.tsx","views/FAQ/FAQ.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","createDescendantContext","useAccordion","props","index","allowToggle","condition","isUndefined","isArray","warn","message","allowMultipleWarning","allowMultipleAndAllowToggleWarning","descendants","useAccordionDescendants","useState","useUnmountEffect","setFocusedIndex","useControllableState","value","defaultValue","defaultIndex","onChange","setIndex","htmlProps","getAccordionItemProps","idx","isOpen","allowMultiple","nextState","addItem","removeItem","focusedIndex","createContext","errorMessage","useAccordionItem","id","useAccordionContext","buttonRef","useRef","useIds","focusableNotDisabledWarning","useAccordionDescendant","disabled","isDisabled","isFocusable","warnIfOpenAndDisabled","onClick","useCallback","onKeyDown","action","ArrowDown","next","focus","ArrowUp","prev","Home","first","End","last","normalizeEventKey","onFocus","getButtonProps","ref","type","mergeRefs","register","callAllHandlers","getPanelProps","role","hidden","buttonId","onOpen","onClose","Accordion","forwardRef","reduceMotion","styles","useMultiStyleConfig","omitThemingProps","ctx","context","className","cx","AccordionItem","containerStyles","useStyles","overflowAnchor","React","__css","runIfFn","isExpanded","AccordionButton","buttonProps","useAccordionItemContext","buttonStyles","display","alignItems","width","outline","AccordionPanel","panelProps","_className","child","in","AccordionIcon","iconStyles","opacity","transform","transition","undefined","transformOrigin","viewBox","fill","d","FAQItem","question","flex","py","textAlign","as","ml","size","px","color","fontSize","sx","p","marginTop","marginBottom","FAQLink","href","ExternalLink","hasWarning","textDecoration","FAQSection","heading","w","FAQ","bg","h","mx"],"mappings":"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","file":"static/js/13.fe1e2da5.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { createDescendantContext } from \"@chakra-ui/descendant\"\nimport {\n useControllableState,\n useIds,\n useUnmountEffect,\n} from \"@chakra-ui/hooks\"\nimport {\n createContext,\n EventKeyMap,\n mergeRefs,\n PropGetter,\n} from \"@chakra-ui/react-utils\"\nimport {\n addItem,\n callAllHandlers,\n focus,\n isArray,\n isUndefined,\n normalizeEventKey,\n removeItem,\n warn,\n} from \"@chakra-ui/utils\"\nimport React, { useCallback, useRef, useState } from \"react\"\n\n/* -------------------------------------------------------------------------------------------------\n * Create context to track descendants and their indices\n * -----------------------------------------------------------------------------------------------*/\n\nexport const [\n AccordionDescendantsProvider,\n useAccordionDescendantsContext,\n useAccordionDescendants,\n useAccordionDescendant,\n] = createDescendantContext<HTMLButtonElement>()\n\n/* -------------------------------------------------------------------------------------------------\n * useAccordion - The root react hook that manages all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport type ExpandedIndex = number | number[]\n\nexport interface UseAccordionProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n */\n allowMultiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n */\n allowToggle?: boolean\n /**\n * The index(es) of the expanded accordion item\n */\n index?: ExpandedIndex\n /**\n * The initial index(es) of the expanded accordion item\n */\n defaultIndex?: ExpandedIndex\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?(expandedIndex: ExpandedIndex): void\n}\n\n/**\n * useAccordion hook provides all the state and focus management logic\n * for accordion items.\n */\nexport function useAccordion(props: UseAccordionProps) {\n const {\n onChange,\n defaultIndex,\n index: indexProp,\n allowMultiple,\n allowToggle,\n ...htmlProps\n } = props\n\n // validate the props and `warn` if used incorrectly\n allowMultipleWarning(props)\n allowMultipleAndAllowToggleWarning(props)\n\n /**\n * Think of this as the register to each accordion item.\n * We used to manage focus between accordion item buttons.\n *\n * Every accordion item, registers their button refs in this context\n */\n const descendants = useAccordionDescendants()\n\n /**\n * This state is used to track the index focused accordion\n * button when click on the button, tab on the button, or\n * use the down/up arrow to navigate.\n */\n const [focusedIndex, setFocusedIndex] = useState(-1)\n\n /**\n * Reset focused index when accordion unmounts\n * or descendants change\n */\n useUnmountEffect(() => {\n setFocusedIndex(-1)\n })\n\n /**\n * Hook that manages the controlled and un-controlled state\n * for the accordion.\n */\n const [index, setIndex] = useControllableState({\n value: indexProp,\n defaultValue() {\n if (allowMultiple) return defaultIndex ?? []\n return defaultIndex ?? -1\n },\n onChange,\n })\n\n /**\n * Gets the `isOpen` and `onChange` props for a child accordion item based on\n * the child's index.\n *\n * @param idx {number} The index of the child accordion item\n */\n const getAccordionItemProps = (idx: number | null) => {\n let isOpen = false\n if (idx !== null) {\n isOpen = isArray(index) ? index.includes(idx) : index === idx\n }\n\n const onChange = (isOpen: boolean) => {\n if (idx === null) return\n\n if (allowMultiple && isArray(index)) {\n const nextState = isOpen ? addItem(index, idx) : removeItem(index, idx)\n setIndex(nextState)\n } else if (isOpen) {\n setIndex(idx)\n } else if (allowToggle) {\n setIndex(-1)\n }\n }\n\n return { isOpen, onChange }\n }\n\n return {\n index,\n setIndex,\n htmlProps,\n getAccordionItemProps,\n focusedIndex,\n setFocusedIndex,\n descendants,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\n/* -------------------------------------------------------------------------------------------------\n * Create context for the root accordion logic\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AccordionContext\n extends Omit<UseAccordionReturn, \"htmlProps\" | \"descendants\"> {\n reduceMotion: boolean\n}\n\nexport const [\n AccordionProvider,\n useAccordionContext,\n] = createContext<AccordionContext>({\n name: \"AccordionContext\",\n errorMessage:\n \"useAccordionContext: `context` is undefined. Seems you forgot to wrap the accordion components in `<Accordion />`\",\n})\n\n/* -------------------------------------------------------------------------------------------------\n * Hook for a single accordion item\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface UseAccordionItemProps {\n /**\n * If `true`, the accordion item will be disabled.\n */\n isDisabled?: boolean\n /**\n * If `true`, the accordion item will be focusable.\n */\n isFocusable?: boolean\n /**\n * A unique id for the accordion item.\n */\n id?: string\n}\n\n/**\n * useAccordionItem\n *\n * React hook that provides the open/close functionality\n * for an accordion item and its children\n */\nexport function useAccordionItem(props: UseAccordionItemProps) {\n const { isDisabled, isFocusable, id, ...htmlProps } = props\n const { getAccordionItemProps, setFocusedIndex } = useAccordionContext()\n\n const buttonRef = useRef<HTMLElement>(null)\n\n /**\n * Generate unique ids for all accordion item components (button and panel)\n */\n const [buttonId, panelId] = useIds(id, `accordion-button`, `accordion-panel`)\n\n focusableNotDisabledWarning(props)\n\n /**\n * Think of this as a way to register this accordion item\n * with its parent `useAccordion`\n */\n const { register, index, descendants } = useAccordionDescendant({\n disabled: isDisabled && !isFocusable,\n })\n\n const { isOpen, onChange } = getAccordionItemProps(\n index === -1 ? null : index,\n )\n\n warnIfOpenAndDisabled({ isOpen, isDisabled })\n\n const onOpen = () => {\n onChange?.(true)\n }\n\n const onClose = () => {\n onChange?.(false)\n }\n\n /**\n * Toggle the visibility of the accordion item\n */\n const onClick = useCallback(() => {\n onChange?.(!isOpen)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, isOpen, onChange])\n\n /**\n * Manage keyboard navigation between accordion items.\n */\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const eventKey = normalizeEventKey(event)\n\n const keyMap: EventKeyMap = {\n ArrowDown: () => {\n const next = descendants.nextEnabled(index)\n if (next) focus(next.node)\n },\n ArrowUp: () => {\n const prev = descendants.prevEnabled(index)\n if (prev) focus(prev.node)\n },\n Home: () => {\n const first = descendants.firstEnabled()\n if (first) focus(first.node)\n },\n End: () => {\n const last = descendants.lastEnabled()\n if (last) focus(last.node)\n },\n }\n\n const action = keyMap[eventKey]\n\n if (action) {\n event.preventDefault()\n action(event)\n }\n },\n [descendants, index],\n )\n\n /**\n * Since each accordion item's button still remains tabbable, let's\n * update the focusedIndex when it receives focus\n */\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const getButtonProps: PropGetter<HTMLButtonElement> = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n type: \"button\",\n ref: mergeRefs(register, buttonRef, ref),\n id: buttonId,\n disabled: !!isDisabled,\n \"aria-expanded\": !!isOpen,\n \"aria-controls\": panelId,\n onClick: callAllHandlers(props.onClick, onClick),\n onFocus: callAllHandlers(props.onFocus, onFocus),\n onKeyDown: callAllHandlers(props.onKeyDown, onKeyDown),\n }),\n [\n buttonId,\n isDisabled,\n isOpen,\n onClick,\n onFocus,\n onKeyDown,\n panelId,\n register,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref,\n role: \"region\",\n id: panelId,\n \"aria-labelledby\": buttonId,\n hidden: !isOpen,\n }),\n [buttonId, isOpen, panelId],\n )\n\n return {\n isOpen,\n isDisabled,\n isFocusable,\n onOpen,\n onClose,\n getButtonProps,\n getPanelProps,\n htmlProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n\n/* -------------------------------------------------------------------------------------------------\n * Validate accordion and accordion item props, and emit warnings.\n * -----------------------------------------------------------------------------------------------*/\n\nfunction allowMultipleWarning(props: UseAccordionProps) {\n const index = props.index || props.defaultIndex\n const condition =\n !isUndefined(index) && !isArray(index) && props.allowMultiple\n\n warn({\n condition: !!condition,\n message: `If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof index},`,\n })\n}\n\nfunction allowMultipleAndAllowToggleWarning(props: UseAccordionProps) {\n warn({\n condition: !!(props.allowMultiple && props.allowToggle),\n message: `If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not`,\n })\n}\n\nfunction focusableNotDisabledWarning(props: UseAccordionItemProps) {\n warn({\n condition: !!(props.isFocusable && !props.isDisabled),\n message: `Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well.\n `,\n })\n}\n\nfunction warnIfOpenAndDisabled(props: {\n isOpen: boolean\n isDisabled?: boolean\n}) {\n warn({\n condition: props.isOpen && !!props.isDisabled,\n message: \"Cannot open a disabled accordion item\",\n })\n}\n","import { Icon, IconProps } from \"@chakra-ui/icon\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { Collapse } from \"@chakra-ui/transition\"\nimport { cx, Omit, runIfFn, __DEV__ } from \"@chakra-ui/utils\"\nimport { createContext, MaybeRenderProp } from \"@chakra-ui/react-utils\"\nimport * as React from \"react\"\nimport {\n AccordionProvider,\n useAccordion,\n useAccordionContext,\n useAccordionItem,\n UseAccordionItemProps,\n UseAccordionItemReturn,\n UseAccordionProps,\n AccordionDescendantsProvider,\n} from \"./use-accordion\"\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion - The wrapper that provides context for all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionProps\n extends UseAccordionProps,\n Omit<HTMLChakraProps<\"div\">, keyof UseAccordionProps>,\n ThemingProps<\"Accordion\"> {\n /**\n * If `true`, height animation and transitions will be disabled.\n */\n reduceMotion?: boolean\n}\n\n/**\n * The wrapper that provides context and focus management\n * for all accordion items.\n *\n * It wraps all accordion items in a `div` for better grouping.\n * @see Docs https://chakra-ui.com/accordion\n */\nexport const Accordion = forwardRef<AccordionProps, \"div\">(\n ({ children, reduceMotion, ...props }, ref) => {\n const styles = useMultiStyleConfig(\"Accordion\", props)\n const ownProps = omitThemingProps(props)\n\n const { htmlProps, descendants, ...context } = useAccordion(ownProps)\n\n const ctx = React.useMemo(\n () => ({ ...context, reduceMotion: !!reduceMotion }),\n [context, reduceMotion],\n )\n\n return (\n <AccordionDescendantsProvider value={descendants}>\n <AccordionProvider value={ctx}>\n <StylesProvider value={styles}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion\", props.className)}\n >\n {children}\n </chakra.div>\n </StylesProvider>\n </AccordionProvider>\n </AccordionDescendantsProvider>\n )\n },\n)\n\nif (__DEV__) {\n Accordion.displayName = \"Accordion\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item\n * -----------------------------------------------------------------------------------------------*/\n\ntype AccordionItemContext = Omit<UseAccordionItemReturn, \"htmlProps\">\n\nconst [\n AccordionItemProvider,\n useAccordionItemContext,\n] = createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n errorMessage:\n \"useAccordionItemContext: `context` is undefined. Seems you forgot to wrap the accordion item parts in `<AccordionItem />` \",\n})\n\nexport interface AccordionItemProps\n extends Omit<HTMLChakraProps<\"div\">, keyof UseAccordionItemProps>,\n UseAccordionItemProps {\n children?: MaybeRenderProp<{\n isExpanded: boolean\n isDisabled: boolean\n }>\n}\n\n/**\n * AccordionItem is a single accordion that provides the open-close\n * behavior when the accordion button is clicked.\n *\n * It also provides context for the accordion button and panel.\n */\nexport const AccordionItem = forwardRef<AccordionItemProps, \"div\">(\n (props, ref) => {\n const { children, className } = props\n const { htmlProps, ...context } = useAccordionItem(props)\n\n const styles = useStyles()\n const containerStyles: SystemStyleObject = {\n ...styles.container,\n overflowAnchor: \"none\",\n }\n\n const ctx = React.useMemo(() => context, [context])\n\n return (\n <AccordionItemProvider value={ctx}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion__item\", className)}\n __css={containerStyles}\n >\n {runIfFn(children, {\n isExpanded: !!context.isOpen,\n isDisabled: !!context.isDisabled,\n })}\n </chakra.div>\n </AccordionItemProvider>\n )\n },\n)\n\nif (__DEV__) {\n AccordionItem.displayName = \"AccordionItem\"\n}\n\n/**\n * React hook to get the state and actions of an accordion item\n */\nexport function useAccordionItemState() {\n const { isOpen, isDisabled, onClose, onOpen } = useAccordionItemContext()\n return { isOpen, onClose, isDisabled, onOpen }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Button\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionButtonProps extends HTMLChakraProps<\"button\"> {}\n\n/**\n * AccordionButton is used expands and collapses an accordion item.\n * It must be a child of `AccordionItem`.\n *\n * Note 🚨: Each accordion button must be wrapped in an heading tag,\n * that is appropriate for the information architecture of the page.\n */\nexport const AccordionButton = forwardRef<AccordionButtonProps, \"button\">(\n (props, ref) => {\n const { getButtonProps } = useAccordionItemContext()\n const buttonProps = getButtonProps(props, ref)\n\n const styles = useStyles()\n const buttonStyles: SystemStyleObject = {\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n outline: 0,\n ...styles.button,\n }\n\n return (\n <chakra.button\n {...buttonProps}\n className={cx(\"chakra-accordion__button\", props.className)}\n __css={buttonStyles}\n />\n )\n },\n)\n\nif (__DEV__) {\n AccordionButton.displayName = \"AccordionButton\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Panel\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionPanelProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * Accordion panel that holds the content for each accordion.\n * It shows and hides based on the state login from the `AccordionItem`.\n *\n * It uses the `Collapse` component to animate its height.\n */\nexport const AccordionPanel = forwardRef<AccordionPanelProps, \"div\">(\n (props, ref) => {\n const { reduceMotion } = useAccordionContext()\n const { getPanelProps, isOpen } = useAccordionItemContext()\n\n // remove `hidden` prop, 'coz we're using height animation\n const panelProps = getPanelProps(props, ref)\n\n const _className = cx(\"chakra-accordion__panel\", props.className)\n const styles = useStyles()\n\n if (!reduceMotion) {\n delete panelProps.hidden\n }\n\n const child = (\n <chakra.div {...panelProps} __css={styles.panel} className={_className} />\n )\n\n if (!reduceMotion) {\n return <Collapse in={isOpen}>{child}</Collapse>\n }\n\n return child\n },\n)\n\nif (__DEV__) {\n AccordionPanel.displayName = \"AccordionPanel\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Icon\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * AccordionIcon that gives a visual cue of the open/close state of the accordion item.\n * It rotates `180deg` based on the open/close state.\n */\nexport const AccordionIcon: React.FC<IconProps> = (props) => {\n const { isOpen, isDisabled } = useAccordionItemContext()\n const { reduceMotion } = useAccordionContext()\n\n const _className = cx(\"chakra-accordion__icon\", props.className)\n const styles = useStyles()\n\n const iconStyles: SystemStyleObject = {\n opacity: isDisabled ? 0.4 : 1,\n transform: isOpen ? \"rotate(-180deg)\" : undefined,\n transition: reduceMotion ? undefined : \"transform 0.2s\",\n transformOrigin: \"center\",\n ...styles.icon,\n }\n\n return (\n <Icon\n viewBox=\"0 0 24 24\"\n aria-hidden\n className={_className}\n __css={iconStyles}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n />\n </Icon>\n )\n}\n\nif (__DEV__) {\n AccordionIcon.displayName = \"AccordionIcon\"\n}\n","import {\n Heading,\n Text,\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Box,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactChild } from \"react\";\n\nexport interface FAQItemProps {\n question: ReactChild;\n}\n\nexport const FAQItem: FunctionComponent<FAQItemProps> = ({\n question,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" py={2} textAlign=\"left\">\n <Heading as=\"h3\" ml={8} size=\"sm\">\n {question}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel px={12} py={4}>\n <Text\n color=\"gray.800\"\n fontSize=\"md\"\n sx={{ p: { marginTop: \"0\", marginBottom: \"4\" } }}\n >\n {children}\n </Text>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\n\nexport interface FAQLinkProps {\n href: string;\n}\n\nexport const FAQLink: FunctionComponent<FAQLinkProps> = ({\n href,\n children,\n}) => (\n <ExternalLink\n color=\"inherit\"\n hasWarning={false}\n href={href}\n textDecoration=\"underline\"\n >\n {children}\n </ExternalLink>\n);\n","import {\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Heading,\n Box,\n Accordion,\n} from \"@chakra-ui/react\";\n\nimport type { FunctionComponent } from \"react\";\n\nexport interface FAQSectionProps {\n heading: string;\n}\n\nexport const FAQSection: FunctionComponent<FAQSectionProps> = ({\n heading,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" textAlign=\"left\">\n <Heading as=\"h2\" ml={4} size=\"lg\">\n {heading}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel p={0}>\n <Accordion allowMultiple w=\"100%\">\n {children}\n </Accordion>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { Box, Heading, Accordion } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FAQItem } from \"./FAQItem\";\nimport { FAQLink } from \"./FAQLink\";\nimport { FAQSection } from \"./FAQSection\";\n\nexport const FAQ: FunctionComponent = () => (\n <Page\n meta={{\n title: \"FAQ\",\n description: \"Frequently Asked Questions\",\n }}\n pageName=\"faq\"\n >\n <Box bg=\"white\" color=\"blue.800\" h=\"100%\" w=\"100%\">\n <Box bg=\"gray.50\" py={20} width=\"100%\">\n <Heading as=\"h1\" mx=\"auto\" textAlign=\"center\">\n Frequently Asked Questions\n </Heading>\n </Box>\n <Accordion allowMultiple defaultIndex={[0, 1]}>\n <FAQSection heading=\"General\">\n <FAQItem question=\"What is Construct Hub?\">\n <p>\n It is a central destination to discover and share cloud\n application design patterns and reference architectures defined\n for the AWS CDK, CDK for Kubernetes (CDK8s), CDK for Terraform\n (CDKtf) and any other construct-based tool.\n </p>\n </FAQItem>\n <FAQItem question=\"Why should I use Construct Hub?\">\n <p>\n Construct Hub is built to serve the community that uses the\n constructs programming model (CPM) and to allow them find publicly\n available constructs they can reuse. Before the Construct Hub,\n developers did not have an easy way to discover construct\n libraries created by the community since they were published\n across various package managers and without a central index.\n </p>\n <p>\n The Construct Hub is a central, trusted venue CDK developers can\n use to discover published constructs to help them build their\n applications. In the Dev Preview Construct Hub you can discover\n constructs in TypeScript and Python and read their documentation\n and improved API reference in the programming language that the\n package supports.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I add my construct to the Construct Hub?\">\n <p>\n In order to add your construct to the Construct Hub, you will need\n to publish it to the{\" \"}\n <FAQLink href=\"https://www.npmjs.com/\">npmjs.com</FAQLink>{\" \"}\n registry, use a permissive license (Apache, BSD, MIT), and\n annotate it with one of the supported keywords (aws-cdk, cdk8s or\n cdktf).\n </p>\n <p>\n Additionally, since one of the main goals of the Construct Hub is\n to enable an ecosystem of constructs that can be consumed by all\n CDK languages, your library <strong>must</strong> be compiled with{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/\">JSII</FAQLink>, which\n is a TypeScript-based programming language for creating\n multi-language libraries. The Construct Hub uses the type\n information produced by the JSII compiler in order to render the\n rich multi-language API reference displayed at the Construct Hub.\n </p>\n <p>\n The Construct Hub monitors all updates to the npm Registry and\n will list any packages that meet the above requirements within\n 5-10 minutes. If your package does not appear in the Construct\n Hub, please file an issue on our GitHub repository.\n </p>\n <p>\n There’s some great community content about publishing construct\n libraries. Check out{\" \"}\n <FAQLink href=\"https://dev.to/aws-builders/a-beginner-s-guide-to-create-aws-cdk-construct-library-with-projen-5eh4\">\n &quot;A Beginner&apos;s Guide to Create AWS CDK Construct\n Library with projen&quot;\n </FAQLink>{\" \"}\n by <FAQLink href=\"https://hayao-k.dev/\">hayao-k</FAQLink>.\n </p>\n <p>\n If you already have a library written in TypeScript and you are\n looking for information on how to migrate to JSII, see the{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/user-guides/#library-author-guide\">\n JSII library author guide\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is a construct?\">\n <p>\n The Constructs Programming Model (CPM) introduces the notion of{\" \"}\n <strong>constructs</strong>, which represent cloud building blocks\n that can be used to assemble complete applications of any\n complexity. AWS, enterprises, start-ups, and individual developers\n use CDK constructs to share proven architecture patterns as\n reusable code libraries, so that everyone can benefit from the\n collective wisdom of the community.\n </p>\n </FAQItem>\n <FAQItem question=\"Who owns the constructs in the Construct Hub?\">\n <p>\n The constructs are owned by the publishers of the packages.\n Constructs are user generated content that are governed by their\n own license terms which is displayed in the search results and can\n be accessed directly through the hyperlinked package page.\n </p>\n </FAQItem>\n <FAQItem question=\"Is the content served in Construct Hub meant to be consumed programmatically?\">\n <p>\n No. The content displayed in the site is user generated, with some\n display formatting. We do not advise that you consume constructs\n from the search results programmatically. Please note that\n Construct Hub is a search engine intended to surface third party\n content from a public endpoint and we provide these results for\n your convenience AS-IS in accordance with our{\" \"}\n <FAQLink href=\"https://constructs.dev/terms\">Site Terms</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"Which CDK types are available on the Construct Hub?\">\n <p>\n AWS CDK, CDK for Kubernetes (CDK8s) and CDK for Terraform (CDKtf).\n </p>\n </FAQItem>\n <FAQItem question=\"What is AWS CDK?\">\n <p>\n AWS CDK is an open-source software development framework for\n defining applications on AWS and reusable abstractions using\n familiar programming languages and rich object-oriented APIs. AWS\n CDK apps synthesize intostandard CloudFormation templates which\n can be deployed to create infrastructure on AWS. For more\n information, click{\" \"}\n <FAQLink href=\"https://docs.aws.amazon.com/cdk/latest/guide/home.html\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDK8s?\">\n <p>\n CDK8s is an open-source software development framework for\n defining Kubernetes applications and reusable abstractions using\n familiar programming languages and rich object-oriented APIs.{\" \"}\n <strong>cdk8s</strong> apps synthesize into standard Kubernetes\n manifests which can be applied to any Kubernetes cluster. For more\n information, click{\" \"}\n <FAQLink href=\"https://cdk8s.io/\">here</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDKtf?\">\n <p>\n The community preview of the{\" \"}\n <FAQLink href=\"https://aws.amazon.com/cdk/\">\n Cloud Development Kit\n </FAQLink>\n for Terraform allows you to define infrastructure using a familiar\n programming language such as TypeScript, Python, or Go, while\n leveraging the hundreds of providers and thousands of module\n definitions provided by Terraform and the Terraform ecosystem. For\n more information, click{\" \"}\n <FAQLink href=\"https://learn.hashicorp.com/tutorials/terraform/cdktf\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What programming languages are supported in Dev Preview?\">\n <p>The Construct Hub Dev Preview supports Python and TypeScript.</p>\n </FAQItem>\n <FAQItem question=\"Is the support for .NET, Java and Go in the roadmap?\">\n <p>Yes.</p>\n </FAQItem>\n <FAQItem question=\"Can I view the source code of a construct?\">\n <p>\n For each package you can click the repository link that the\n publisher provided with the package. Theoretically this link\n should redirect your to the package’s repository. However, we\n noticed that sometimes the code in the repository can be more or\n less updated than the package’s code. Please take that into\n account.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I install a package?\">\n <p>\n Press “Install” in the package page and you’ll see the\n installation instructions.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I report a package?\">\n <p>\n You can report a package by clicking &quot;Report a package&quot;\n from the package page. For claims of copyright infringement, read\n here:{\" \"}\n <FAQLink href=\"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\">\n https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"How can I open a bug or send a PR for a package?\">\n <p>\n The package is owned by the publisher. To report a bug or send a\n PR, you should go to the repository link the publisher provided\n and open a ticket there\n </p>\n </FAQItem>\n <FAQItem question=\"Why isn’t my package displayed in the Construct Hub?\">\n <p>\n The Construct Hub displays only publicly available constructs that\n are JSII compatible and that were published on a public npm\n registry with an open source license. The package should be\n published on npm registry with the one of the following Keywords:\n aws-cdk, cdk8s or cdktf.\n </p>\n </FAQItem>\n <FAQItem question=\"Can I update my package after it has been displayed?\">\n <p>\n Yes. You should publish a new valid version to the public npm\n registry. We will detect the new version and display it on the\n Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How does the Construct Hub relates to the Construct Catalog?\">\n <p>\n The Construct Catalog was built by the CDK community in\n collaboration with the AWS CDK team. The Construct Hub is the\n official version for the Construct Catalog.{\" \"}\n <FAQLink href=\"https://awscdk.io\">https://awscdk.io</FAQLink> now\n redirects to the Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I participate in the Construct Hub community?\">\n <p>\n The Construct Hub is built as a public construct. Please join the{\" \"}\n <FAQLink href=\"https://github.com/cdklabs/construct-hub-webapp\">\n Construct Hub GitHub community\n </FAQLink>\n . You are also welcome to join the #construct-hub-dev channel in\n the <FAQLink href=\"https://cdk.dev/\">CDK community</FAQLink> Slack\n workspace.\n </p>\n </FAQItem>\n <FAQItem question=\"Is there a community slack channel for the CDK community?\">\n <p>\n Please join the CDK Slack channel (\n <FAQLink href=\"https://cdk.dev/\">https://cdk.dev/</FAQLink>). This\n Slack channel is managed by the CDK community for the CDK\n community.\n </p>\n </FAQItem>\n </FAQSection>\n <FAQSection heading=\"Getting Started\">\n <FAQItem question=\"Do I need a user for the Construct Hub?\">\n <p>No. The Construct Hub doesn’t require any signup.</p>\n </FAQItem>\n <FAQItem question=\"How do I get started?\">\n <p>\n Use our home page to discover publicly available packages. You may\n run a search to find packages you’re interested in and mention\n your preferred programming language. For each package you will\n find helpful information such as README and API reference for the\n supported programming languages. You will also find links and\n keywords that the publisher provided with the package and\n installation instructions.\n </p>\n </FAQItem>\n </FAQSection>\n </Accordion>\n </Box>\n </Page>\n);\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[14],{236:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var s=n(0),i=n(251),a={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},c=n(118),r=n(1),o=function(e){var t=e.children,n=e.meta,o=e.pageName,h=Object(c.b)(a[o]);Object(s.useEffect)((function(){h()}),[h]);var u=n.suffix,l=void 0===u||u,d=n.title,b=n.description,m=l?"".concat(d," - Construct Hub"):d;return Object(r.jsxs)(r.Fragment,{children:[Object(r.jsxs)(i.a,{children:[!1,Object(r.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(r.jsx)("meta",{charSet:"utf-8"}),Object(r.jsx)("title",{children:m}),Object(r.jsx)("meta",{content:m,property:"og:title"}),Object(r.jsx)("meta",{content:m,name:"twitter:title"}),Object(r.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(r.jsx)("meta",{content:b,name:"description"}),Object(r.jsx)("meta",{content:b,property:"og:description"}),Object(r.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},613:function(e,t,n){"use strict";n.r(t),n.d(t,"SiteTerms",(function(){return u})),n.d(t,"default",(function(){return u}));var s=n(194),i=n(218),a=n(231),c=n(198),r=n(57),o=n(236),h=n(1),u=function(){return Object(h.jsx)(o.a,{meta:{title:"Site Terms",description:"View the Construct Hub Site Terms"},pageName:"siteTerms",children:Object(h.jsx)(s.a,{bg:"white",h:"100%",py:16,w:"100%",children:Object(h.jsxs)(s.a,{as:"article",color:"gray.800",fontSize:"lg",maxW:{base:"80%",md:"38rem"},mx:"auto",textAlign:"justify",w:"100%",children:[Object(h.jsx)(i.a,{as:"h1",color:"blue.800",mb:8,mx:"auto",size:"lg",children:"AWS Site Terms for CDK Construct Hub"}),Object(h.jsxs)(a.a,{spacing:4,children:[Object(h.jsx)(c.a,{fontStyle:"italic",children:"Last Updated: July 2021"}),Object(h.jsxs)(c.a,{children:["Welcome to the AWS CDK Construct Hub site (the \u201cAWS Site\u201d or \u201cConstruct Hub\u201d). Except as specifically follows, the AWS CDK Construct Hub site shall be subject to the"," ",Object(h.jsx)(r.a,{hasWarning:!1,href:"https://aws.amazon.com/terms/",children:"Site Terms"})," ","(\u201cAWS Site Terms\u201d) and considered an AWS Site for purposes of applying the AWS Site Terms (together, the \u201cCDK Construct Hub Site Terms\u201d)."]}),Object(h.jsxs)(c.a,{children:["In place of the \u201cLicense and Site Access\u201d term of the AWS Site Terms, the Construct Hub is provided to you under this license:"," ",Object(h.jsx)(r.a,{hasWarning:!1,href:"https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE",children:"https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE"}),". Some AWS Content and Third-Party Content may be provided to you under a separate license, such as the Apache License, Version 2.0, or other open source license. In the event of a conflict between the CDK Construct Hub Site Terms and any separate license, the separate license will prevail with respect to the AWS Content or Third-Party Content that is the subject of such separate license. This AWS Site is a construct registry and search site. The links to the CDK constructs displayed may comprise third party user generated content which shall, in any case, be subject to the \u201cDisclaimer of Warranties and Limitation of Liability\u201d section of the AWS Site Terms. Accessing a construct via its hyperlink will send you to a non-affiliated third party website (\u2018Third-Party Website\u201d) and you shall be subject to the terms and conditions of that Third-Party Website upon entering it."]})]})]})})})}}}]);
2
- //# sourceMappingURL=14.5a16949a.chunk.js.map
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[14],{236:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var s=n(0),i=n(251),a={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},c=n(119),r=n(1),o=function(e){var t=e.children,n=e.meta,o=e.pageName,h=Object(c.b)(a[o]);Object(s.useEffect)((function(){h()}),[h]);var u=n.suffix,l=void 0===u||u,d=n.title,b=n.description,m=l?"".concat(d," - Construct Hub"):d;return Object(r.jsxs)(r.Fragment,{children:[Object(r.jsxs)(i.a,{children:[!1,Object(r.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(r.jsx)("meta",{charSet:"utf-8"}),Object(r.jsx)("title",{children:m}),Object(r.jsx)("meta",{content:m,property:"og:title"}),Object(r.jsx)("meta",{content:m,name:"twitter:title"}),Object(r.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(r.jsx)("meta",{content:b,name:"description"}),Object(r.jsx)("meta",{content:b,property:"og:description"}),Object(r.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},613:function(e,t,n){"use strict";n.r(t),n.d(t,"SiteTerms",(function(){return u})),n.d(t,"default",(function(){return u}));var s=n(194),i=n(218),a=n(231),c=n(198),r=n(58),o=n(236),h=n(1),u=function(){return Object(h.jsx)(o.a,{meta:{title:"Site Terms",description:"View the Construct Hub Site Terms"},pageName:"siteTerms",children:Object(h.jsx)(s.a,{bg:"white",h:"100%",py:16,w:"100%",children:Object(h.jsxs)(s.a,{as:"article",color:"gray.800",fontSize:"lg",maxW:{base:"80%",md:"38rem"},mx:"auto",textAlign:"justify",w:"100%",children:[Object(h.jsx)(i.a,{as:"h1",color:"blue.800",mb:8,mx:"auto",size:"lg",children:"AWS Site Terms for CDK Construct Hub"}),Object(h.jsxs)(a.a,{spacing:4,children:[Object(h.jsx)(c.a,{fontStyle:"italic",children:"Last Updated: July 2021"}),Object(h.jsxs)(c.a,{children:["Welcome to the AWS CDK Construct Hub site (the \u201cAWS Site\u201d or \u201cConstruct Hub\u201d). Except as specifically follows, the AWS CDK Construct Hub site shall be subject to the"," ",Object(h.jsx)(r.a,{hasWarning:!1,href:"https://aws.amazon.com/terms/",children:"Site Terms"})," ","(\u201cAWS Site Terms\u201d) and considered an AWS Site for purposes of applying the AWS Site Terms (together, the \u201cCDK Construct Hub Site Terms\u201d)."]}),Object(h.jsxs)(c.a,{children:["In place of the \u201cLicense and Site Access\u201d term of the AWS Site Terms, the Construct Hub is provided to you under this license:"," ",Object(h.jsx)(r.a,{hasWarning:!1,href:"https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE",children:"https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE"}),". Some AWS Content and Third-Party Content may be provided to you under a separate license, such as the Apache License, Version 2.0, or other open source license. In the event of a conflict between the CDK Construct Hub Site Terms and any separate license, the separate license will prevail with respect to the AWS Content or Third-Party Content that is the subject of such separate license. This AWS Site is a construct registry and search site. The links to the CDK constructs displayed may comprise third party user generated content which shall, in any case, be subject to the \u201cDisclaimer of Warranties and Limitation of Liability\u201d section of the AWS Site Terms. Accessing a construct via its hyperlink will send you to a non-affiliated third party website (\u2018Third-Party Website\u201d) and you shall be subject to the terms and conditions of that Third-Party Website upon entering it."]})]})]})})})}}}]);
2
+ //# sourceMappingURL=14.0902aefd.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","views/SiteTerms/SiteTerms.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","SiteTerms","bg","h","py","w","as","color","fontSize","maxW","base","md","mx","textAlign","mb","size","spacing","fontStyle","ExternalLink","hasWarning","href"],"mappings":"2LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,0LC7CMe,EAA+B,kBAC1C,cAAChB,EAAA,EAAD,CACEE,KAAM,CACJM,MAAO,aACPC,YAAa,qCAEfN,SAAS,YALX,SAOE,cAAC,IAAD,CAAKc,GAAG,QAAQC,EAAE,OAAOC,GAAI,GAAIC,EAAE,OAAnC,SACE,eAAC,IAAD,CACEC,GAAG,UACHC,MAAM,WACNC,SAAS,KACTC,KAAM,CAAEC,KAAM,MAAOC,GAAI,SACzBC,GAAG,OACHC,UAAU,UACVR,EAAE,OAPJ,UASE,cAAC,IAAD,CAASC,GAAG,KAAKC,MAAM,WAAWO,GAAI,EAAGF,GAAG,OAAOG,KAAK,KAAxD,kDAGA,eAAC,IAAD,CAAOC,QAAS,EAAhB,UACE,cAAC,IAAD,CAAMC,UAAU,SAAhB,qCACA,eAAC,IAAD,uMAG6C,IAC3C,cAACC,EAAA,EAAD,CACEC,YAAY,EACZC,KAAK,gCAFP,wBAKgB,IATlB,mKAcA,eAAC,IAAD,sJAEkE,IAChE,cAACF,EAAA,EAAD,CACEC,YAAY,EACZC,KAAK,oEAFP,+EAHF","file":"static/js/14.5a16949a.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\nimport { Page } from \"../../components/Page\";\n\nexport const SiteTerms: FunctionComponent = () => (\n <Page\n meta={{\n title: \"Site Terms\",\n description: \"View the Construct Hub Site Terms\",\n }}\n pageName=\"siteTerms\"\n >\n <Box bg=\"white\" h=\"100%\" py={16} w=\"100%\">\n <Box\n as=\"article\"\n color=\"gray.800\"\n fontSize=\"lg\"\n maxW={{ base: \"80%\", md: \"38rem\" }}\n mx=\"auto\"\n textAlign=\"justify\"\n w=\"100%\"\n >\n <Heading as=\"h1\" color=\"blue.800\" mb={8} mx=\"auto\" size=\"lg\">\n AWS Site Terms for CDK Construct Hub\n </Heading>\n <Stack spacing={4}>\n <Text fontStyle=\"italic\">Last Updated: July 2021</Text>\n <Text>\n Welcome to the AWS CDK Construct Hub site (the “AWS Site” or\n “Construct Hub”). Except as specifically follows, the AWS CDK\n Construct Hub site shall be subject to the{\" \"}\n <ExternalLink\n hasWarning={false}\n href=\"https://aws.amazon.com/terms/\"\n >\n Site Terms\n </ExternalLink>{\" \"}\n (“AWS Site Terms”) and considered an AWS Site for purposes of\n applying the AWS Site Terms (together, the “CDK Construct Hub Site\n Terms”).\n </Text>\n <Text>\n In place of the “License and Site Access” term of the AWS Site\n Terms, the Construct Hub is provided to you under this license:{\" \"}\n <ExternalLink\n hasWarning={false}\n href=\"https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE\"\n >\n https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE\n </ExternalLink>\n . Some AWS Content and Third-Party Content may be provided to you\n under a separate license, such as the Apache License, Version 2.0,\n or other open source license. In the event of a conflict between the\n CDK Construct Hub Site Terms and any separate license, the separate\n license will prevail with respect to the AWS Content or Third-Party\n Content that is the subject of such separate license. This AWS Site\n is a construct registry and search site. The links to the CDK\n constructs displayed may comprise third party user generated content\n which shall, in any case, be subject to the “Disclaimer of\n Warranties and Limitation of Liability” section of the AWS Site\n Terms. Accessing a construct via its hyperlink will send you to a\n non-affiliated third party website (‘Third-Party Website”) and you\n shall be subject to the terms and conditions of that Third-Party\n Website upon entering it.\n </Text>\n </Stack>\n </Box>\n </Box>\n </Page>\n);\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","views/SiteTerms/SiteTerms.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","SiteTerms","bg","h","py","w","as","color","fontSize","maxW","base","md","mx","textAlign","mb","size","spacing","fontStyle","ExternalLink","hasWarning","href"],"mappings":"2LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,0LC7CMe,EAA+B,kBAC1C,cAAChB,EAAA,EAAD,CACEE,KAAM,CACJM,MAAO,aACPC,YAAa,qCAEfN,SAAS,YALX,SAOE,cAAC,IAAD,CAAKc,GAAG,QAAQC,EAAE,OAAOC,GAAI,GAAIC,EAAE,OAAnC,SACE,eAAC,IAAD,CACEC,GAAG,UACHC,MAAM,WACNC,SAAS,KACTC,KAAM,CAAEC,KAAM,MAAOC,GAAI,SACzBC,GAAG,OACHC,UAAU,UACVR,EAAE,OAPJ,UASE,cAAC,IAAD,CAASC,GAAG,KAAKC,MAAM,WAAWO,GAAI,EAAGF,GAAG,OAAOG,KAAK,KAAxD,kDAGA,eAAC,IAAD,CAAOC,QAAS,EAAhB,UACE,cAAC,IAAD,CAAMC,UAAU,SAAhB,qCACA,eAAC,IAAD,uMAG6C,IAC3C,cAACC,EAAA,EAAD,CACEC,YAAY,EACZC,KAAK,gCAFP,wBAKgB,IATlB,mKAcA,eAAC,IAAD,sJAEkE,IAChE,cAACF,EAAA,EAAD,CACEC,YAAY,EACZC,KAAK,oEAFP,+EAHF","file":"static/js/14.0902aefd.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, Heading, Stack, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\nimport { Page } from \"../../components/Page\";\n\nexport const SiteTerms: FunctionComponent = () => (\n <Page\n meta={{\n title: \"Site Terms\",\n description: \"View the Construct Hub Site Terms\",\n }}\n pageName=\"siteTerms\"\n >\n <Box bg=\"white\" h=\"100%\" py={16} w=\"100%\">\n <Box\n as=\"article\"\n color=\"gray.800\"\n fontSize=\"lg\"\n maxW={{ base: \"80%\", md: \"38rem\" }}\n mx=\"auto\"\n textAlign=\"justify\"\n w=\"100%\"\n >\n <Heading as=\"h1\" color=\"blue.800\" mb={8} mx=\"auto\" size=\"lg\">\n AWS Site Terms for CDK Construct Hub\n </Heading>\n <Stack spacing={4}>\n <Text fontStyle=\"italic\">Last Updated: July 2021</Text>\n <Text>\n Welcome to the AWS CDK Construct Hub site (the “AWS Site” or\n “Construct Hub”). Except as specifically follows, the AWS CDK\n Construct Hub site shall be subject to the{\" \"}\n <ExternalLink\n hasWarning={false}\n href=\"https://aws.amazon.com/terms/\"\n >\n Site Terms\n </ExternalLink>{\" \"}\n (“AWS Site Terms”) and considered an AWS Site for purposes of\n applying the AWS Site Terms (together, the “CDK Construct Hub Site\n Terms”).\n </Text>\n <Text>\n In place of the “License and Site Access” term of the AWS Site\n Terms, the Construct Hub is provided to you under this license:{\" \"}\n <ExternalLink\n hasWarning={false}\n href=\"https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE\"\n >\n https://github.com/cdklabs/construct-hub-webapp/blob/main/LICENSE\n </ExternalLink>\n . Some AWS Content and Third-Party Content may be provided to you\n under a separate license, such as the Apache License, Version 2.0,\n or other open source license. In the event of a conflict between the\n CDK Construct Hub Site Terms and any separate license, the separate\n license will prevail with respect to the AWS Content or Third-Party\n Content that is the subject of such separate license. This AWS Site\n is a construct registry and search site. The links to the CDK\n constructs displayed may comprise third party user generated content\n which shall, in any case, be subject to the “Disclaimer of\n Warranties and Limitation of Liability” section of the AWS Site\n Terms. Accessing a construct via its hyperlink will send you to a\n non-affiliated third party website (‘Third-Party Website”) and you\n shall be subject to the terms and conditions of that Third-Party\n Website upon entering it.\n </Text>\n </Stack>\n </Box>\n </Box>\n </Page>\n);\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[15],{271:function(e,t,s){"use strict";s.d(t,"a",(function(){return b}));var c=s(6),a=s(28),i=s(17),n=s(194),r=s(230),o=s(1),l=["sources"],b=Object(i.a)((function(e,t){var s=e.sources,i=Object(a.a)(e,l);return Object(o.jsxs)(n.a,{as:"picture",children:[null===s||void 0===s?void 0:s.map((function(e,t){return Object(o.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(o.jsx)(r.a,Object(c.a)({ref:t},i))]})}));b.displayName="Picture"},612:function(e,t,s){"use strict";s.r(t),s.d(t,"Home",(function(){return z})),s.d(t,"default",(function(){return z}));var c=s(6),a=s(5),i=s(194),n=s(231),r=s(218),o=s(610),l=s(0),b=s(66),u=s(360),j=s(236),d=s(271),p=s(359),h=s(120),x=s(88),f=s(594),O=s(363),m=s(308),g=s(147),v=s(153),w=s(207),S=s(205),C=s(56),y=Object(C.a)("home",["headings","results","nextPageBtn","nextIcon","prevIcon"]),k=s(1),D={borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",mx:2,h:10,w:10,variant:"outline"},I={color:"blue.500",h:5,w:5},P=function(e){var t=e.offset,s=e.pageLimit,a=e.setOffset,i=t===s,n=0===t,r=function(){a(t+1)};return Object(k.jsxs)(g.a,{alignItems:"center",pt:6,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(k.jsx)(g.b,{colStart:2,justifySelf:"center",children:Object(k.jsx)(v.a,{colorScheme:"blue","data-testid":y.nextPageBtn,disabled:i,onClick:r,rightIcon:Object(k.jsx)(f.a,{color:"white"}),children:"Next Page"})}),Object(k.jsx)(g.b,{colStart:3,justifySelf:"end",children:Object(k.jsxs)(w.a,{align:"center",justify:"center",py:4,children:[Object(k.jsx)(S.a,Object(c.a)({"aria-label":"Previous Page","data-testid":y.prevIcon,disabled:n,icon:Object(k.jsx)(O.a,Object(c.a)({},I)),onClick:function(){a(t-1)}},D)),Object(k.jsx)(S.a,Object(c.a)({"aria-label":"Next Page","data-testid":y.nextIcon,disabled:i,icon:Object(k.jsx)(m.a,Object(c.a)({},I)),onClick:r},D))]})})]})},K={optimal:[{media:"(max-width:1024px)",srcSet:"/assets/hive@50.webp"},{media:"(min-width:1024px)",srcSet:"/assets/hive@100.webp"},{media:"(min-width:1024px)",srcSet:"/assets/hive@100.png"}],fallback:"/assets/hive@50.png"},z=function(){var e=Object(x.a)(),t=Object(l.useState)(0),s=Object(a.a)(t,2),f=s[0],O=s[1],m=Object(h.a)({offset:f,limit:20,query:"",language:null,sort:b.a.PublishDateDesc}),g=m.results,v=m.page,w=m.pageLimit;return Object(k.jsx)(j.a,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.",suffix:!1},pageName:"home",children:Object(k.jsxs)(i.a,{position:"relative",zIndex:1,children:[Object(k.jsx)(d.a,{alt:"",h:"540px",position:"absolute",sources:K.optimal,src:K.fallback,top:"0",w:"100%",zIndex:"hide"}),Object(k.jsxs)(n.a,{align:"stretch",direction:"column",justify:"center",m:"0 auto",maxW:"container.lg",p:[10,15,20],spacing:8,children:[Object(k.jsxs)(n.a,{color:"blue.800","data-testid":y.headings,spacing:4,textAlign:"center",children:[Object(k.jsx)(r.a,{size:"2xl",children:"Find reusable components for your cloud applications"}),Object(k.jsx)(r.a,{as:"h3",size:"md",children:"AWS CDK | CDK for Terraform | CDK For Kubernetes"}),Object(k.jsxs)(r.a,{as:"h4",mb:8,size:"sm",children:["Search from"," ",g.length?Object(k.jsx)(i.a,{as:"span",color:"blue.500",children:g.length}):Object(k.jsx)(o.a,{display:"inline-block",h:3,w:8})," ","construct libraries"]})]}),Object(k.jsx)(u.a,Object(c.a)({},e))]}),Object(k.jsxs)(i.a,{p:4,pb:8,children:[Object(k.jsx)(p.a,{results:v}),Object(k.jsx)(P,{offset:f,pageLimit:w,setOffset:O})]})]})})}}}]);
2
- //# sourceMappingURL=15.d29607c9.chunk.js.map
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[15],{271:function(e,t,s){"use strict";s.d(t,"a",(function(){return b}));var c=s(6),a=s(28),i=s(17),n=s(194),r=s(230),o=s(1),l=["sources"],b=Object(i.a)((function(e,t){var s=e.sources,i=Object(a.a)(e,l);return Object(o.jsxs)(n.a,{as:"picture",children:[null===s||void 0===s?void 0:s.map((function(e,t){return Object(o.jsx)("source",{media:e.media,srcSet:e.srcSet},t)})),Object(o.jsx)(r.a,Object(c.a)({ref:t},i))]})}));b.displayName="Picture"},612:function(e,t,s){"use strict";s.r(t),s.d(t,"Home",(function(){return z})),s.d(t,"default",(function(){return z}));var c=s(6),a=s(5),i=s(194),n=s(231),r=s(218),o=s(610),l=s(0),b=s(51),u=s(360),j=s(236),d=s(271),p=s(359),h=s(121),x=s(88),f=s(594),O=s(363),m=s(308),g=s(147),v=s(153),w=s(207),S=s(205),C=s(57),y=Object(C.a)("home",["headings","results","nextPageBtn","nextIcon","prevIcon"]),k=s(1),D={borderRadius:"md",borderColor:"blue.500",colorScheme:"blue",mx:2,h:10,w:10,variant:"outline"},I={color:"blue.500",h:5,w:5},P=function(e){var t=e.offset,s=e.pageLimit,a=e.setOffset,i=t===s,n=0===t,r=function(){a(t+1)};return Object(k.jsxs)(g.a,{alignItems:"center",pt:6,templateColumns:"repeat(3, 1fr)",templateRows:"1fr",children:[Object(k.jsx)(g.b,{colStart:2,justifySelf:"center",children:Object(k.jsx)(v.a,{colorScheme:"blue","data-testid":y.nextPageBtn,disabled:i,onClick:r,rightIcon:Object(k.jsx)(f.a,{color:"white"}),children:"Next Page"})}),Object(k.jsx)(g.b,{colStart:3,justifySelf:"end",children:Object(k.jsxs)(w.a,{align:"center",justify:"center",py:4,children:[Object(k.jsx)(S.a,Object(c.a)({"aria-label":"Previous Page","data-testid":y.prevIcon,disabled:n,icon:Object(k.jsx)(O.a,Object(c.a)({},I)),onClick:function(){a(t-1)}},D)),Object(k.jsx)(S.a,Object(c.a)({"aria-label":"Next Page","data-testid":y.nextIcon,disabled:i,icon:Object(k.jsx)(m.a,Object(c.a)({},I)),onClick:r},D))]})})]})},K={optimal:[{media:"(max-width:1024px)",srcSet:"/assets/hive@50.webp"},{media:"(min-width:1024px)",srcSet:"/assets/hive@100.webp"},{media:"(min-width:1024px)",srcSet:"/assets/hive@100.png"}],fallback:"/assets/hive@50.png"},z=function(){var e=Object(x.a)(),t=Object(l.useState)(0),s=Object(a.a)(t,2),f=s[0],O=s[1],m=Object(h.a)({offset:f,limit:20,query:"",language:null,sort:b.a.PublishDateDesc}),g=m.results,v=m.page,w=m.pageLimit;return Object(k.jsx)(j.a,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.",suffix:!1},pageName:"home",children:Object(k.jsxs)(i.a,{position:"relative",zIndex:1,children:[Object(k.jsx)(d.a,{alt:"",h:"540px",position:"absolute",sources:K.optimal,src:K.fallback,top:"0",w:"100%",zIndex:"hide"}),Object(k.jsxs)(n.a,{align:"stretch",direction:"column",justify:"center",m:"0 auto",maxW:"container.lg",p:[10,15,20],spacing:8,children:[Object(k.jsxs)(n.a,{color:"blue.800","data-testid":y.headings,spacing:4,textAlign:"center",children:[Object(k.jsx)(r.a,{size:"2xl",children:"Find reusable components for your cloud applications"}),Object(k.jsx)(r.a,{as:"h3",size:"md",children:"AWS CDK | CDK for Terraform | CDK For Kubernetes"}),Object(k.jsxs)(r.a,{as:"h4",mb:8,size:"sm",children:["Search from"," ",g.length?Object(k.jsx)(i.a,{as:"span",color:"blue.500",children:g.length}):Object(k.jsx)(o.a,{display:"inline-block",h:3,w:8})," ","construct libraries"]})]}),Object(k.jsx)(u.a,Object(c.a)({},e))]}),Object(k.jsxs)(i.a,{p:4,pb:8,children:[Object(k.jsx)(p.a,{results:v}),Object(k.jsx)(P,{offset:f,pageLimit:w,setOffset:O})]})]})})}}}]);
2
+ //# sourceMappingURL=15.50336305.chunk.js.map