construct-hub-webapp 0.1.1464 → 0.1.1465
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/asset-manifest.json +35 -33
- package/build/index.html +1 -1
- package/build/static/js/294.61480951.chunk.js +2 -0
- package/build/static/js/294.61480951.chunk.js.map +1 -0
- package/build/static/js/323.87521e0e.chunk.js +2 -0
- package/build/static/js/323.87521e0e.chunk.js.map +1 -0
- package/build/static/js/332.b740638d.chunk.js +2 -0
- package/build/static/js/332.b740638d.chunk.js.map +1 -0
- package/build/static/js/375.6faf5557.chunk.js +2 -0
- package/build/static/js/375.6faf5557.chunk.js.map +1 -0
- package/build/static/js/421.89f85fcb.chunk.js +2 -0
- package/build/static/js/421.89f85fcb.chunk.js.map +1 -0
- package/build/static/js/451.916d6ace.chunk.js +2 -0
- package/build/static/js/451.916d6ace.chunk.js.map +1 -0
- package/build/static/js/453.13ac0f49.chunk.js +2 -0
- package/build/static/js/453.13ac0f49.chunk.js.map +1 -0
- package/build/static/js/487.043142d5.chunk.js +3 -0
- package/build/static/js/487.043142d5.chunk.js.map +1 -0
- package/build/static/js/496.2a6b6f6f.chunk.js +2 -0
- package/build/static/js/496.2a6b6f6f.chunk.js.map +1 -0
- package/build/static/js/516.87cad50a.chunk.js +2 -0
- package/build/static/js/516.87cad50a.chunk.js.map +1 -0
- package/build/static/js/591.6b31b86a.chunk.js +2 -0
- package/build/static/js/591.6b31b86a.chunk.js.map +1 -0
- package/build/static/js/619.1a7deb33.chunk.js +2 -0
- package/build/static/js/619.1a7deb33.chunk.js.map +1 -0
- package/build/static/js/773.279948f6.chunk.js +2 -0
- package/build/static/js/773.279948f6.chunk.js.map +1 -0
- package/build/static/js/8.75aab01d.chunk.js +3 -0
- package/build/static/js/8.75aab01d.chunk.js.map +1 -0
- package/build/static/js/857.8e026699.chunk.js +2 -0
- package/build/static/js/857.8e026699.chunk.js.map +1 -0
- package/build/static/js/959.abcce3a0.chunk.js +2 -0
- package/build/static/js/959.abcce3a0.chunk.js.map +1 -0
- package/build/static/js/main.177d8f14.js +3 -0
- package/build/static/js/main.177d8f14.js.map +1 -0
- package/coverage/clover.xml +2 -2
- package/coverage/lcov-report/index.html +1 -1
- package/coverage/lcov-report/src/App.tsx.html +1 -1
- package/coverage/lcov-report/src/api/catalog-search/catalog-search.ts.html +1 -1
- package/coverage/lcov-report/src/api/catalog-search/constants.ts.html +1 -1
- package/coverage/lcov-report/src/api/catalog-search/index.html +1 -1
- package/coverage/lcov-report/src/api/catalog-search/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/catalog-search/util.ts.html +1 -1
- package/coverage/lcov-report/src/api/config/index.html +1 -1
- package/coverage/lcov-report/src/api/config/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/package/assembly.ts.html +1 -1
- package/coverage/lcov-report/src/api/package/docs.ts.html +1 -1
- package/coverage/lcov-report/src/api/package/index.html +1 -1
- package/coverage/lcov-report/src/api/package/metadata.ts.html +1 -1
- package/coverage/lcov-report/src/api/package/packages.ts.html +1 -1
- package/coverage/lcov-report/src/api/package/util.ts.html +1 -1
- package/coverage/lcov-report/src/api/stats/index.html +1 -1
- package/coverage/lcov-report/src/api/stats/index.ts.html +1 -1
- package/coverage/lcov-report/src/api/versions/index.html +1 -1
- package/coverage/lcov-report/src/api/versions/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/CDKType/CDKType.tsx.html +1 -1
- package/coverage/lcov-report/src/components/CDKType/index.html +1 -1
- package/coverage/lcov-report/src/components/CDKType/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Card/Card.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Card/index.html +1 -1
- package/coverage/lcov-report/src/components/Card/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Code/Code.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Code/MultiLineRenderer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Code/SingleLineRenderer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Code/index.html +1 -1
- package/coverage/lcov-report/src/components/Code/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Code/types.ts.html +1 -1
- package/coverage/lcov-report/src/components/CopyButton/CopyButton.tsx.html +1 -1
- package/coverage/lcov-report/src/components/CopyButton/index.html +1 -1
- package/coverage/lcov-report/src/components/CopyButton/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/ExternalLink/ExternalLink.tsx.html +1 -1
- package/coverage/lcov-report/src/components/ExternalLink/index.html +1 -1
- package/coverage/lcov-report/src/components/ExternalLink/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/FAQ.tsx.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/FAQHeading.tsx.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/FAQItem.tsx.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/FAQLink.tsx.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/FAQSection.tsx.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/FAQSections.tsx.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/index.html +1 -1
- package/coverage/lcov-report/src/components/FAQ/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Footer/Footer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Footer/constants.ts.html +1 -1
- package/coverage/lcov-report/src/components/Footer/index.html +1 -1
- package/coverage/lcov-report/src/components/Footer/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Footer/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/components/Form/Form.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Form/index.html +1 -1
- package/coverage/lcov-report/src/components/Form/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Header/DocumentationDropdown.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/GettingStartedDropdown.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/Header.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/HeaderSearch.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/MobileNav.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/MobileNavLinks.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/NavButton.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/Title.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Header/constants.ts.html +1 -1
- package/coverage/lcov-report/src/components/Header/index.html +1 -1
- package/coverage/lcov-report/src/components/Header/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Header/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/components/Highlight/Highlight.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Highlight/index.html +1 -1
- package/coverage/lcov-report/src/components/Highlight/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/LanguageSupportTooltip/LanguageSupportTooltip.tsx.html +1 -1
- package/coverage/lcov-report/src/components/LanguageSupportTooltip/index.html +1 -1
- package/coverage/lcov-report/src/components/LanguageSupportTooltip/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/LazyRoute/LazyRoute.tsx.html +1 -1
- package/coverage/lcov-report/src/components/LazyRoute/index.html +1 -1
- package/coverage/lcov-report/src/components/LazyRoute/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/LicenseLink/LicenseLink.tsx.html +1 -1
- package/coverage/lcov-report/src/components/LicenseLink/index.html +1 -1
- package/coverage/lcov-report/src/components/LicenseLink/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/Code.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/Headings.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/Hr.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/Img.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/List.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/Markdown.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/Table.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/Text.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/index.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Markdown/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/components/NavLink/NavLink.tsx.html +1 -1
- package/coverage/lcov-report/src/components/NavLink/index.html +1 -1
- package/coverage/lcov-report/src/components/NavLink/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/NavPopover/NavPopover.tsx.html +1 -1
- package/coverage/lcov-report/src/components/NavPopover/NavPopoverContent.tsx.html +1 -1
- package/coverage/lcov-report/src/components/NavPopover/NavPopoverTrigger.tsx.html +1 -1
- package/coverage/lcov-report/src/components/NavPopover/index.html +1 -1
- package/coverage/lcov-report/src/components/NavPopover/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/NavPopover/types.ts.html +1 -1
- package/coverage/lcov-report/src/components/NavTree/NavItem.tsx.html +1 -1
- package/coverage/lcov-report/src/components/NavTree/NavItemWrapper.tsx.html +1 -1
- package/coverage/lcov-report/src/components/NavTree/NavTree.tsx.html +1 -1
- package/coverage/lcov-report/src/components/NavTree/index.html +1 -1
- package/coverage/lcov-report/src/components/NavTree/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/NavTree/types.ts.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/Details.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/EditorsNote.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/Heading.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/Highlight.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/Languages.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/PackageCard.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/Tags.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/WideCard.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/constants.ts.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/index.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/PackageCard/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/components/PackageLanguages/PackageLanguages.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageLanguages/index.html +1 -1
- package/coverage/lcov-report/src/components/PackageLanguages/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/PackageList/PackageList.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageList/WideCardList.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageList/index.html +1 -1
- package/coverage/lcov-report/src/components/PackageList/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/PackageTag/PackageTag.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PackageTag/index.html +1 -1
- package/coverage/lcov-report/src/components/PackageTag/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Page/Page.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Page/index.html +1 -1
- package/coverage/lcov-report/src/components/Page/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/PageLoader/PageLoader.tsx.html +1 -1
- package/coverage/lcov-report/src/components/PageLoader/index.html +1 -1
- package/coverage/lcov-report/src/components/PageLoader/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/Picture/Picture.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Picture/index.html +1 -1
- package/coverage/lcov-report/src/components/Picture/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/SearchBar/SearchBar.tsx.html +1 -1
- package/coverage/lcov-report/src/components/SearchBar/SearchOverlay.tsx.html +1 -1
- package/coverage/lcov-report/src/components/SearchBar/SearchSuggestions.tsx.html +1 -1
- package/coverage/lcov-report/src/components/SearchBar/index.html +1 -1
- package/coverage/lcov-report/src/components/SearchBar/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/SearchBar/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/components/SearchItem/SearchItem.tsx.html +1 -1
- package/coverage/lcov-report/src/components/SearchItem/index.html +1 -1
- package/coverage/lcov-report/src/components/SearchItem/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/SearchModal/SearchModal.tsx.html +1 -1
- package/coverage/lcov-report/src/components/SearchModal/index.html +1 -1
- package/coverage/lcov-report/src/components/SearchModal/index.ts.html +1 -1
- package/coverage/lcov-report/src/components/SearchModal/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/components/Time/Time.tsx.html +1 -1
- package/coverage/lcov-report/src/components/Time/index.html +1 -1
- package/coverage/lcov-report/src/components/Time/index.ts.html +1 -1
- package/coverage/lcov-report/src/constants/constructs.ts.html +1 -1
- package/coverage/lcov-report/src/constants/dates.ts.html +1 -1
- package/coverage/lcov-report/src/constants/index.html +1 -1
- package/coverage/lcov-report/src/constants/keywords.ts.html +1 -1
- package/coverage/lcov-report/src/constants/languages.ts.html +1 -1
- package/coverage/lcov-report/src/constants/links.ts.html +1 -1
- package/coverage/lcov-report/src/constants/pageInfo.ts.html +1 -1
- package/coverage/lcov-report/src/constants/url.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Analytics/Analytics.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/Analytics/index.html +1 -1
- package/coverage/lcov-report/src/contexts/Analytics/index.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Analytics/types.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Analytics/usePageView.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Analytics/util.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Config/Config.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/Config/index.html +1 -1
- package/coverage/lcov-report/src/contexts/Config/index.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/ExternalLinkWarning/ExternalLinkWarning.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/ExternalLinkWarning/ExternalLinkWarningModal.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/ExternalLinkWarning/constants.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/ExternalLinkWarning/index.html +1 -1
- package/coverage/lcov-report/src/contexts/ExternalLinkWarning/index.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Search/Search.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/Search/index.html +1 -1
- package/coverage/lcov-report/src/contexts/Search/index.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Shortbread/Shortbread.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/Shortbread/index.html +1 -1
- package/coverage/lcov-report/src/contexts/Shortbread/index.ts.html +1 -1
- package/coverage/lcov-report/src/contexts/Theme.tsx.html +1 -1
- package/coverage/lcov-report/src/contexts/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalog/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalog/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalog/useCatalog.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalogResults/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalogResults/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalogResults/useCatalogResults.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalogSearch/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalogSearch/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useCatalogSearch/useCatalogSearch.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useConfigValue/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useConfigValue/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useConfigValue/useConfigValue.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useDebounce/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useDebounce/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useDebounce/useDebounce.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useHistoryState/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useHistoryState/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useHistoryState/useHistoryState.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useLanguage/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useLanguage/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useLanguage/useLanguage.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/usePagination/index.html +1 -1
- package/coverage/lcov-report/src/hooks/usePagination/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/usePagination/usePagination.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useQueryParams/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useQueryParams/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useQueryParams/useQueryParams.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useSearch/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useSearch/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useSearch/useSearch.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useStats/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useStats/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useStats/useStats.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useVersions/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useVersions/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useVersions/useVersions.ts.html +1 -1
- package/coverage/lcov-report/src/icons/AWSIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/DatadogIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/DotNetIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/DukeIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/GithubIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/GoIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/MongoDBIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/PythonIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/TSIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icons/index.html +1 -1
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.tsx.html +1 -1
- package/coverage/lcov-report/src/lib/shortbread/getLocalStoreWriter.ts.html +1 -1
- package/coverage/lcov-report/src/lib/shortbread/index.html +1 -1
- package/coverage/lcov-report/src/lib/shortbread/index.ts.html +1 -1
- package/coverage/lcov-report/src/lib/shortbread/shortbread.ts.html +1 -1
- package/coverage/lcov-report/src/lib/shortbread/source.js.html +1 -1
- package/coverage/lcov-report/src/no-op-sw.js.html +1 -1
- package/coverage/lcov-report/src/register-service-worker.ts.html +1 -1
- package/coverage/lcov-report/src/reportWebVitals.ts.html +1 -1
- package/coverage/lcov-report/src/service-worker.ts.html +1 -1
- package/coverage/lcov-report/src/theme/components/Checkbox.ts.html +1 -1
- package/coverage/lcov-report/src/theme/components/Code.ts.html +1 -1
- package/coverage/lcov-report/src/theme/components/Divider.ts.html +1 -1
- package/coverage/lcov-report/src/theme/components/Radio.ts.html +1 -1
- package/coverage/lcov-report/src/theme/components/Tabs.ts.html +1 -1
- package/coverage/lcov-report/src/theme/components/Tag.ts.html +1 -1
- package/coverage/lcov-report/src/theme/components/index.html +1 -1
- package/coverage/lcov-report/src/theme/components/index.ts.html +1 -1
- package/coverage/lcov-report/src/theme/foundations/borders.ts.html +1 -1
- package/coverage/lcov-report/src/theme/foundations/colors.ts.html +1 -1
- package/coverage/lcov-report/src/theme/foundations/index.html +1 -1
- package/coverage/lcov-report/src/theme/foundations/index.ts.html +1 -1
- package/coverage/lcov-report/src/theme/foundations/radius.ts.html +1 -1
- package/coverage/lcov-report/src/theme/foundations/shadows.ts.html +1 -1
- package/coverage/lcov-report/src/theme/foundations/sizes.ts.html +1 -1
- package/coverage/lcov-report/src/theme/index.html +1 -1
- package/coverage/lcov-report/src/theme/index.ts.html +1 -1
- package/coverage/lcov-report/src/types/config.ts.html +1 -1
- package/coverage/lcov-report/src/types/index.html +1 -1
- package/coverage/lcov-report/src/util/createTestIds.ts.html +1 -1
- package/coverage/lcov-report/src/util/css.ts.html +1 -1
- package/coverage/lcov-report/src/util/index.html +1 -1
- package/coverage/lcov-report/src/util/package.ts.html +1 -1
- package/coverage/lcov-report/src/util/sanitize-anchor.ts.html +1 -1
- package/coverage/lcov-report/src/util/url.ts.html +1 -1
- package/coverage/lcov-report/src/views/Contribute/Contribute.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Contribute/index.html +1 -1
- package/coverage/lcov-report/src/views/Contribute/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/FAQ/FAQ.tsx.html +1 -1
- package/coverage/lcov-report/src/views/FAQ/index.html +1 -1
- package/coverage/lcov-report/src/views/FAQ/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Home/CDKTypeTabs.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/Categories.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/Featured.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/GradientContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/Hero.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/Home.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/Info.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/InfoSection.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/PackageGrid.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Home/constants.ts.html +1 -1
- package/coverage/lcov-report/src/views/Home/index.html +1 -1
- package/coverage/lcov-report/src/views/Home/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Home/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/views/Home/useSection.ts.html +1 -1
- package/coverage/lcov-report/src/views/NotFound/NotFound.tsx.html +1 -1
- package/coverage/lcov-report/src/views/NotFound/index.html +1 -1
- package/coverage/lcov-report/src/views/NotFound/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/ChooseSubmodule/ChooseSubmodule.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/ChooseSubmodule/SearchInput.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/ChooseSubmodule/SearchModal.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/ChooseSubmodule/index.html +1 -1
- package/coverage/lcov-report/src/views/Package/ChooseSubmodule/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/DependenciesList.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/DocsError.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/FeedbackLinks.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/LanguageBar.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/LanguageSelection.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/NavDrawer.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/Package.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageDocs.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageDocsError.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageDocsUnsupported.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/Details.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/HeaderContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/Heading.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/Install.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/PackageHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/SelectVersion.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/ToggleButton.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/index.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageHeader/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageLayout.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageReadme.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageState.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PackageTypeDocs.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/PrimaryDocNavigation.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/SecondaryDocNavigation.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/ShareInfo.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/StickyNavContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Package/constants.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/index.html +1 -1
- package/coverage/lcov-report/src/views/Package/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/useIntersectingHeader/index.html +1 -1
- package/coverage/lcov-report/src/views/Package/useIntersectingHeader/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/useIntersectingHeader/useIntersectingHeader.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/useIntersectingHeader/util.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/useSectionItems/index.html +1 -1
- package/coverage/lcov-report/src/views/Package/useSectionItems/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/useSectionItems/useSectionItems.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/useSectionItems/util.ts.html +1 -1
- package/coverage/lcov-report/src/views/Package/util.ts.html +1 -1
- package/coverage/lcov-report/src/views/PackageLatest/PackageLatest.tsx.html +1 -1
- package/coverage/lcov-report/src/views/PackageLatest/index.html +1 -1
- package/coverage/lcov-report/src/views/PackageLatest/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Packages/Packages.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Packages/index.html +1 -1
- package/coverage/lcov-report/src/views/Packages/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Random/Random.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Random/index.html +1 -1
- package/coverage/lcov-report/src/views/Random/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Search/ArrowButton.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/CDKFilter.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/CheckboxFilter.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/FilterHeading.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/FilterPanel.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/GoToPage.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/KeywordsFilter.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/LanguageFilter.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/PageControls.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/RadioFilter.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/Search.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/SearchBar.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/SearchDetails.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/SearchResults.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/SortAndFilterDrawer.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/SortFilter.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/SortedBy.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/TagFilter.tsx.html +1 -1
- package/coverage/lcov-report/src/views/Search/constants.ts.html +1 -1
- package/coverage/lcov-report/src/views/Search/index.html +1 -1
- package/coverage/lcov-report/src/views/Search/index.ts.html +1 -1
- package/coverage/lcov-report/src/views/Search/testIds.ts.html +1 -1
- package/coverage/lcov-report/src/views/Search/useSearchParam.ts.html +1 -1
- package/coverage/lcov-report/src/views/Search/useUpdateSearchParam.ts.html +1 -1
- package/coverage/lcov-report/src/views/Search/util.ts.html +1 -1
- package/coverage/lcov-report/src/views/SiteTerms/SiteTerms.tsx.html +1 -1
- package/coverage/lcov-report/src/views/SiteTerms/index.html +1 -1
- package/coverage/lcov-report/src/views/SiteTerms/index.ts.html +1 -1
- package/package.json +3 -3
- package/build/static/js/323.430828ad.chunk.js +0 -2
- package/build/static/js/323.430828ad.chunk.js.map +0 -1
- package/build/static/js/332.2aed875e.chunk.js +0 -2
- package/build/static/js/332.2aed875e.chunk.js.map +0 -1
- package/build/static/js/375.51494ef4.chunk.js +0 -2
- package/build/static/js/375.51494ef4.chunk.js.map +0 -1
- package/build/static/js/421.71097c82.chunk.js +0 -2
- package/build/static/js/421.71097c82.chunk.js.map +0 -1
- package/build/static/js/451.46b4be6a.chunk.js +0 -2
- package/build/static/js/451.46b4be6a.chunk.js.map +0 -1
- package/build/static/js/453.8a180a70.chunk.js +0 -2
- package/build/static/js/453.8a180a70.chunk.js.map +0 -1
- package/build/static/js/496.7896896f.chunk.js +0 -2
- package/build/static/js/496.7896896f.chunk.js.map +0 -1
- package/build/static/js/589.2f877d14.chunk.js +0 -2
- package/build/static/js/589.2f877d14.chunk.js.map +0 -1
- package/build/static/js/591.098300f3.chunk.js +0 -2
- package/build/static/js/591.098300f3.chunk.js.map +0 -1
- package/build/static/js/619.71719804.chunk.js +0 -14
- package/build/static/js/619.71719804.chunk.js.map +0 -1
- package/build/static/js/685.ae85c638.chunk.js +0 -3
- package/build/static/js/685.ae85c638.chunk.js.map +0 -1
- package/build/static/js/773.184786ef.chunk.js +0 -2
- package/build/static/js/773.184786ef.chunk.js.map +0 -1
- package/build/static/js/8.c993f246.chunk.js +0 -3
- package/build/static/js/8.c993f246.chunk.js.map +0 -1
- package/build/static/js/857.e0862a5b.chunk.js +0 -2
- package/build/static/js/857.e0862a5b.chunk.js.map +0 -1
- package/build/static/js/959.49434bae.chunk.js +0 -2
- package/build/static/js/959.49434bae.chunk.js.map +0 -1
- package/build/static/js/main.7a467c1e.js +0 -3
- package/build/static/js/main.7a467c1e.js.map +0 -1
- /package/build/static/js/{685.ae85c638.chunk.js.LICENSE.txt → 487.043142d5.chunk.js.LICENSE.txt} +0 -0
- /package/build/static/js/{8.c993f246.chunk.js.LICENSE.txt → 8.75aab01d.chunk.js.LICENSE.txt} +0 -0
- /package/build/static/js/{main.7a467c1e.js.LICENSE.txt → main.177d8f14.js.LICENSE.txt} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(globalThis.webpackChunkconstruct_hub_webapp=globalThis.webpackChunkconstruct_hub_webapp||[]).push([[773],{19608(e,t,n){n.d(t,{f:()=>i});var a=n(31206),s=n(4450),r=n(32892),o=n(70579);const i=e=>{let{label:t,color:n,icon:i}=e;const l=(0,a.dU)("none","brightness(1.75)");return(0,o.jsxs)(s.BJ,{align:"center",direction:"row",filter:l,spacing:2,children:[(0,o.jsx)(r._V,{alt:`${t} icon`,src:i,w:4}),(0,o.jsx)(s.EY,{color:n,fontWeight:"bold",children:t})]})}},83689(e,t,n){n.d(t,{B:()=>o});var a=n(49292),s=n(68195),r=n(70579);const o=e=>{let{children:t,language:n}=e;const o=s.WX.has(n),i=s.I8[n],l=o?`Click to view documentation in ${i}`:`Documentation support for ${i} is coming soon!`;return(0,r.jsx)(a.m,{hasArrow:!0,label:l,placement:"top-start",children:(0,r.jsx)("span",{children:t})})}},10178(e,t,n){n.d(t,{h:()=>L,F:()=>a});let a=function(e){return e.Wide="wide",e}({});var s=n(65043),r=n(4450),o=n(49292),i=n(43222);const l=(0,n(81249).$)("packageCard",["author","description","downloads","languages","published","title","version","comment","wideContainer"]);var d=n(34176),c=n(55410),u=n(71154),h=n(60310),m=n(70579);const v=e=>{let{"data-testid":t,tooltip:n,value:a}=e;return(0,m.jsx)(o.m,{hasArrow:!0,isDisabled:!n,label:n,placement:"left",children:(0,m.jsx)(r.EY,{"data-testid":t,fontSize:"xs",zIndex:1,children:a})})},g=()=>{var e,t,n;const{author:a,metadata:{date:s},name:r}=I(),{data:o}=(0,d.J)(),g=null===o||void 0===o||null===(e=o.packages)||void 0===e||null===(t=e[r])||void 0===t||null===(n=t.downloads)||void 0===n?void 0:n.npm,p="string"===typeof a?a:a.name,x=new Date(s);return(0,m.jsxs)(m.Fragment,{children:[void 0!==g&&(0,m.jsx)(v,{"data-testid":l.downloads,tooltip:"Download numbers are periodically sourced from the npm registry",value:`${g.toLocaleString()} weekly downloads`}),(0,m.jsx)(v,{"data-testid":l.published,value:(0,m.jsx)(h.g,{date:x,fontSize:"xs",formattedDate:(0,i.A)(x,{addSuffix:!0})})}),(0,m.jsx)(v,{"data-testid":l.author,value:(0,m.jsxs)(m.Fragment,{children:["By"," ",(0,m.jsx)(u.k,{color:"link",to:(0,c.iS)({query:p}),children:p})]})})]})};var p=n(62582);const x=e=>{let{comment:t}=e;return(0,m.jsxs)(r.EY,{"data-testid":l.comment,fontSize:"md",lineHeight:"tall",noOfLines:4,children:[(0,m.jsxs)(r.EY,{as:"span",color:"blue.500",fontWeight:"bold",children:["Editor's note:"," "]}),t]})};var j=n(99103),f=n(4029),b=n(47415);const y=()=>{const[e]=(0,f.o)(),{dataEvent:t,description:n,comment:a,constructFrameworks:s,name:o,version:i}=I();return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r.rI,{as:p.N_,"data-event":t?(0,j.eq)(t,"Package Card",o):void 0,to:(0,c.q$)({name:o,version:i,language:e}),children:(0,m.jsxs)(r.so,{align:"center",children:[(0,m.jsx)(b.Y,{constructFrameworks:s,mr:2,zIndex:1}),(0,m.jsx)(r.DZ,{as:"h3",color:"textPrimary","data-testid":l.title,fontSize:"md",fontWeight:"bold",wordBreak:"normal",children:o})]})}),a?(0,m.jsx)(x,{comment:a}):(0,m.jsx)(r.EY,{color:"textPrimary","data-testid":l.description,fontSize:"md",lineHeight:"tall",noOfLines:4,children:n||"No description available."})]})};var w=n(16195),S=n(19608);const k=()=>{var e,t;const{packageTags:n=[]}=null!==(e=null===(t=I())||void 0===t?void 0:t.metadata)&&void 0!==e?e:{},[a]=(0,w.um)(n);return a?(0,m.jsx)(r.az,{fontSize:"xs",children:(0,m.jsx)(S.f,{...a})}):null};var C=n(68195),T=n(83689);const D={sm:5,md:6,lg:8},E=e=>{let{isRounded:t=!1,languages:n,name:a,size:s="md",version:r}=e;const o=Object.keys(null!==n&&void 0!==n?n:{});return(0,m.jsx)(m.Fragment,{children:Object.entries(C.fN).sort((e,t)=>{let[n]=e,[a]=t;return C.Yj.indexOf(n)-C.Yj.indexOf(a)}).map(e=>{let[n,i]=e;const l=n,d=l===C.TM.TypeScript||o.includes(l),u=l===C.TM.TypeScript||C.WX.has(l);if(!d)return null;const{name:h,icon:v}=i,g=(0,m.jsx)(v,{"aria-label":`Supports ${h}`,borderRadius:t?"50%":0,h:D[s],opacity:u?1:.2,w:D[s]});return(0,m.jsx)(T.B,{language:l,children:u?(0,m.jsx)(p.N_,{"aria-label":`View package docs for ${l}`,to:(0,c.q$)({name:a,version:r,language:l}),children:g}):g},l)})})},F=()=>{const e=I();return(0,m.jsx)(E,{...e,size:"sm"})};var R=n(40483);const B=()=>{const{keywords:e=[],metadata:{packageTags:t=[]}}=I(),n=(0,w.rh)({packageTags:t,keywords:e});return(0,m.jsx)(m.Fragment,{children:n.slice(0,10).map(e=>{let{id:t,keyword:{label:n,color:a}={}}=e;return(0,m.jsx)(R.n,{value:t,variant:a,children:n},t)})})},A=()=>(0,m.jsx)(r.Qe,{_hover:{"> article":{bg:"hoverPrimary"}},children:(0,m.jsxs)(r.xA,{as:"article",bg:"bgSecondary",border:"base",borderRadius:"sm",boxShadow:"base",color:"textPrimary","data-testid":l.wideContainer,h:"full",minH:"12.5rem",templateColumns:{base:"1fr",lg:"1fr 14rem"},w:"full",children:[(0,m.jsxs)(r.so,{direction:"column",justify:"space-between",overflow:"hidden",p:5,sx:{gap:"0.5rem"},children:[(0,m.jsx)(r.BJ,{spacing:3,children:(0,m.jsx)(y,{})}),(0,m.jsx)(r.so,{align:"center",sx:{gap:"0.5rem"},wrap:"wrap",children:(0,m.jsx)(B,{})})]}),(0,m.jsxs)(r.so,{align:{base:"end",lg:"initial"},borderLeft:{lg:"base"},borderTop:{base:"base",lg:"none"},direction:{base:"row",lg:"column"},justify:"space-between",p:5,sx:{gap:"0.5rem"},children:[(0,m.jsxs)(r.BJ,{spacing:1,children:[(0,m.jsx)(k,{}),(0,m.jsx)(r.BJ,{spacing:1,children:(0,m.jsx)(g,{})})]}),(0,m.jsx)(r.BJ,{"data-testid":l.languages,direction:"row",spacing:2,children:(0,m.jsx)(F,{})})]})]})}),O=(0,s.createContext)(null),I=()=>(0,s.useContext)(O),L=e=>{let{"data-event":t,pkg:n,variant:s=a.Wide}=e;return(0,m.jsx)(O.Provider,{value:{...n,dataEvent:t},children:s===a.Wide&&(0,m.jsx)(A,{})})}},40483(e,t,n){n.d(t,{n:()=>i});var a=n(19154),s=n(55410),r=n(71154),o=n(70579);const i=e=>{let{children:t,value:n,label:i=n,zIndex:l,...d}=e;return(0,o.jsx)(r.k,{"aria-label":`Tag: ${i}`,to:(0,s.iS)({keywords:[n]}),zIndex:l,children:(0,o.jsx)(a.vw,{_hover:{textDecoration:"underline"},...d,children:(0,o.jsx)(a.d1,{children:t})})})}},50425(e,t,n){n.d(t,{Y:()=>d});var a=n(65043),s=n(41591);const r={contribute:{event:{name:"Contribute Load"}},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"}}};var o=n(99103),i=n(49182),l=n(70579);["default-src 'self' 'unsafe-inline' http://*.awsstatic.com;","connect-src 'self' https://*.shortbread.aws.dev http://*.shortbread.aws.dev http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;","frame-src http://aws.demdex.net http://dpm.demdex.net;","img-src 'self' https://* http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;","object-src 'none';","style-src 'self' 'unsafe-inline';"].join(" ");const d=e=>{let{children:t,meta:n,pageName:d}=e;const c=(0,o.Or)(r[d]);(0,a.useEffect)(()=>{c()},[c]);const u=(0,i.R)("feeds")||[],{suffix:h=!0,title:m,description:v}=n,g=h?`${m} - Construct Hub`:m;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(s.m,{children:[!1,(0,l.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),(0,l.jsx)("meta",{charSet:"utf-8"}),u.map(e=>{let{url:t,mimeType:n}=e;return(0,l.jsx)("link",{href:t,rel:"alternate",type:n},t)}),(0,l.jsx)("title",{children:g}),(0,l.jsx)("meta",{content:g,property:"og:title"}),(0,l.jsx)("meta",{content:g,name:"twitter:title"}),(0,l.jsx)("meta",{content:"summary",name:"twitter:card"}),(0,l.jsx)("meta",{content:v,name:"description"}),(0,l.jsx)("meta",{content:v,property:"og:description"}),(0,l.jsx)("meta",{content:v,name:"twitter:description"})]}),t]})}},60310(e,t,n){n.d(t,{g:()=>i});var a=n(21038),s=n(4450),r=n(7842),o=n(70579);const i=(0,a.Rf)((e,t)=>{let{date:n,format:a,formattedDate:i,...l}=e;return(0,o.jsx)(s.az,{as:"time",dateTime:n.toISOString(),ref:t,...l,children:null!==i&&void 0!==i?i:(0,r.A)(n,null!==a&&void 0!==a?a:"")})});i.displayName="Time"},49182(e,t,n){n.d(t,{R:()=>s});var a=n(75714);const s=e=>{const{data:t}=(0,a.U)();return(null!==t&&void 0!==t?t:{})[e]}},4029(e,t,n){n.d(t,{o:()=>u});var a=n(65043),s=n(91688),r=n(68195),o=n(32337),i=n(19507);const l=r.TM.TypeScript,d="preferred-language",c=e=>null!=e&&r.WX.has(e),u=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{updateUrl:t,updateSaved:n}=e,{pathname:r,hash:u}=(0,s.zy)(),{replace:h}=(0,s.W6)(),m=(0,i.s)(),v=m.get(o.uB.LANGUAGE),[g,p]=(0,a.useState)(()=>(e=>{if(c(e))return e;try{var t;const e=null!==(t=localStorage.getItem(d))&&void 0!==t?t:"";if(c(e))return e}catch{}return l})(v));(0,a.useEffect)(()=>{c(v)&&v!==g&&p(v)},[v]),(0,a.useEffect)(()=>{v!==g&&t&&(m.set(o.uB.LANGUAGE,g),h({pathname:r,hash:u,search:m.toString()}))},[g,t]);const x=(0,a.useCallback)(e=>{if(p(e),n)try{localStorage.setItem(d,e)}catch{}},[n]);return(0,a.useMemo)(()=>[g,x],[g,x])}},19507(e,t,n){n.d(t,{s:()=>r});var a=n(65043),s=n(91688);const r=()=>{const{search:e}=(0,s.zy)();return(0,a.useMemo)(()=>new URLSearchParams(e),[e])}},16195(e,t,n){n.d(t,{rh:()=>i,um:()=>s});var a=n(6546);const s=e=>!e||e.length<1?[]:e.reduce((e,t)=>t.highlight?[...e,t.highlight]:e,[]),r=e=>(null!==e&&void 0!==e?e:[]).filter(e=>{var t;return Boolean(null===(t=e.keyword)||void 0===t?void 0:t.label)}).map(e=>{var t;return{...e,id:null===(t=e.keyword)||void 0===t?void 0:t.label}}),o=e=>!e||e.length<1?[]:e.filter(e=>Boolean(e)&&!a._.has(e)).map(e=>({id:e,keyword:{label:e}})),i=e=>{let{packageTags:t,keywords:n}=e;const a=new Array,s=new Set;for(const i of[...r(t),...o(n)]){const e=i.keyword.label.toLowerCase();s.has(e)||(a.push(i),s.add(e))}return a}},40773(e,t,n){n.r(t),n.d(t,{default:()=>ye});var a=n(4450),s=n(65043),r=n(95104),o=n(11453),i=n(99103);const l={[o.q.NameAsc]:"A-Z",[o.q.NameDesc]:"Z-A",[o.q.PublishDateAsc]:"Oldest",[o.q.PublishDateDesc]:"Recently updated",[o.q.DownloadsDesc]:"Most downloads",[o.q.DownloadsAsc]:"Least downloads"},d=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,i.eq)("Search",...t)},c={FILTERS:d("Filters"),RESULTS:d("Results"),SEARCH:d("Search"),SORT:d("Sort")};var u=n(14034),h=n(80572),m=n(21668),v=n(70579);const g=e=>{let{name:t,hint:n}=e;const s=(0,h.AD)({base:"auto",md:"right"});return(0,v.jsxs)(a.so,{align:"center",mb:1,children:[(0,v.jsx)(a.DZ,{as:"h3",size:"sm",w:"max-content",children:t}),n?(0,v.jsxs)(m.AM,{colorScheme:"dark",placement:s,strategy:"fixed",children:[(0,v.jsx)(m.Wv,{children:(0,v.jsx)(a.so,{"aria-label":`Hint: ${t}`,as:"button","data-event":(0,i.eq)(c.FILTERS,t,"Popover"),ml:2,children:(0,v.jsx)(u.uI,{h:3.5,w:3.5})})}),(0,v.jsxs)(m.hl,{bg:"gray.700",borderRadius:"base",color:"white",fontSize:"sm",mx:{base:"1rem",md:"initial"},shadow:"whiteAlpha.300",children:[(0,v.jsx)(m.Rp,{bg:"gray.700"}),(0,v.jsx)(m.ej,{children:(0,v.jsx)(a.EY,{children:n})})]})]}):null]})};const p=(0,n(81249).$)("searchRedesign",["page","searchDetails","nextPage","prevPage","goToPage","sortButton","sortDropdown","sortItem","filtersPanel","cdkTypeFilter","cdkVersionFilter","filterItem","languagesFilter"]),x=e=>{let{"data-testid":t,value:n,onValueChange:s,options:o,name:l,hint:d}=e;return(0,v.jsxs)(a.BJ,{"data-testid":t,spacing:1,children:[(0,v.jsx)(g,{hint:d,name:l}),(0,v.jsx)(r.z6,{onChange:s,value:n,children:(0,v.jsx)(a.BJ,{spacing:1,children:o.map(e=>{let{display:t,value:n}=e;const s=(0,i.eq)(c.FILTERS,l,"Filter",t);return(0,v.jsx)(r.sx,{"data-event":s,value:n,children:(0,v.jsx)(a.EY,{color:"textTertiary","data-event":s,"data-testid":p.filterItem,"data-value":n,isTruncated:!0,children:t})},n)})})})]})};var j=n(32337);const f=e=>{const t=parseInt(e);return"NaN"===`${t}`?0:t},b=e=>e?decodeURIComponent(e).split(","):[],y=e=>{if("undefined"===typeof window)return null;return new URL(window.location.href).searchParams.get(e)},w=()=>{var e,t,n,a;return{query:null!==(e=y(j.uB.SEARCH_QUERY))&&void 0!==e?e:"",keywords:b(y(j.uB.KEYWORDS)),cdkType:null!==(t=y(j.uB.CDK_TYPE))&&void 0!==t?t:void 0,cdkMajor:(()=>{const e=y(j.uB.CDK_MAJOR);return e?f(e):void 0})(),languages:b(y(j.uB.LANGUAGES)),offset:f(null!==(n=y(j.uB.OFFSET))&&void 0!==n?n:""),sort:null!==(a=y(j.uB.SORT))&&void 0!==a?a:void 0,tags:b(y(j.uB.TAGS))}};var S=n(19507);const k=(e,t)=>{const n=(0,S.s)().get(e);return(0,s.useMemo)(()=>t?t(n):n,[n])},C=()=>{var e;return null!==(e=k(j.uB.CDK_TYPE))&&void 0!==e?e:void 0},T=()=>k(j.uB.CDK_MAJOR,e=>e?f(e):void 0),D=()=>k(j.uB.KEYWORDS,b),E=()=>k(j.uB.LANGUAGES,b),F=()=>{var e;return null!==(e=k(j.uB.SEARCH_QUERY))&&void 0!==e?e:""},R=()=>{var e;return null!==(e=k(j.uB.SORT))&&void 0!==e?e:void 0},B=()=>k(j.uB.TAGS,b);var A=n(91688),O=n(55410);const I=()=>{const{push:e}=(0,A.W6)();return(0,s.useCallback)(t=>{const{offset:n,...a}=null!==t&&void 0!==t?t:{};e((0,O.iS)({...w(),...a,offset:null!==n&&void 0!==n?n:0}))},[e])};var L=n(99904),P=n(55754);const z=()=>{var e;const t=C(),n=T(),a=I(),r=(0,P.$)(),o=(0,s.useMemo)(()=>{const e=r.constructFrameworks,t=Object.entries(e).reduce((e,t)=>{let[n,a]=t;return a.pkgCount<1?e:{...e,[n]:{display:L.e1[n],value:n,...a}}},{});return Object.keys(t).length?t:void 0},[r]),i=(0,s.useMemo)(()=>{var e;if(!o||!t)return;const n=null===(e=o[t])||void 0===e?void 0:e.majorVersions;return n?[...n].sort((e,t)=>e-t).map(e=>({value:e.toString(),display:`${L.e1[t]} v${e}`})):void 0},[o,t]);if(!o)return null;return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(x,{"data-testid":p.cdkTypeFilter,hint:"Choose the right CDK for your IaC technology: AWS CDK for AWS CloudFormation, CDKTF for Terraform, or CDK8s for Kubernetes.",name:"CDK Type",onValueChange:e=>{a({cdkType:e?e:void 0,cdkMajor:void 0})},options:[{display:"Any CDK Type",value:""},...Object.values(o)],value:null!==t&&void 0!==t?t:""}),!!(i&&i.length>1)&&(0,v.jsx)(x,{"data-testid":p.cdkVersionFilter,hint:"Choose the major version of the CDK you're using to see only constructs that will work with that version.",name:"CDK Major Version",onValueChange:e=>{let t;e&&(t=parseInt(e,10)),a({cdkMajor:t})},options:[{display:"Any Major Version",value:""},...i],value:null!==(e=null===n||void 0===n?void 0:n.toString())&&void 0!==e?e:""})]})};var W=n(35066),$=n(49292),q=n(19754),Y=n(858),M=n(22554);const K=e=>{let{display:t,value:n,isDisabled:s,disabledHint:r,isChecked:o,onChange:i}=e;return(0,v.jsx)(W.Sc,{isChecked:o,isDisabled:s,onChange:i,children:(0,v.jsx)($.m,{hasArrow:!0,isDisabled:!s&&!r,label:r,placement:"right",children:(0,v.jsx)(a.EY,{color:"textTertiary","data-testid":p.filterItem,"data-value":n,isTruncated:!0,children:t})})},n)},J=e=>{let{"data-testid":t,initialItemCount:n,hint:r,name:o,options:l,values:d,onValueChange:h}=e;const m=(0,q.j1)(),{trackCustomEvent:p}=(0,i.st)(),x=e=>()=>{p((0,i.xO)({name:(0,i.eq)(c.FILTERS,o,"Filter",e.display)})),h(e.value)};let j=l,f=[];n&&(j=l.slice(0,n),f=l.slice(n,l.length));const b=f.length>0;return(0,v.jsxs)(a.so,{"data-testid":t,direction:"column",children:[(0,v.jsx)(g,{hint:r,name:o}),(0,v.jsxs)(a.BJ,{mt:1,spacing:1,children:[j.map(e=>(0,s.createElement)(K,{...e,isChecked:d.includes(e.value),key:e.value,onChange:x(e)})),b&&(0,v.jsx)(Y.SD,{animateOpacity:!0,in:m.isOpen,unmountOnExit:!0,children:(0,v.jsx)(a.BJ,{spacing:1,children:f.map(e=>(0,s.createElement)(K,{...e,isChecked:d.includes(e.value),key:e.value,onChange:x(e)}))})})]}),b&&(0,v.jsx)(a.so,{align:"start",mt:1,children:(0,v.jsx)(M.$n,{color:"textTertiary","data-event":(0,i.eq)(c.FILTERS,o,"Show More"),fontWeight:"normal",leftIcon:m.isOpen?(0,v.jsx)(u.Mt,{}):(0,v.jsx)(u.D3,{}),onClick:m.onToggle,size:"sm",textAlign:"left",variant:"link",w:"auto",children:m.isOpen?`Show fewer options (${j.length})`:`Show more options (${f.length})`})})]})},N=()=>{const e=D(),t=(0,P.$)().keywords,n=I(),a=(0,s.useMemo)(()=>{const n=[...t.entries()].sort((e,t)=>{let[,n]=e,[,a]=t;return n<a?1:-1}).filter(t=>{let[n]=t;return!e.includes(n)}).map(e=>{let[t]=e;return{display:t,value:t}}).slice(0,25);return[...e.filter(e=>!n.some(t=>t.value===e)).map(e=>({display:e,value:e})),...n]},[t,e]);return(0,v.jsx)(J,{"data-testid":p.languagesFilter,hint:"Focus the results by choosing one or more keywords reflecting the kind of construct you're looking for. Keywords are provided by construct authors.",initialItemCount:5,name:"Keywords",onValueChange:t=>{n({keywords:e.includes(t)?e.filter(e=>e!==t):[...e,t]})},options:a,values:e})};var U=n(68195);const V=Object.entries(U.I8).map(e=>{let[t,n]=e;return{display:n,value:t,...U.WX.has(t)?{isDisabled:!1}:{isDisabled:!0,disabledHint:`${U.I8[t]} support is coming soon!`}}}).sort((e,t)=>e.isDisabled>t.isDisabled?1:-1),_=()=>{const e=E(),t=I();return(0,v.jsx)(J,{"data-testid":p.languagesFilter,hint:"Choose one or more languages. Results include constructs for use with at least one of the selected languages.",name:"Programming Language",onValueChange:n=>{const a=n;t({languages:e.includes(a)?e.filter(e=>e!==a):[...e,a]})},options:V,values:e})};var H=n(49182);const G=()=>{const e=(0,H.R)("packageTags"),t=(0,H.R)("packageTagGroups"),n=(0,s.useMemo)(()=>{var n;const a=new Map;null===t||void 0===t||t.forEach(e=>{a.set(e.id,e)});return((e,t)=>e.reduce((e,n)=>{var a;const s=null===(a=n.searchFilter)||void 0===a?void 0:a.groupBy,r=s?t.get(s):void 0;if(s&&r){const t=e[s];return t?(t.tags=[...t.tags,n],e):{...e,[s]:{...r,tags:[n]}}}var o,i;return s?{...e,[s]:{id:s,tags:[...null!==(o=null===e||void 0===e||null===(i=e[s])||void 0===i?void 0:i.tags)&&void 0!==o?o:[],n]}}:e},{}))(null!==(n=null===e||void 0===e?void 0:e.filter(e=>Boolean(e.searchFilter)))&&void 0!==n?n:[],a)},[e,t]),a=B(),r=I(),o=e=>{r({tags:a.includes(e)?a.filter(t=>t!==e):[...a,e]})},i=(0,s.useCallback)(e=>{var t,s;const o=new Set((null!==(t=null===(s=n[e])||void 0===s?void 0:s.tags)&&void 0!==t?t:[]).map(e=>{let{id:t}=e;return t}));return e=>{const t=a.filter(e=>!o.has(e));r({tags:e?[...t,e]:t})}},[n,a,r]);return(0,v.jsx)(v.Fragment,{children:Object.values(n).map(e=>{let{filterType:t,id:n,label:r,tooltip:l,tags:d}=e;const c={hint:l,name:null!==r&&void 0!==r?r:n,options:d.map(e=>({display:e.searchFilter.display,value:e.id}))};var u,h;return"radio"===t?(0,s.createElement)(x,{...c,key:n,onValueChange:i(n),options:[{display:`Any ${c.name}`,value:""},...c.options],value:null!==(u=null===(h=d.find(e=>a.includes(e.id)))||void 0===h?void 0:h.id)&&void 0!==u?u:""}):(0,s.createElement)(J,{...c,key:n,onValueChange:o,values:a})})})};var Z=n(45329);const Q="5.75rem",X=()=>(0,v.jsx)(Z.Z,{borderRadius:"sm","data-testid":p.filtersPanel,display:{base:"none",md:"flex"},maxH:`calc(100vh - ${Q} - 1.25rem)`,maxW:"23rem",minW:"100%",overflow:"hidden auto",p:4,pos:"sticky",top:Q,zIndex:"docked",children:(0,v.jsxs)(a.BJ,{color:"textPrimary",h:"max-content",spacing:4,top:4,children:[(0,v.jsx)(a.DZ,{as:"h2",size:"sm",children:"Filters"}),(0,v.jsx)(z,{}),(0,v.jsx)(_,{}),(0,v.jsx)(G,{}),(0,v.jsx)(N,{})]})}),ee=e=>{let{"data-event":t,"data-testid":n,icon:a,label:s,onClick:r}=e;const o={"aria-label":s,borderRadius:"md",borderColor:"blue.500",colorScheme:"blue","data-event":t,"data-testid":n,icon:(0,v.jsx)(a,{color:"blue.500",h:5,w:5}),mx:2,h:10,w:10,variant:"outline"};return(0,v.jsx)(M.K0,{...o,disabled:!r,onClick:r})};var te=n(67682);const ne=e=>{let{"data-event":t,"data-testid":n,pageLimit:r,offset:o}=e;const l=I(),{trackCustomEvent:d}=(0,i.st)(),[c,u]=(0,s.useState)((o+1).toString());(0,s.useEffect)(()=>{u((o+1).toString())},[o]);return(0,v.jsxs)(a.so,{align:"center",as:"form",mx:2,onSubmit:e=>{e.preventDefault(),l({offset:parseInt(c)-1})},children:[(0,v.jsx)(te.pd,{"aria-label":"Jump to page",colorScheme:"brand","data-testid":n,h:10,max:r+1,min:1,name:"page",onChange:e=>{e.preventDefault(),u(e.target.value)},onFocus:()=>{t&&d((0,i.xO)({name:t}))},p:0,textAlign:"center",type:"number",value:c,w:10}),(0,v.jsxs)(a.EY,{ml:2,w:"max-content",children:["of ",r+1]})]})},ae=e=>{let{offset:t,pageLimit:n}=e;const s=I(),r=t<n?()=>s({offset:t+1}):void 0,o=t>0?()=>s({offset:t-1}):void 0;return(0,v.jsxs)(a.BJ,{align:"center",direction:"row",justify:"space-between",maxW:"18rem",mx:"auto",spacing:4,w:"full",children:[(0,v.jsx)(ee,{"data-event":(0,i.eq)(c.RESULTS,"Previous Page"),"data-testid":p.prevPage,icon:u.YJ,label:"Previous page button",onClick:o}),(0,v.jsx)(ne,{"data-event":(0,i.eq)(c.RESULTS,"Go to Page"),"data-testid":p.goToPage,offset:t,pageLimit:n}),(0,v.jsx)(ee,{"data-event":(0,i.eq)(c.RESULTS,"Next Page"),"data-testid":p.nextPage,icon:u.vK,label:"Next page button",onClick:r})]})};var se=n(96833);const re=()=>{const e=F(),t=I(),[n,a]=(0,s.useState)(null!==e&&void 0!==e?e:"");return(0,v.jsx)(se.IW,{bg:"bgSecondary","data-event":c.SEARCH,onChange:e=>a(e.target.value),onSubmit:e=>{e.preventDefault(),t({query:n,sort:void 0})},value:n})},oe=e=>{let{children:t}=e;return(0,v.jsx)(a.EY,{as:"strong",color:"textSecondary",children:t})},ie=e=>{let{first:t,count:n,last:a}=e;return!t&&a>=n?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(oe,{children:n})," of ",(0,v.jsx)(oe,{children:n})]}):(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(oe,{children:[n?t+1:n," - ",a>n?n:a]})," ","of ",(0,v.jsx)(oe,{children:n})]})},le=e=>{let{limit:t,offset:n,count:s,filtered:r,query:o}=e;const i=t*n,l=i+t,d=s>0;return(0,v.jsxs)(a.EY,{"data-testid":p.searchDetails,children:[d?(0,v.jsxs)(v.Fragment,{children:["Displaying ",(0,v.jsx)(ie,{count:s,first:i,last:l})," ",r?"search results":"constructs"]}):(0,v.jsx)(v.Fragment,{children:r?"There were no search results":"No constructs found"}),o&&(0,v.jsxs)(v.Fragment,{children:[" for ",(0,v.jsx)(oe,{children:o})]}),".",!d&&r&&(0,v.jsx)(v.Fragment,{children:" Try a different term."})]})};var de=n(62285);const ce=()=>{const e=R(),t=I();return(0,v.jsx)(x,{hint:"Sets the order of search results",name:"Sorted By",onValueChange:e=>{t({sort:e||void 0})},options:[{display:"Relevance",value:""},...Object.entries(l).map(e=>{let[t,n]=e;return{display:n,value:t}})],value:null!==e&&void 0!==e?e:""})},ue=()=>{const e=(0,q.j1)();return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(M.$n,{colorScheme:"brand",display:{md:"none"},onClick:e.onOpen,rightIcon:(0,v.jsx)(u.D3,{}),variant:"link",children:"Sorting and Filters"}),(0,v.jsxs)(de._s,{...e,placement:"bottom",children:[(0,v.jsx)(de.QP,{}),(0,v.jsxs)(de.zj,{color:"textPrimary",maxH:"full",children:[(0,v.jsx)(de.BE,{borderBottom:"base",children:"Sorting and Filters"}),(0,v.jsx)(de.s1,{}),(0,v.jsx)(de.ys,{children:(0,v.jsxs)(a.BJ,{color:"textPrimary",pb:4,spacing:4,children:[(0,v.jsx)(ce,{}),(0,v.jsx)(z,{}),(0,v.jsx)(_,{}),(0,v.jsx)(G,{}),(0,v.jsx)(N,{})]})})]})]})]})};var he=n(84454);const me=()=>{const e=R(),t=I(),n=e?l[e]:"Relevance";return(0,v.jsxs)(a.so,{align:"center",children:[(0,v.jsx)(a.EY,{children:"Sorted by"}),(0,v.jsxs)(he.W1,{children:[(0,v.jsx)(he.IU,{as:M.$n,color:"link","data-event":(0,i.eq)(c.SORT,"Menu"),"data-testid":p.sortButton,ml:2,pl:2,pr:2,py:1,rightIcon:(0,v.jsx)(u.D3,{}),variant:"link",children:n}),(0,v.jsxs)(he.cO,{"data-testid":p.sortDropdown,minW:"180",zIndex:"sticky",children:[(0,v.jsx)(he.Dr,{"data-event":(0,i.eq)(c.SORT,"Option","Relevance"),"data-testid":p.sortItem,"data-value":"",onClick:()=>t({sort:void 0}),children:"Relevance"},"Relevance"),Object.entries(l).map(e=>{let[n,a]=e;return(0,v.jsx)(he.Dr,{"data-event":(0,i.eq)(c.SORT,"Option",a),"data-testid":p.sortItem,"data-value":n,onClick:()=>t({sort:n}),children:a},n)})]})]})]})};var ve=n(4448),ge=n(10178);const pe={[ge.F.Wide]:e=>{let{"data-event":t,items:n}=e;return(0,v.jsx)(a.BJ,{spacing:4,children:n.map(e=>(0,v.jsx)(ge.h,{"data-event":t,pkg:e,variant:ge.F.Wide},`${e.name}-${e.version}`))})}},xe=(0,s.memo)(e=>{let{"data-event":t,cardView:n=ge.F.Wide,items:s,loading:r}=e;if(r||!s)return(0,v.jsx)(a.ov,{children:(0,v.jsx)(ve.y,{size:"xl"})});const o=pe[n];return(0,v.jsx)(o,{"data-event":t,items:s})});xe.displayName="PackageList";var je=n(50425),fe=n(95119);const be=()=>{const e=I(),t=k(j.uB.OFFSET,e=>f(null!==e&&void 0!==e?e:"")),n=F(),r=D(),o=E(),i=T(),l=C(),d=R(),u=B(),{page:h,pageLimit:m,results:g}=(0,fe.v)({offset:t,limit:25,query:n,keywords:r,languages:o,cdkMajor:i,cdkType:l,sort:d,tags:u});return(0,s.useEffect)(()=>{g.length&&(t<0||t>m)&&e(t<0?{offset:0}:{offset:m})},[g,t,m]),(0,s.useEffect)(()=>{window.scrollTo(0,0)},[h]),(0,v.jsx)(je.Y,{meta:{title:n||"Search",description:n?`${g.length} results for ${n} at Construct Hub`:"Search reusable components for your cloud application"},pageName:"search",children:(0,v.jsxs)(a.BJ,{direction:"column",maxW:"100vw",pb:4,px:4,spacing:4,children:[(0,v.jsx)(re,{}),(0,v.jsxs)(a.BJ,{align:{base:"start",lg:"center"},direction:{base:"column-reverse",lg:"row"},justify:{base:"initial",lg:"space-between"},spacing:4,children:[(0,v.jsx)(le,{count:g.length,filtered:!!n,limit:25,offset:t,query:n}),(0,v.jsx)(a.az,{display:{base:"none",md:"initial"},children:(0,v.jsx)(me,{})}),(0,v.jsx)(a.az,{display:{md:"none"},children:(0,v.jsx)(ue,{})})]}),(0,v.jsx)(xe,{"data-event":c.RESULTS,items:h}),(0,v.jsx)(a.az,{w:"full",children:(0,v.jsx)(ae,{offset:t,pageLimit:m})})]})})},ye=()=>(0,v.jsx)(je.Y,{meta:{title:"Search - Construct Hub",description:"Search Construct Libraries for AWS CDK, CDK8s, and CDKTF"},pageName:"search",children:(0,v.jsxs)(a.xA,{"data-testid":p.page,gap:4,h:"full",maxW:"100%",px:{base:0,md:6},py:6,templateColumns:{base:"1fr",md:"auto 1fr"},templateRows:"1fr",children:[(0,v.jsx)(X,{}),(0,v.jsx)(be,{})]})})}}]);
|
|
2
|
-
//# sourceMappingURL=773.184786ef.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/773.184786ef.chunk.js","mappings":"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","sources":["components/Highlight/Highlight.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/EditorsNote.tsx","components/PackageCard/Heading.tsx","components/PackageCard/Highlight.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/Tags.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/PackageTag/PackageTag.tsx","constants/pageInfo.ts","components/Page/Page.tsx","components/Time/Time.tsx","hooks/useConfigValue/useConfigValue.ts","hooks/useLanguage/useLanguage.ts","hooks/useQueryParams/useQueryParams.ts","util/package.ts","views/Search/constants.ts","views/Search/FilterHeading.tsx","views/Search/testIds.ts","views/Search/RadioFilter.tsx","views/Search/util.ts","views/Search/useSearchParam.ts","views/Search/useUpdateSearchParam.ts","views/Search/CDKFilter.tsx","views/Search/CheckboxFilter.tsx","views/Search/KeywordsFilter.tsx","views/Search/LanguageFilter.tsx","views/Search/TagFilter.tsx","views/Search/FilterPanel.tsx","views/Search/ArrowButton.tsx","views/Search/GoToPage.tsx","views/Search/PageControls.tsx","views/Search/SearchBar.tsx","views/Search/SearchDetails.tsx","views/Search/SortFilter.tsx","views/Search/SortAndFilterDrawer.tsx","views/Search/SortedBy.tsx","components/PackageList/WideCardList.tsx","components/PackageList/PackageList.tsx","views/Search/SearchResults.tsx","views/Search/Search.tsx"],"sourcesContent":["import { Stack, Image, Text, useColorModeValue } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\ninterface HighlightProps {\n label: string;\n color?: string;\n icon?: string;\n}\n\nexport const Highlight: FunctionComponent<HighlightProps> = ({\n label,\n color,\n icon,\n}: HighlightProps) => {\n const brightness = useColorModeValue(\"none\", \"brightness(1.75)\");\n return (\n <Stack align=\"center\" direction=\"row\" filter={brightness} spacing={2}>\n <Image alt={`${label} icon`} src={icon} w={4} />\n <Text color={color} fontWeight=\"bold\">\n {label}\n </Text>\n </Stack>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<\n LanguageSupportTooltipProps\n> = ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n const langName = LANGUAGE_NAME_MAP[language];\n\n const message = isSupported\n ? `Click to view documentation in ${langName}`\n : `Documentation support for ${langName} is coming soon!`;\n\n return (\n <Tooltip hasArrow label={message} placement=\"top-start\">\n <span>{children}</span>\n </Tooltip>\n );\n};\n","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"downloads\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"comment\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text, Tooltip } from \"@chakra-ui/react\";\nimport { formatDistanceToNowStrict } from \"date-fns\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\nimport { useStats } from \"../../hooks/useStats\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\n\ninterface DetailProps {\n \"data-testid\": string;\n tooltip?: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n tooltip,\n value,\n}) => (\n <Tooltip hasArrow isDisabled={!tooltip} label={tooltip} placement=\"left\">\n {/* zIndex required to allow tooltip to display due to card link overlay */}\n <Text data-testid={dataTestid} fontSize=\"xs\" zIndex={1}>\n {value}\n </Text>\n </Tooltip>\n);\n\nexport const Details: FunctionComponent = () => {\n const {\n author,\n metadata: { date },\n name,\n } = usePackageCard();\n\n const { data } = useStats();\n const downloads: number | undefined = data?.packages?.[name]?.downloads?.npm;\n\n const authorName = typeof author === \"string\" ? author : author.name;\n const publishDate = new Date(date);\n\n return (\n <>\n {downloads !== undefined && (\n <Detail\n data-testid={testIds.downloads}\n tooltip=\"Download numbers are periodically sourced from the npm registry\"\n value={`${downloads.toLocaleString()} weekly downloads`}\n />\n )}\n <Detail\n data-testid={testIds.published}\n value={\n <Time\n date={publishDate}\n fontSize=\"xs\"\n formattedDate={formatDistanceToNowStrict(publishDate, {\n addSuffix: true,\n })}\n />\n }\n />\n <Detail\n data-testid={testIds.author}\n value={\n <>\n By{\" \"}\n <NavLink\n color=\"link\"\n to={getSearchPath({\n query: authorName,\n })}\n >\n {authorName}\n </NavLink>\n </>\n }\n />\n </>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport const EditorsNote: FunctionComponent<{ comment?: string }> = ({\n comment,\n}) => {\n return (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text as=\"span\" color=\"blue.500\" fontWeight=\"bold\">\n Editor's note:{\" \"}\n </Text>\n {comment}\n </Text>\n );\n};\n","import {\n Flex,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { EditorsNote } from \"./EditorsNote\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { CDKTypeBadge } from \"../CDKType\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const {\n dataEvent,\n description,\n comment,\n constructFrameworks,\n name,\n version,\n } = usePackageCard();\n\n return (\n <>\n <LinkOverlay\n as={Link}\n data-event={\n dataEvent ? eventName(dataEvent, \"Package Card\", name) : undefined\n }\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <Flex align=\"center\">\n <CDKTypeBadge\n constructFrameworks={constructFrameworks}\n mr={2}\n zIndex={1}\n />\n <ChakraHeading\n as=\"h3\"\n color=\"textPrimary\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"normal\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\n {comment ? (\n <EditorsNote comment={comment} />\n ) : (\n <Text\n color=\"textPrimary\"\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n )}\n </>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { usePackageCard } from \"./PackageCard\";\nimport { highlightsFrom } from \"../../util/package\";\nimport { Highlight as HighlightComponent } from \"../Highlight\";\n\nexport const Highlight: FunctionComponent = () => {\n const { packageTags = [] } = usePackageCard()?.metadata ?? {};\n const [highlight] = highlightsFrom(packageTags);\n\n if (!highlight) return null;\n\n return (\n <Box fontSize=\"xs\">\n <HighlightComponent {...highlight} />\n </Box>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages?: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { usePackageCard } from \"./PackageCard\";\nimport { PackageLanguages } from \"../PackageLanguages\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { FunctionComponent } from \"react\";\nimport { usePackageCard } from \"./PackageCard\";\nimport { tagObjectsFrom } from \"../../util/package\";\nimport { PackageTag } from \"../PackageTag\";\n\nexport const Tags: FunctionComponent = () => {\n const {\n keywords = [],\n metadata: { packageTags = [] },\n } = usePackageCard();\n\n const tags = tagObjectsFrom({\n packageTags,\n keywords,\n });\n\n return (\n <>\n {tags.slice(0, 10).map(({ id, keyword: { label, color } = {} }) => (\n <PackageTag key={id} value={id} variant={color}>\n {label}\n </PackageTag>\n ))}\n </>\n );\n};\n","import { Flex, Grid, LinkBox, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"hoverPrimary\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"bgSecondary\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"textPrimary\"\n data-testid={testIds.wideContainer}\n h=\"full\"\n minH=\"12.5rem\"\n templateColumns={{ base: \"1fr\", lg: \"1fr 14rem\" }}\n w=\"full\"\n >\n {/* Top / Left side of card */}\n <Flex\n direction=\"column\"\n justify=\"space-between\"\n overflow=\"hidden\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={3}>\n <Heading />\n </Stack>\n\n <Flex align=\"center\" sx={{ gap: \"0.5rem\" }} wrap=\"wrap\">\n <Tags />\n </Flex>\n </Flex>\n\n {/* Bottom / Right side of card */}\n <Flex\n align={{ base: \"end\", lg: \"initial\" }}\n borderLeft={{ lg: \"base\" }}\n borderTop={{ base: \"base\", lg: \"none\" }}\n direction={{ base: \"row\", lg: \"column\" }}\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={1}>\n <Highlight />\n <Stack spacing={1}>\n <Details />\n </Stack>\n </Stack>\n\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\n </Flex>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\nimport { ExtendedCatalogPackage } from \"../../api/catalog-search\";\n\nexport interface PackageCardProps {\n \"data-event\"?: string;\n pkg: ExtendedCatalogPackage;\n variant?: PackageCardType;\n}\n\ninterface PackageCardState extends ExtendedCatalogPackage {\n comment?: string;\n dataEvent?: string;\n}\n\nconst PackageCardContext = createContext<PackageCardState | null>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n \"data-event\": dataEvent,\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={{ ...pkg, dataEvent }}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ keywords: [value] })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","export const pageInfo = {\n contribute: {\n event: {\n name: \"Contribute Load\",\n },\n },\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\n// Should be the same as the \"real\" CSP, except most things come from HTTP\n// instead of HTTPS (because it is protocol-relative, and the dev site is\n// served over plain HTTP).\nconst csp = [\n \"default-src 'self' 'unsafe-inline' http://*.awsstatic.com;\",\n \"connect-src 'self' https://*.shortbread.aws.dev http://*.shortbread.aws.dev http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"frame-src http://aws.demdex.net http://dpm.demdex.net;\",\n \"img-src 'self' https://* http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"object-src 'none';\",\n \"style-src 'self' 'unsafe-inline';\",\n].join(\" \");\n\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 feedUrls = useConfigValue(\"feeds\") || [];\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 content={csp} httpEquiv=\"Content-Security-Policy\" />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n {feedUrls.map(({ url, mimeType }) => (\n <link href={url} key={url} rel=\"alternate\" type={mimeType} />\n ))}\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, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport type TimeOptions = {\n date: Date;\n format?: string;\n formattedDate?: string;\n};\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, formattedDate, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {formattedDate ?? format(date, formatString ?? \"\")}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import type { Config } from \"../../api/config\";\nimport { useConfig } from \"../../contexts/Config\";\n\nexport const useConfigValue = <T extends keyof Config>(key: T) => {\n const { data } = useConfig();\n return (data ?? {})[key];\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","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 { PackageHighlight, PackageTagConfig } from \"../api/config\";\nimport { KEYWORD_IGNORE_LIST } from \"../constants/keywords\";\n\nexport interface TagObject extends PackageTagConfig {}\n\n/**\n * Reduces package tags to only return highlight tags\n */\nexport const highlightsFrom = (packageTags?: PackageTagConfig[]) => {\n if (!packageTags || packageTags.length < 1) return [];\n\n return packageTags.reduce(\n (accum: PackageHighlight[], tag: PackageTagConfig): PackageHighlight[] => {\n if (tag.highlight) {\n return [...accum, tag.highlight];\n }\n\n return accum;\n },\n []\n );\n};\n\n/**\n * Maps packageTags to an array of TagObjects, which can be rendered by the PackageTags Component\n */\nexport const mapPackageTags = (\n packageTags?: PackageTagConfig[]\n): TagObject[] => {\n return (packageTags ?? [])\n .filter((tag) => {\n return Boolean(tag.keyword?.label);\n })\n .map((tag) => ({\n ...tag,\n id: tag.keyword?.label!,\n }));\n};\n\n/**\n * Maps keywords to an array of TagObjects, which can be rendered by the PackageTags component\n */\nexport const mapPackageKeywords = (keywords?: string[]): TagObject[] => {\n if (!keywords || keywords.length < 1) return [];\n\n return keywords\n .filter((label) => Boolean(label) && !KEYWORD_IGNORE_LIST.has(label))\n .map((label) => ({\n id: label,\n keyword: {\n label,\n },\n }));\n};\n\n/**\n * Maps packageTags and keywords to a list of TagObjects, using mapPackageTags and mapPackageKeywords\n */\nexport const tagObjectsFrom = ({\n packageTags,\n keywords,\n}: {\n packageTags?: PackageTagConfig[];\n keywords?: string[];\n}): TagObject[] => {\n const tagObjects = new Array<TagObject>();\n const tagLabels = new Set<string>();\n\n for (const tag of [\n ...mapPackageTags(packageTags),\n ...mapPackageKeywords(keywords),\n ]) {\n const label = tag.keyword!.label.toLowerCase();\n if (!tagLabels.has(label)) {\n tagObjects.push(tag);\n tagLabels.add(label);\n }\n }\n\n return tagObjects;\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport type { QueryParamKey } from \"../../constants/url\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nconst LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n\nexport const SORT_RENDER_MAP = {\n [CatalogSearchSort.NameAsc]: \"A-Z\",\n [CatalogSearchSort.NameDesc]: \"Z-A\",\n [CatalogSearchSort.PublishDateAsc]: \"Oldest\",\n [CatalogSearchSort.PublishDateDesc]: \"Recently updated\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n\nconst searchEvent: typeof eventName = (...e) => eventName(\"Search\", ...e);\n\nexport const SEARCH_ANALYTICS = {\n FILTERS: searchEvent(\"Filters\"),\n RESULTS: searchEvent(\"Results\"),\n SEARCH: searchEvent(\"Search\"),\n SORT: searchEvent(\"Sort\"),\n};\n","import { QuestionIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Heading,\n Text,\n Popover,\n PopoverTrigger,\n PopoverBody,\n PopoverArrow,\n PopoverContent,\n useBreakpointValue,\n PlacementWithLogical,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface FilterHeadingProps {\n name: string;\n hint?: string;\n}\n\nexport const FilterHeading: FunctionComponent<FilterHeadingProps> = ({\n name,\n hint,\n}) => {\n const placement = useBreakpointValue<PlacementWithLogical>({\n base: \"auto\",\n md: \"right\",\n });\n\n return (\n <Flex align=\"center\" mb={1}>\n <Heading as=\"h3\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement={placement} strategy=\"fixed\">\n <PopoverTrigger>\n <Flex\n aria-label={`Hint: ${name}`}\n as=\"button\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Popover\")}\n ml={2}\n >\n <QuestionIcon h={3.5} w={3.5} />\n </Flex>\n </PopoverTrigger>\n <PopoverContent\n bg=\"gray.700\"\n borderRadius=\"base\"\n color=\"white\"\n fontSize=\"sm\"\n mx={{ base: \"1rem\", md: \"initial\" }}\n shadow=\"whiteAlpha.300\"\n >\n <PopoverArrow bg=\"gray.700\" />\n <PopoverBody>\n <Text>{hint}</Text>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n ) : null}\n </Flex>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nexport default createTestIds(\"searchRedesign\", [\n \"page\",\n // Results\n \"searchDetails\",\n \"nextPage\",\n \"prevPage\",\n \"goToPage\",\n // Sorting\n \"sortButton\",\n \"sortDropdown\",\n \"sortItem\",\n // Filters Panel\n \"filtersPanel\",\n \"cdkTypeFilter\",\n \"cdkVersionFilter\",\n \"filterItem\",\n \"languagesFilter\",\n] as const);\n","import { Radio, RadioGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface RadioFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n value?: string;\n onValueChange: (value: string) => void;\n options: {\n display: string;\n value: string;\n }[];\n}\n\nexport const RadioFilter: FunctionComponent<RadioFilterProps> = ({\n \"data-testid\": dataTestid,\n value: checkedValue,\n onValueChange,\n options,\n name,\n hint,\n}) => {\n return (\n <Stack data-testid={dataTestid} spacing={1}>\n <FilterHeading hint={hint} name={name} />\n <RadioGroup onChange={onValueChange} value={checkedValue}>\n <Stack spacing={1}>\n {options.map(({ display, value }) => {\n const dataEvent = eventName(\n SEARCH_ANALYTICS.FILTERS,\n name,\n \"Filter\",\n display\n );\n return (\n <Radio data-event={dataEvent} key={value} value={value}>\n <Text\n color=\"textTertiary\"\n data-event={dataEvent}\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n );\n })}\n </Stack>\n </RadioGroup>\n </Stack>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\n\nexport const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseQueryArray = <T extends string>(\n queryString: string | null\n) => {\n if (!queryString) return [];\n\n return decodeURIComponent(queryString).split(\",\") as T[];\n};\n\nconst getParamFromUrl = (key: string) => {\n if (typeof window === \"undefined\") return null;\n const queryParams = new URL(window.location.href).searchParams;\n return queryParams.get(key);\n};\n\nexport const getSearchUrlParams = () => {\n return {\n query: getParamFromUrl(QUERY_PARAMS.SEARCH_QUERY) ?? \"\",\n keywords: parseQueryArray(getParamFromUrl(QUERY_PARAMS.KEYWORDS)),\n cdkType: (getParamFromUrl(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined,\n cdkMajor: (() => {\n const cdkMajorParam = getParamFromUrl(QUERY_PARAMS.CDK_MAJOR);\n return cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n })(),\n languages: parseQueryArray(\n getParamFromUrl(QUERY_PARAMS.LANGUAGES)\n ) as Language[],\n offset: toNum(getParamFromUrl(QUERY_PARAMS.OFFSET) ?? \"\"),\n sort:\n (getParamFromUrl(QUERY_PARAMS.SORT) as CatalogSearchSort) ?? undefined,\n tags: parseQueryArray(getParamFromUrl(QUERY_PARAMS.TAGS)),\n };\n};\n","import { useMemo } from \"react\";\nimport { parseQueryArray, toNum } from \"./util\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\nconst useSearchParam = <T = string | null>(\n key: string,\n transform?: (param: string | null) => T\n): T => {\n const queryParams = useQueryParams();\n const qp = queryParams.get(key);\n\n return useMemo(\n () => (transform ? transform(qp) : (qp as unknown as T)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [qp]\n );\n};\n\nexport const useCdkType = () => {\n const cdkType: CDKType | undefined =\n useSearchParam(QUERY_PARAMS.CDK_TYPE) ?? undefined;\n\n return cdkType;\n};\n\nexport const useCdkMajor = () => {\n const cdkMajor: number | undefined = useSearchParam(\n QUERY_PARAMS.CDK_MAJOR,\n (p) => (p ? toNum(p) : undefined)\n );\n\n return cdkMajor;\n};\n\nexport const useKeywords = () => {\n const keywords: string[] = useSearchParam(\n QUERY_PARAMS.KEYWORDS,\n parseQueryArray\n );\n\n return keywords;\n};\n\nexport const useLanguages = () => {\n const languages: Language[] = useSearchParam(\n QUERY_PARAMS.LANGUAGES,\n parseQueryArray\n ) as Language[];\n\n return languages;\n};\n\nexport const useOffset = () => {\n const offset = useSearchParam(QUERY_PARAMS.OFFSET, (o) => toNum(o ?? \"\"));\n return offset;\n};\n\nexport const useSearchQuery = () => {\n const query: string = useSearchParam(QUERY_PARAMS.SEARCH_QUERY) ?? \"\";\n return query;\n};\n\nexport const useSort = () => {\n const sort: CatalogSearchSort | undefined =\n useSearchParam(QUERY_PARAMS.SORT) ?? undefined;\n return sort;\n};\n\nexport const useTags = () => {\n const tags: string[] = useSearchParam(QUERY_PARAMS.TAGS, parseQueryArray);\n return tags;\n};\n","import { useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { getSearchUrlParams } from \"./util\";\nimport { getSearchPath } from \"../../util/url\";\n\nexport const useUpdateSearchParam = () => {\n const { push } = useHistory();\n\n return useCallback(\n (p?: Partial<Parameters<typeof getSearchPath>[0]>) => {\n const { offset, ...params } = p ?? {};\n\n push(\n getSearchPath({\n ...getSearchUrlParams(),\n ...params,\n offset: offset ?? 0,\n })\n );\n },\n [push]\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport testIds from \"./testIds\";\nimport { useCdkMajor, useCdkType } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogConstructFrameworkMeta } from \"../../api/catalog-search\";\nimport { CDKType, CDKTYPE_NAME_MAP } from \"../../constants/constructs\";\nimport { useSearchContext } from \"../../contexts/Search\";\n\ntype CDKOptions = Partial<{\n [key in CDKType]: CatalogConstructFrameworkMeta & {\n display: string;\n value: key;\n };\n}>;\n\nexport const CDKFilter: FunctionComponent = () => {\n const cdkType = useCdkType();\n const cdkMajor = useCdkMajor();\n\n const updateSearch = useUpdateSearchParam();\n\n const searchAPI = useSearchContext()!;\n\n // Options with less than one package will be omitted\n const cdkOptions = useMemo(() => {\n const cdkTypes = searchAPI.constructFrameworks;\n const options = Object.entries(cdkTypes).reduce((opts, [name, meta]) => {\n if (meta.pkgCount < 1) {\n return opts;\n }\n\n return {\n ...opts,\n [name]: {\n display: CDKTYPE_NAME_MAP[name as CDKType],\n value: name,\n ...meta,\n },\n };\n }, {});\n\n return Object.keys(options).length ? (options as CDKOptions) : undefined;\n }, [searchAPI]);\n\n const majorsOptions = useMemo(() => {\n if (!cdkOptions || !cdkType) return undefined;\n const majorVersions = cdkOptions[cdkType]?.majorVersions;\n\n if (!majorVersions) return undefined;\n\n return [...majorVersions]\n .sort((a, b) => a - b)\n .map((value) => ({\n value: value.toString(),\n display: `${CDKTYPE_NAME_MAP[cdkType]} v${value}`,\n }));\n }, [cdkOptions, cdkType]);\n\n if (!cdkOptions) {\n return null;\n }\n\n const onCdkTypeChange = (type: string) => {\n const cdk = type as CDKType;\n updateSearch({ cdkType: type ? cdk : undefined, cdkMajor: undefined });\n };\n\n const onCdkMajorChange = (major: string) => {\n let majorNum: number | undefined = undefined;\n\n if (major) {\n majorNum = parseInt(major, 10);\n }\n\n updateSearch({ cdkMajor: majorNum });\n };\n\n return (\n <>\n <RadioFilter\n data-testid={testIds.cdkTypeFilter}\n hint=\"Choose the right CDK for your IaC technology: AWS CDK for AWS CloudFormation, CDKTF for Terraform, or CDK8s for Kubernetes.\"\n name=\"CDK Type\"\n onValueChange={onCdkTypeChange}\n options={[\n { display: \"Any CDK Type\", value: \"\" },\n ...Object.values(cdkOptions),\n ]}\n value={cdkType ?? \"\"}\n />\n {/* No point in showing major versions if only a single one is available */}\n {!!(majorsOptions && majorsOptions.length > 1) && (\n <RadioFilter\n data-testid={testIds.cdkVersionFilter}\n hint=\"Choose the major version of the CDK you're using to see only constructs that will work with that version.\"\n name=\"CDK Major Version\"\n onValueChange={onCdkMajorChange}\n options={[\n { display: \"Any Major Version\", value: \"\" },\n ...majorsOptions,\n ]}\n value={cdkMajor?.toString() ?? \"\"}\n />\n )}\n </>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Button,\n Collapse,\n Checkbox,\n Stack,\n Text,\n Tooltip,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\nimport { clickEvent, eventName, useAnalytics } from \"../../contexts/Analytics\";\n\ninterface CheckboxOption {\n display: string;\n value: string;\n isDisabled?: boolean;\n disabledHint?: string;\n}\n\ninterface CheckboxItemProps extends CheckboxOption {\n onChange: () => void;\n isChecked: boolean;\n}\n\nexport interface CheckboxFilterProps extends FilterHeadingProps {\n /**\n * Test ID to select checkbox in tests\n */\n \"data-testid\"?: string;\n /**\n * Number of items that can be initially shown\n */\n initialItemCount?: number;\n /**\n * Defines checkbox items\n */\n options: CheckboxOption[];\n /**\n * Selected values\n */\n values: string[];\n /**\n * Callback triggered when an item is clicked\n */\n onValueChange: (value: string) => void;\n}\n\nconst CheckboxItem: FunctionComponent<CheckboxItemProps> = ({\n display,\n value,\n isDisabled,\n disabledHint,\n isChecked,\n onChange,\n}) => (\n <Checkbox\n isChecked={isChecked}\n isDisabled={isDisabled}\n key={value}\n onChange={onChange}\n >\n <Tooltip\n hasArrow\n isDisabled={!isDisabled && !disabledHint}\n label={disabledHint}\n placement=\"right\"\n >\n <Text\n color=\"textTertiary\"\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Tooltip>\n </Checkbox>\n);\n\nexport const CheckboxFilter: FunctionComponent<CheckboxFilterProps> = ({\n \"data-testid\": dataTestid,\n initialItemCount,\n hint,\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const collapse = useDisclosure();\n const { trackCustomEvent } = useAnalytics();\n\n const getOnChange = (item: CheckboxOption) => () => {\n trackCustomEvent(\n clickEvent({\n name: eventName(SEARCH_ANALYTICS.FILTERS, name, \"Filter\", item.display),\n })\n );\n onValueChange(item.value);\n };\n\n let alwaysShow: typeof options = options;\n let showWhenExpanded: typeof options = [];\n\n if (initialItemCount) {\n alwaysShow = options.slice(0, initialItemCount);\n showWhenExpanded = options.slice(initialItemCount, options.length);\n }\n\n const isExpandible = showWhenExpanded.length > 0;\n\n return (\n <Flex data-testid={dataTestid} direction=\"column\">\n <FilterHeading hint={hint} name={name} />\n <Stack mt={1} spacing={1}>\n {alwaysShow.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n {isExpandible && (\n <Collapse animateOpacity in={collapse.isOpen} unmountOnExit>\n <Stack spacing={1}>\n {showWhenExpanded.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n </Stack>\n </Collapse>\n )}\n </Stack>\n {isExpandible && (\n <Flex align=\"start\" mt={1}>\n <Button\n color=\"textTertiary\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Show More\")}\n fontWeight=\"normal\"\n leftIcon={collapse.isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n onClick={collapse.onToggle}\n size=\"sm\"\n textAlign=\"left\"\n variant=\"link\"\n w=\"auto\"\n >\n {collapse.isOpen\n ? `Show fewer options (${alwaysShow.length})`\n : `Show more options (${showWhenExpanded.length})`}\n </Button>\n </Flex>\n )}\n </Flex>\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport testIds from \"./testIds\";\nimport { useKeywords } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { useSearchContext } from \"../../contexts/Search\";\n\nexport const KeywordsFilter: FunctionComponent = () => {\n const keywords = useKeywords();\n const keywordMap = useSearchContext()!.keywords;\n const updateSearch = useUpdateSearchParam();\n\n const onKeywordChange = (keyword: string) => {\n updateSearch({\n keywords: keywords.includes(keyword)\n ? keywords.filter((k) => k !== keyword)\n : [...keywords, keyword],\n });\n };\n\n const keywordOptions = useMemo(() => {\n const baseOptions = [...keywordMap.entries()]\n .sort(([, count1], [, count2]) => {\n return count1 < count2 ? 1 : -1;\n })\n .filter(([keyword]) => !keywords.includes(keyword))\n .map(([keyword]) => ({\n display: keyword,\n value: keyword,\n }))\n .slice(0, 25);\n\n const keywordsNotInOptions = keywords.filter(\n (k) => !baseOptions.some((opt) => opt.value === k)\n );\n\n return [\n ...keywordsNotInOptions.map((k) => ({ display: k, value: k })),\n ...baseOptions,\n ];\n }, [keywordMap, keywords]);\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Focus the results by choosing one or more keywords reflecting the kind of construct you're looking for. Keywords are provided by construct authors.\"\n initialItemCount={5}\n name=\"Keywords\"\n onValueChange={onKeywordChange}\n options={keywordOptions}\n values={keywords}\n />\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport testIds from \"./testIds\";\nimport { useLanguages } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nconst languageOptions = Object.entries(LANGUAGE_NAME_MAP)\n .map(([key, value]) => ({\n display: value,\n value: key,\n ...(TEMP_SUPPORTED_LANGUAGES.has(key as Language)\n ? { isDisabled: false }\n : {\n isDisabled: true,\n disabledHint: `${\n LANGUAGE_NAME_MAP[key as Language]\n } support is coming soon!`,\n }),\n }))\n .sort((l1, l2) => {\n // Push disabled languages to back of list\n return l1.isDisabled > l2.isDisabled ? 1 : -1;\n });\n\nexport const LanguageFilter: FunctionComponent = () => {\n const languages = useLanguages();\n\n const updateSearch = useUpdateSearchParam();\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n updateSearch({\n languages: languages.includes(language)\n ? languages.filter((l) => l !== language)\n : [...languages, language],\n });\n };\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Choose one or more languages. Results include constructs for use with at least one of the selected languages.\"\n name=\"Programming Language\"\n onValueChange={onLanguagesChange}\n options={languageOptions}\n values={languages}\n />\n );\n};\n","import { FunctionComponent, useCallback, useMemo } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useTags } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { PackageTagConfig, TagGroupConfig } from \"../../api/config\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\n\ninterface FilterGroup extends Partial<TagGroupConfig> {\n id: string;\n tags: PackageTagConfig[];\n}\ninterface FilterGroups {\n [group: string]: FilterGroup;\n}\n\n/**\n * Creates a plain object map of FilterGroups keyed by group id\n */\nexport const mapTagsToFilterGroups = (\n packageTags: PackageTagConfig[],\n tagGroupsMap: Map<string, TagGroupConfig>\n): FilterGroups => {\n return packageTags.reduce(\n (accum: FilterGroups, tag: PackageTagConfig): FilterGroups => {\n const groupIdOrName = tag.searchFilter?.groupBy;\n const customGroup = groupIdOrName\n ? tagGroupsMap.get(groupIdOrName)\n : undefined;\n\n if (groupIdOrName && customGroup) {\n const entry = accum[groupIdOrName];\n if (entry) {\n entry.tags = [...entry.tags, tag];\n return accum;\n }\n\n return {\n ...accum,\n [groupIdOrName]: {\n ...customGroup,\n tags: [tag],\n },\n };\n }\n\n if (groupIdOrName) {\n return {\n ...accum,\n [groupIdOrName]: {\n id: groupIdOrName,\n tags: [...(accum?.[groupIdOrName]?.tags ?? []), tag],\n },\n };\n }\n return accum;\n },\n {}\n );\n};\n\nexport const TagFilter: FunctionComponent = () => {\n const packageTags = useConfigValue(\"packageTags\");\n const packageTagGroups = useConfigValue(\"packageTagGroups\");\n\n const tagFilterGroups: FilterGroups = useMemo(() => {\n const tagGroupsMap = new Map<string, TagGroupConfig>();\n packageTagGroups?.forEach((group) => {\n tagGroupsMap.set(group.id, group);\n });\n\n const filterableTags =\n packageTags?.filter((tag) => Boolean(tag.searchFilter)) ?? [];\n\n return mapTagsToFilterGroups(filterableTags, tagGroupsMap);\n }, [packageTags, packageTagGroups]);\n\n const tags = useTags();\n const updateSearch = useUpdateSearchParam();\n\n const onTagsChange = (tag: string) => {\n updateSearch({\n tags: tags.includes(tag) ? tags.filter((t) => t !== tag) : [...tags, tag],\n });\n };\n\n const getOnRadioTagChange = useCallback(\n (groupName: string) => {\n const groupTags = new Set(\n (tagFilterGroups[groupName]?.tags ?? []).map(({ id }) => id)\n );\n\n return (tag: string) => {\n const filteredTags = tags.filter((t) => !groupTags.has(t));\n\n updateSearch({\n tags: tag ? [...filteredTags, tag] : filteredTags,\n });\n };\n },\n [tagFilterGroups, tags, updateSearch]\n );\n\n return (\n <>\n {Object.values(tagFilterGroups).map(\n ({ filterType, id, label, tooltip, tags: tagItems }) => {\n const sharedProps = {\n hint: tooltip,\n name: label ?? id,\n options: tagItems.map((tag) => {\n return {\n display: tag.searchFilter!.display,\n value: tag.id,\n };\n }),\n };\n\n if (filterType === \"radio\") {\n return (\n <RadioFilter\n {...sharedProps}\n key={id}\n onValueChange={getOnRadioTagChange(id)}\n options={[\n { display: `Any ${sharedProps.name}`, value: \"\" },\n ...sharedProps.options,\n ]}\n value={tagItems.find((t) => tags.includes(t.id))?.id ?? \"\"}\n />\n );\n }\n\n return (\n <CheckboxFilter\n {...sharedProps}\n key={id}\n onValueChange={onTagsChange}\n values={tags}\n />\n );\n }\n )}\n </>\n );\n};\n","import { Heading, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { TagFilter } from \"./TagFilter\";\nimport testIds from \"./testIds\";\nimport { Card } from \"../../components/Card\";\n\nexport interface FilterPanelProps {}\n\n// Header height + section padding\nconst TOP_OFFSET = \"5.75rem\";\n\n/**\n * The desktop Resolution Filter Panel\n */\nexport const FilterPanel: FunctionComponent<FilterPanelProps> = () => {\n return (\n <Card\n borderRadius=\"sm\"\n data-testid={testIds.filtersPanel}\n display={{ base: \"none\", md: \"flex\" }}\n maxH={`calc(100vh - ${TOP_OFFSET} - 1.25rem)`}\n maxW=\"23rem\"\n minW=\"100%\"\n overflow=\"hidden auto\"\n p={4}\n pos=\"sticky\"\n top={TOP_OFFSET}\n zIndex=\"docked\"\n >\n <Stack color=\"textPrimary\" h=\"max-content\" spacing={4} top={4}>\n <Heading as=\"h2\" size=\"sm\">\n Filters\n </Heading>\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </Card>\n );\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface ArrowButtonProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n label: string;\n onClick?: () => void;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: Icon,\n label,\n onClick,\n}) => {\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n return <IconButton {...props} disabled={!onClick} onClick={onClick} />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { clickEvent, useAnalytics } from \"../../contexts/Analytics\";\n\nexport interface GoToPageProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n pageLimit,\n offset,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const { trackCustomEvent } = useAnalytics();\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n updateSearch({ offset: parseInt(inputValue) - 1 });\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n aria-label=\"Jump to page\"\n colorScheme=\"brand\"\n data-testid={dataTestid}\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n onFocus={() => {\n if (dataEvent) {\n trackCustomEvent(clickEvent({ name: dataEvent }));\n }\n }}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { GoToPage } from \"./GoToPage\";\nimport testIds from \"./testIds\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const goForward =\n offset < pageLimit ? () => updateSearch({ offset: offset + 1 }) : undefined;\n const goBack =\n offset > 0 ? () => updateSearch({ offset: offset - 1 }) : undefined;\n\n return (\n <Stack\n align=\"center\"\n direction=\"row\"\n justify=\"space-between\"\n maxW=\"18rem\"\n mx=\"auto\"\n spacing={4}\n w=\"full\"\n >\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Previous Page\")}\n data-testid={testIds.prevPage}\n icon={ChevronLeftIcon}\n label=\"Previous page button\"\n onClick={goBack}\n />\n <GoToPage\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Go to Page\")}\n data-testid={testIds.goToPage}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Next Page\")}\n data-testid={testIds.nextPage}\n icon={ChevronRightIcon}\n label=\"Next page button\"\n onClick={goForward}\n />\n </Stack>\n );\n};\n","import { FunctionComponent, useState } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { useSearchQuery } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { SearchBar as SearchBarComponent } from \"../../components/SearchBar\";\n\nexport const SearchBar: FunctionComponent = () => {\n const query = useSearchQuery();\n const updateSearch = useUpdateSearchParam();\n\n const [value, setValue] = useState(query ?? \"\");\n\n return (\n <SearchBarComponent\n bg=\"bgSecondary\"\n data-event={SEARCH_ANALYTICS.SEARCH}\n onChange={(e) => setValue(e.target.value)}\n onSubmit={(e) => {\n e.preventDefault();\n\n updateSearch({\n query: value,\n sort: undefined,\n });\n }}\n value={value}\n />\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport interface SearchDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n query?: string;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"strong\" color=\"textSecondary\">\n {children}\n </Text>\n);\n\nconst Count: FunctionComponent<{\n first: number;\n count: number;\n last: number;\n}> = ({ first, count, last }) => {\n if (!first && last >= count) {\n return (\n <>\n <Em>{count}</Em> of <Em>{count}</Em>\n </>\n );\n }\n\n return (\n <>\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em>\n </>\n );\n};\n\nexport const SearchDetails: FunctionComponent<SearchDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n query,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n const hasResults = count > 0;\n\n return (\n <Text data-testid={testIds.searchDetails}>\n {hasResults ? (\n <>\n Displaying <Count count={count} first={first} last={last} />{\" \"}\n {filtered ? \"search results\" : \"constructs\"}\n </>\n ) : (\n <>{filtered ? \"There were no search results\" : \"No constructs found\"}</>\n )}\n {query && (\n <>\n {\" for \"}\n <Em>{query}</Em>\n </>\n )}\n .{!hasResults && filtered && <> Try a different term.</>}\n </Text>\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\n\nexport const SortFilter: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const onSortChange = (newSort: string) => {\n updateSearch({\n sort: newSort ? (newSort as CatalogSearchSort) : undefined,\n });\n };\n\n return (\n <RadioFilter\n hint=\"Sets the order of search results\"\n name=\"Sorted By\"\n onValueChange={onSortChange}\n options={[\n { display: \"Relevance\", value: \"\" },\n ...Object.entries(SORT_RENDER_MAP).map(([value, display]) => ({\n display,\n value,\n })),\n ]}\n value={sort ?? \"\"}\n />\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Drawer,\n Stack,\n DrawerBody,\n DrawerHeader,\n DrawerOverlay,\n DrawerContent,\n DrawerCloseButton,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { SortFilter } from \"./SortFilter\";\nimport { TagFilter } from \"./TagFilter\";\n\n/**\n * The mobile filter Drawer (Bottomsheet in iOS terminology)\n */\nexport const SortAndFilterDrawer: FunctionComponent = () => {\n const drawer = useDisclosure();\n return (\n <>\n <Button\n colorScheme=\"brand\"\n display={{ md: \"none\" }}\n onClick={drawer.onOpen}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n Sorting and Filters\n </Button>\n <Drawer {...drawer} placement=\"bottom\">\n <DrawerOverlay />\n\n <DrawerContent color=\"textPrimary\" maxH=\"full\">\n <DrawerHeader borderBottom=\"base\">Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"textPrimary\" pb={4} spacing={4}>\n <SortFilter />\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Text,\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n Button,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS, SORT_RENDER_MAP } from \"./constants\";\nimport testIds from \"./testIds\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport const SortedBy: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const selected = sort ? SORT_RENDER_MAP[sort] : \"Relevance\";\n\n return (\n <Flex align=\"center\">\n <Text>Sorted by</Text>\n <Menu>\n <MenuButton\n as={Button}\n color=\"link\"\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Menu\")}\n data-testid={testIds.sortButton}\n ml={2}\n pl={2} // For some reason, the px shorthand doesn't work on this Button\n pr={2}\n py={1}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n {selected}\n </MenuButton>\n <MenuList data-testid={testIds.sortDropdown} minW=\"180\" zIndex=\"sticky\">\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", \"Relevance\")}\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => updateSearch({ sort: undefined })}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", display)}\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => updateSearch({ sort: value as CatalogSearchSort })}\n >\n {display}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n </Flex>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageListViewProps } from \"./PackageList\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n \"data-event\": dataEvent,\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n data-event={dataEvent}\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { WideCardList } from \"./WideCardList\";\nimport { ExtendedCatalogPackage } from \"../../api/catalog-search\";\nimport { PackageCardType } from \"../PackageCard\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n \"data-event\"?: string;\n items: ExtendedCatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n \"data-event\": dataEvent,\n cardView = PackageCardType.Wide,\n items,\n loading,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View data-event={dataEvent} items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { LIMIT, SEARCH_ANALYTICS } from \"./constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchBar } from \"./SearchBar\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\nimport {\n useCdkType,\n useCdkMajor,\n useKeywords,\n useLanguages,\n useOffset,\n useSearchQuery,\n useSort,\n useTags,\n} from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\n\nexport const SearchResults: FunctionComponent = () => {\n const updateSearch = useUpdateSearchParam();\n\n const offset = useOffset();\n const query = useSearchQuery();\n const keywords = useKeywords();\n const languages = useLanguages();\n const cdkMajor = useCdkMajor();\n const cdkType = useCdkType();\n const sort = useSort();\n const tags = useTags();\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit: LIMIT,\n query,\n keywords,\n languages,\n cdkMajor,\n cdkType,\n sort,\n tags,\n });\n\n // Resets the page number to 1 if query param offset is below 0, or to the last page if offset is higher than page count\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n updateSearch({ offset: 0 });\n } else {\n // Offset is too large, just take last page\n updateSearch({ offset: pageLimit });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\n\n // Scroll to top on page change\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [page]);\n\n return (\n <Page\n meta={{\n title: query || \"Search\",\n description: query\n ? `${results.length} results for ${query} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Stack direction=\"column\" maxW=\"100vw\" pb={4} px={4} spacing={4}>\n <SearchBar />\n\n <Stack\n align={{ base: \"start\", lg: \"center\" }}\n direction={{ base: \"column-reverse\", lg: \"row\" }}\n justify={{ base: \"initial\", lg: \"space-between\" }}\n spacing={4}\n >\n <SearchDetails\n count={results.length}\n filtered={!!query}\n limit={LIMIT}\n offset={offset}\n query={query}\n />\n\n <Box display={{ base: \"none\", md: \"initial\" }}>\n <SortedBy />\n </Box>\n\n <Box display={{ md: \"none\" }}>\n <SortAndFilterDrawer />\n </Box>\n </Stack>\n\n <PackageList data-event={SEARCH_ANALYTICS.RESULTS} items={page} />\n\n <Box w=\"full\">\n <PageControls offset={offset} pageLimit={pageLimit} />\n </Box>\n </Stack>\n </Page>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { FilterPanel } from \"./FilterPanel\";\nimport { SearchResults } from \"./SearchResults\";\nimport testIds from \"./testIds\";\nimport { Page } from \"../../components/Page\";\n\nexport const Search: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description: \"Search Construct Libraries for AWS CDK, CDK8s, and CDKTF\",\n }}\n pageName=\"search\"\n >\n <Grid\n data-testid={testIds.page}\n gap={4}\n h=\"full\"\n maxW=\"100%\"\n px={{ base: 0, md: 6 }}\n py={6}\n templateColumns={{ base: \"1fr\", md: \"auto 1fr\" }}\n templateRows=\"1fr\"\n >\n {/* Filter Panel Desktop */}\n <FilterPanel />\n\n {/* Results, Info, and Controls */}\n <SearchResults />\n </Grid>\n </Page>\n );\n};\n"],"names":["Highlight","_ref","label","color","icon","brightness","useColorModeValue","_jsxs","Stack","align","direction","filter","spacing","children","_jsx","Image","alt","src","w","Text","fontWeight","LanguageSupportTooltip","language","isSupported","TEMP_SUPPORTED_LANGUAGES","has","langName","LANGUAGE_NAME_MAP","message","Tooltip","hasArrow","placement","PackageCardType","createTestIds","Detail","dataTestid","tooltip","value","isDisabled","fontSize","zIndex","Details","_data$packages","_data$packages$name","_data$packages$name$d","author","metadata","date","name","usePackageCard","data","useStats","downloads","packages","npm","authorName","publishDate","Date","_Fragment","undefined","testIds","toLocaleString","published","Time","formattedDate","formatDistanceToNowStrict","addSuffix","NavLink","to","getSearchPath","query","EditorsNote","comment","lineHeight","noOfLines","as","Heading","currentLanguage","useLanguage","dataEvent","description","constructFrameworks","version","LinkOverlay","Link","eventName","getPackagePath","Flex","CDKTypeBadge","mr","ChakraHeading","title","wordBreak","_usePackageCard$metad","_usePackageCard","packageTags","highlight","highlightsFrom","Box","HighlightComponent","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","_ref2","_ref3","left","right","LANGUAGES","indexOf","map","_ref4","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","borderRadius","h","opacity","Languages","pkg","Tags","keywords","tags","tagObjectsFrom","slice","id","keyword","PackageTag","variant","WideCard","LinkBox","_hover","bg","Grid","border","boxShadow","wideContainer","minH","templateColumns","base","justify","overflow","p","sx","gap","wrap","borderLeft","borderTop","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","tagProps","Tag","textDecoration","TagLabel","pageInfo","contribute","event","home","faq","packageProfile","search","siteTerms","notFound","page","pageType","join","Page","meta","pageName","trackPageView","usePageView","useEffect","feedUrls","useConfigValue","suffix","formattedTitle","Helmet","process","content","charSet","url","mimeType","href","rel","type","property","forwardRef","ref","format","formatString","boxProps","dateTime","toISOString","displayName","key","useConfig","defaultLang","LOCAL_KEY","isValidLang","options","arguments","length","updateUrl","updateSaved","pathname","hash","useLocation","replace","useHistory","params","useQueryParams","langFromParams","get","QUERY_PARAMS","LANGUAGE","setLanguage","useState","_localStorage$getItem","storedLang","localStorage","getItem","getInitialLang","set","toString","update","useCallback","val","setItem","useMemo","URLSearchParams","reduce","accum","tag","mapPackageTags","_tag$keyword","Boolean","_tag$keyword2","mapPackageKeywords","KEYWORD_IGNORE_LIST","tagObjects","Array","tagLabels","Set","toLowerCase","push","add","SORT_RENDER_MAP","CatalogSearchSort","NameAsc","NameDesc","PublishDateAsc","PublishDateDesc","DownloadsDesc","DownloadsAsc","searchEvent","_len","e","_key","SEARCH_ANALYTICS","FILTERS","RESULTS","SEARCH","SORT","FilterHeading","hint","useBreakpointValue","mb","Popover","colorScheme","strategy","PopoverTrigger","ml","QuestionIcon","PopoverContent","mx","shadow","PopoverArrow","PopoverBody","RadioFilter","checkedValue","onValueChange","RadioGroup","onChange","display","Radio","filterItem","isTruncated","toNum","result","parseInt","parseQueryArray","queryString","decodeURIComponent","split","getParamFromUrl","window","URL","location","searchParams","getSearchUrlParams","_getParamFromUrl","_getParamFromUrl2","SEARCH_QUERY","KEYWORDS","cdkType","CDK_TYPE","cdkMajor","cdkMajorParam","CDK_MAJOR","offset","OFFSET","TAGS","useSearchParam","transform","qp","useCdkType","_useSearchParam","useCdkMajor","useKeywords","useLanguages","useSearchQuery","_useSearchParam2","useSort","_useSearchParam3","useTags","useUpdateSearchParam","CDKFilter","_cdkMajor$toString","updateSearch","searchAPI","useSearchContext","cdkOptions","cdkTypes","opts","pkgCount","CDKTYPE_NAME_MAP","majorsOptions","_cdkOptions$cdkType","majorVersions","a","b","cdkTypeFilter","values","cdkVersionFilter","major","majorNum","CheckboxItem","disabledHint","isChecked","Checkbox","CheckboxFilter","initialItemCount","checkedValues","collapse","useDisclosure","trackCustomEvent","useAnalytics","getOnChange","item","clickEvent","alwaysShow","showWhenExpanded","isExpandible","mt","_createElement","Collapse","animateOpacity","in","isOpen","unmountOnExit","Button","leftIcon","ChevronUpIcon","ChevronDownIcon","onClick","onToggle","textAlign","KeywordsFilter","keywordMap","keywordOptions","baseOptions","count1","count2","k","some","opt","languagesFilter","languageOptions","l1","l2","LanguageFilter","l","TagFilter","packageTagGroups","tagFilterGroups","_packageTags$filter","tagGroupsMap","Map","forEach","group","mapTagsToFilterGroups","_tag$searchFilter","groupIdOrName","searchFilter","groupBy","customGroup","entry","_accum$groupIdOrName$","_accum$groupIdOrName","onTagsChange","t","getOnRadioTagChange","groupName","_tagFilterGroups$grou","_tagFilterGroups$grou2","groupTags","filteredTags","filterType","tagItems","sharedProps","_tagItems$find$id","_tagItems$find","find","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxH","maxW","minW","pos","top","ArrowButton","props","borderColor","IconButton","disabled","GoToPage","pageLimit","inputValue","setInputValue","onSubmit","preventDefault","Input","max","min","target","onFocus","PageControls","goForward","goBack","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","SearchBar","setValue","SearchBarComponent","Em","Count","first","count","last","SearchDetails","limit","filtered","hasResults","searchDetails","SortFilter","newSort","SortAndFilterDrawer","drawer","onOpen","rightIcon","Drawer","DrawerOverlay","DrawerContent","DrawerHeader","borderBottom","DrawerCloseButton","DrawerBody","pb","SortedBy","selected","Menu","MenuButton","sortButton","pl","pr","py","MenuList","sortDropdown","MenuItem","sortItem","listViews","items","PackageList","memo","cardView","loading","Center","Spinner","View","SearchResults","o","results","useCatalogResults","scrollTo","px","Search","templateRows"],"sourceRoot":""}
|