construct-hub-webapp 0.1.430 → 0.1.431
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/.gitattributes +1 -1
- package/README.md +49 -7
- package/build/asset-manifest.json +40 -40
- package/build/index.html +1 -1
- package/build/static/js/0.b43901fb.chunk.js +2 -0
- package/build/static/js/{0.740a33f8.chunk.js.map → 0.b43901fb.chunk.js.map} +1 -1
- package/build/static/js/1.81b10c86.chunk.js +2 -0
- package/build/static/js/1.81b10c86.chunk.js.map +1 -0
- package/build/static/js/10.e69e2f0e.chunk.js +2 -0
- package/build/static/js/10.e69e2f0e.chunk.js.map +1 -0
- package/build/static/js/11.b8a83830.chunk.js +2 -0
- package/build/static/js/11.b8a83830.chunk.js.map +1 -0
- package/build/static/js/12.bf7eae27.chunk.js +2 -0
- package/build/static/js/12.bf7eae27.chunk.js.map +1 -0
- package/build/static/js/13.ac5c7cfb.chunk.js +2 -0
- package/build/static/js/{13.6fe7d275.chunk.js.map → 13.ac5c7cfb.chunk.js.map} +1 -1
- package/build/static/js/14.c589f711.chunk.js +2 -0
- package/build/static/js/{14.079eb5e1.chunk.js.map → 14.c589f711.chunk.js.map} +1 -1
- package/build/static/js/{15.c3f18810.chunk.js → 15.6ef33063.chunk.js} +3 -3
- package/build/static/js/{15.c3f18810.chunk.js.LICENSE.txt → 15.6ef33063.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/{15.c3f18810.chunk.js.map → 15.6ef33063.chunk.js.map} +1 -1
- package/build/static/js/{16.84214b0e.chunk.js → 16.f993fdf0.chunk.js} +2 -2
- package/build/static/js/{16.84214b0e.chunk.js.map → 16.f993fdf0.chunk.js.map} +1 -1
- package/build/static/js/4.b412ae2d.chunk.js +3 -0
- package/build/static/js/{4.862b4ce7.chunk.js.LICENSE.txt → 4.b412ae2d.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/4.b412ae2d.chunk.js.map +1 -0
- package/build/static/js/5.d910df6d.chunk.js +3 -0
- package/build/static/js/{5.0e0c97cb.chunk.js.LICENSE.txt → 5.d910df6d.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/5.d910df6d.chunk.js.map +1 -0
- package/build/static/js/6.6b255b13.chunk.js +2 -0
- package/build/static/js/6.6b255b13.chunk.js.map +1 -0
- package/build/static/js/7.e8271c60.chunk.js +2 -0
- package/build/static/js/7.e8271c60.chunk.js.map +1 -0
- package/build/static/js/8.a73bade7.chunk.js +2 -0
- package/build/static/js/8.a73bade7.chunk.js.map +1 -0
- package/build/static/js/9.09ca5564.chunk.js +2 -0
- package/build/static/js/9.09ca5564.chunk.js.map +1 -0
- package/build/static/js/main.7e490eeb.chunk.js +2 -0
- package/build/static/js/main.7e490eeb.chunk.js.map +1 -0
- package/build/static/js/{runtime-main.2c215cbd.js → runtime-main.4562ca7b.js} +2 -2
- package/build/static/js/{runtime-main.2c215cbd.js.map → runtime-main.4562ca7b.js.map} +1 -1
- package/package.json +8 -7
- package/build/static/js/0.740a33f8.chunk.js +0 -2
- package/build/static/js/1.64a9b795.chunk.js +0 -2
- package/build/static/js/1.64a9b795.chunk.js.map +0 -1
- package/build/static/js/10.5f66f973.chunk.js +0 -2
- package/build/static/js/10.5f66f973.chunk.js.map +0 -1
- package/build/static/js/11.d6a2b77e.chunk.js +0 -2
- package/build/static/js/11.d6a2b77e.chunk.js.map +0 -1
- package/build/static/js/12.519faaaf.chunk.js +0 -2
- package/build/static/js/12.519faaaf.chunk.js.map +0 -1
- package/build/static/js/13.6fe7d275.chunk.js +0 -2
- package/build/static/js/14.079eb5e1.chunk.js +0 -2
- package/build/static/js/4.862b4ce7.chunk.js +0 -3
- package/build/static/js/4.862b4ce7.chunk.js.map +0 -1
- package/build/static/js/5.0e0c97cb.chunk.js +0 -3
- package/build/static/js/5.0e0c97cb.chunk.js.map +0 -1
- package/build/static/js/6.78d88d4c.chunk.js +0 -2
- package/build/static/js/6.78d88d4c.chunk.js.map +0 -1
- package/build/static/js/7.a053380e.chunk.js +0 -2
- package/build/static/js/7.a053380e.chunk.js.map +0 -1
- package/build/static/js/8.c99e08cd.chunk.js +0 -2
- package/build/static/js/8.c99e08cd.chunk.js.map +0 -1
- package/build/static/js/9.d40d7958.chunk.js +0 -2
- package/build/static/js/9.d40d7958.chunk.js.map +0 -1
- package/build/static/js/main.6de5586a.chunk.js +0 -2
- package/build/static/js/main.6de5586a.chunk.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","util/package.ts","hooks/useQueryParams/useQueryParams.ts","hooks/useConfigValue/useConfigValue.ts","hooks/useLanguage/useLanguage.ts","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/EditorsNote.tsx","components/PackageCard/Heading.tsx","components/PackageCard/Highlight.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/Tags.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/Time/Time.tsx","components/Highlight/Highlight.tsx","components/PackageTag/PackageTag.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","views/SearchRedesign/FilterHeading.tsx","views/SearchRedesign/testIds.ts","views/SearchRedesign/RadioFilter.tsx","views/SearchRedesign/constants.ts","views/SearchRedesign/util.ts","views/SearchRedesign/SearchState.tsx","views/SearchRedesign/CDKFilter.tsx","views/SearchRedesign/CheckboxFilter.tsx","views/SearchRedesign/KeywordsFilter.tsx","views/SearchRedesign/LanguageFilter.tsx","views/SearchRedesign/TagFilter.tsx","views/SearchRedesign/FilterPanel.tsx","components/PackageList/PackageList.tsx","components/PackageList/WideCardList.tsx","views/SearchRedesign/ArrowButton.tsx","views/SearchRedesign/GoToPage.tsx","views/SearchRedesign/PageControls.tsx","views/SearchRedesign/SearchDetails.tsx","views/SearchRedesign/SortFilter.tsx","views/SearchRedesign/SortAndFilterDrawer.tsx","views/SearchRedesign/SortedBy.tsx","views/SearchRedesign/SearchResults.tsx","views/SearchRedesign/SearchRedesign.tsx"],"names":["pageInfo","contribute","event","name","home","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","join","Helmet","process","content","charSet","property","highlightsFrom","packageTags","length","reduce","accum","tag","highlight","tagObjectsFrom","keywords","tagObjects","Array","tagLabels","Set","filter","Boolean","keyword","label","map","id","mapPackageTags","KEYWORD_IGNORE_LIST","has","mapPackageKeywords","toLowerCase","push","add","useQueryParams","useLocation","useMemo","URLSearchParams","useConfigValue","key","data","useConfig","defaultLang","Language","TypeScript","LOCAL_KEY","isValidLang","lang","TEMP_SUPPORTED_LANGUAGES","getInitialLang","langFromParams","storedLang","localStorage","getItem","useLanguage","options","updateUrl","updateSaved","pathname","hash","useHistory","replace","params","get","QUERY_PARAMS","LANGUAGE","useState","language","setLanguage","set","toString","update","useCallback","val","setItem","PackageCardType","testIds","createTestIds","Detail","dataTestid","tooltip","value","hasArrow","isDisabled","placement","fontSize","zIndex","Details","usePackageCard","author","date","metadata","useStats","downloads","packages","npm","authorName","publishDate","Date","undefined","toLocaleString","published","Time","formattedDate","formatDistanceToNowStrict","addSuffix","NavLink","color","to","getSearchPath","query","EditorsNote","comment","lineHeight","noOfLines","as","fontWeight","Heading","currentLanguage","constructFramework","version","cdkType","cdkVersion","majorVersion","Link","getPackagePath","align","CDKType","mr","wordBreak","Highlight","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","indexOf","info","isSupportedByLibrary","includes","isSupportedByConstructHub","Icon","icon","borderRadius","h","opacity","w","LanguageSupportTooltip","Languages","pkg","Tags","tags","slice","PackageTag","variant","WideCard","_hover","bg","border","boxShadow","wideContainer","minH","templateColumns","base","direction","justify","p","sx","gap","spacing","wrap","borderLeft","borderTop","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","forwardRef","ref","formatString","format","boxProps","dateTime","toISOString","displayName","alt","src","tagProps","textDecoration","isSupported","langName","LANGUAGE_NAME_MAP","message","FilterHeading","hint","useBreakpointValue","mb","colorScheme","strategy","ml","mx","shadow","RadioFilter","checkedValue","onValueChange","onChange","display","filterItem","isTruncated","SORT_RENDER_MAP","CatalogSearchSort","NameAsc","NameDesc","PublishDateAsc","PublishDateDesc","DownloadsDesc","DownloadsAsc","toNum","result","parseInt","parseQueryArray","queryString","decodeURIComponent","split","SearchStateContext","useSearchState","state","Error","SearchStateProvider","queryParams","offset","OFFSET","SEARCH_QUERY","tagQuery","TAGS","keywordQuery","KEYWORDS","SORT","CDK_TYPE","cdkMajorParam","CDK_MAJOR","cdkMajor","searchAPI","useCatalogSearch","defaultCdkMajor","defaultCdkType","defaultKeywords","defaultLanguages","defaultQuery","defaultSort","defaultTags","setQuery","some","k","setKeywords","t","setTags","limit","CDKFilter","setCdkType","setCdkMajor","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","opts","pkgCount","CDKTYPE_NAME_MAP","majorsOptions","majorVersions","a","b","cdkTypeFilter","type","cdk","values","cdkVersionFilter","major","majorNum","CheckboxItem","disabledHint","isChecked","CheckboxFilter","initialItemCount","checkedValues","collapse","useDisclosure","getOnChange","alwaysShow","showWhenExpanded","isExpandible","mt","item","animateOpacity","in","isOpen","unmountOnExit","leftIcon","onClick","onToggle","textAlign","KeywordsFilter","keywordMap","keywordOptions","baseOptions","keywordsNotInOptions","opt","languagesFilter","languageOptions","l1","l2","LanguageFilter","setLanguages","l","TagFilter","tagFilterGroups","searchFilter","groupName","groupBy","onTagsChange","tagItems","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxH","maxW","minW","overflow","pos","top","listViews","items","PackageList","memo","cardView","loading","View","ArrowButton","getPageUrl","props","borderColor","disabled","GoToPage","pageLimit","inputValue","setInputValue","onSubmit","e","preventDefault","max","min","target","PageControls","nextOffset","prevOffset","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","Em","Count","first","count","last","SearchDetails","filtered","hasResults","searchDetails","SortFilter","setSort","newSort","SortAndFilterDrawer","drawer","onOpen","rightIcon","borderBottom","pb","SortedBy","selected","Button","sortButton","pl","pr","py","sortDropdown","sortItem","SearchResults","isFirstRender","useRef","onSearch","useCatalogResults","results","getUrl","q","current","window","scrollTo","px","SearchBar","onQueryChange","SearchRedesign","templateRows"],"mappings":"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","file":"static/js/8.a73bade7.chunk.js","sourcesContent":["export const pageInfo = {\n contribute: {\n event: {\n name: \"Contribute Load\",\n },\n },\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n // Should be the same as the \"real\" CSP, except most things come from HTTP\n // instead of HTTPS (because it is protocol-relative, and the dev site is\n // served over plain HTTP).\n const csp = [\n \"default-src 'self' 'unsafe-inline' http://*.awsstatic.com;\",\n \"connect-src 'self' https://*.shortbread.aws.dev http://*.shortbread.aws.dev http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"frame-src http://aws.demdex.net http://dpm.demdex.net;\",\n \"img-src 'self' https://* http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"object-src 'none';\",\n \"style-src 'self' 'unsafe-inline';\",\n ].join(\" \");\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta content={csp} httpEquiv=\"Content-Security-Policy\" />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { PackageHighlight, PackageTagConfig } from \"../api/config\";\nimport { KEYWORD_IGNORE_LIST } from \"../constants/keywords\";\n\nexport interface TagObject extends PackageTagConfig {}\n\n/**\n * Reduces package tags to only return highlight tags\n */\nexport const highlightsFrom = (packageTags?: PackageTagConfig[]) => {\n if (!packageTags || packageTags.length < 1) return [];\n\n return packageTags.reduce(\n (accum: PackageHighlight[], tag: PackageTagConfig): PackageHighlight[] => {\n if (tag.highlight) {\n return [...accum, tag.highlight];\n }\n\n return accum;\n },\n []\n );\n};\n\n/**\n * Maps packageTags to an array of TagObjects, which can be rendered by the PackageTags Component\n */\nexport const mapPackageTags = (\n packageTags?: PackageTagConfig[]\n): TagObject[] => {\n return (packageTags ?? [])\n .filter((tag) => {\n return Boolean(tag.keyword?.label);\n })\n .map((tag) => ({\n ...tag,\n id: tag.keyword?.label!,\n }));\n};\n\n/**\n * Maps keywords to an array of TagObjects, which can be rendered by the PackageTags component\n */\nexport const mapPackageKeywords = (keywords?: string[]): TagObject[] => {\n if (!keywords || keywords.length < 1) return [];\n\n return keywords\n .filter((label) => Boolean(label) && !KEYWORD_IGNORE_LIST.has(label))\n .map((label) => ({\n id: label,\n keyword: {\n label,\n },\n }));\n};\n\n/**\n * Maps packageTags and keywords to a list of TagObjects, using mapPackageTags and mapPackageKeywords\n */\nexport const tagObjectsFrom = ({\n packageTags,\n keywords,\n}: {\n packageTags?: PackageTagConfig[];\n keywords?: string[];\n}): TagObject[] => {\n const tagObjects = new Array<TagObject>();\n const tagLabels = new Set<string>();\n\n for (const tag of [\n ...mapPackageTags(packageTags),\n ...mapPackageKeywords(keywords),\n ]) {\n const label = tag.keyword!.label.toLowerCase();\n if (!tagLabels.has(label)) {\n tagObjects.push(tag);\n tagLabels.add(label);\n }\n }\n\n return tagObjects;\n};\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import type { Config } from \"../../api/config\";\nimport { useConfig } from \"../../contexts/Config\";\n\nexport const useConfigValue = <T extends keyof Config>(key: T) => {\n const { data } = useConfig();\n return (data ?? {})[key];\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"downloads\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"comment\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text, Tooltip } from \"@chakra-ui/react\";\nimport { formatDistanceToNowStrict } from \"date-fns\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { useStats } from \"../../contexts/Stats\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n\n tooltip?: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n tooltip,\n value,\n}) => (\n <Tooltip hasArrow isDisabled={!tooltip} label={tooltip} placement=\"left\">\n {/* zIndex required to allow tooltip to display due to card link overlay */}\n <Text data-testid={dataTestid} fontSize=\"xs\" zIndex={1}>\n {value}\n </Text>\n </Tooltip>\n);\n\nexport const Details: FunctionComponent = () => {\n const {\n author,\n metadata: { date },\n name,\n } = usePackageCard();\n\n const { data } = useStats();\n const downloads: number | undefined = data?.packages?.[name]?.downloads?.npm;\n\n const authorName = typeof author === \"string\" ? author : author.name;\n const publishDate = new Date(date);\n\n return (\n <>\n {downloads !== undefined && (\n <Detail\n data-testid={testIds.downloads}\n tooltip=\"Download numbers are periodically sourced from the npm registry\"\n value={`${downloads.toLocaleString()} weekly downloads`}\n />\n )}\n <Detail\n data-testid={testIds.published}\n value={\n <Time\n date={publishDate}\n fontSize=\"xs\"\n formattedDate={formatDistanceToNowStrict(publishDate, {\n addSuffix: true,\n })}\n />\n }\n />\n <Detail\n data-testid={testIds.author}\n value={\n <>\n By{\" \"}\n <NavLink\n color=\"blue.500\"\n to={getSearchPath({\n query: authorName,\n })}\n >\n {authorName}\n </NavLink>\n </>\n }\n />\n </>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport const EditorsNote: FunctionComponent<{ comment?: string }> = ({\n comment,\n}) => {\n return (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text as=\"span\" color=\"blue.500\" fontWeight=\"bold\">\n Editor's note:{\" \"}\n </Text>\n {comment}\n </Text>\n );\n};\n","import {\n Flex,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { CDKTypeBadge } from \"../CDKType\";\nimport { EditorsNote } from \"./EditorsNote\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const {\n description,\n comment,\n metadata: { constructFramework },\n name,\n version,\n } = usePackageCard();\n\n const cdkType = constructFramework?.name;\n const cdkVersion = constructFramework?.majorVersion;\n\n return (\n <>\n <LinkOverlay\n as={Link}\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <Flex align=\"center\">\n <CDKTypeBadge majorVersion={cdkVersion} mr={2} name={cdkType} />\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"normal\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\n {comment ? (\n <EditorsNote comment={comment} />\n ) : (\n <Text\n color=\"blue.800\"\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n )}\n </>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { highlightsFrom } from \"../../util/package\";\nimport { Highlight as HighlightComponent } from \"../Highlight\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Highlight: FunctionComponent = () => {\n const { packageTags = [] } = usePackageCard()?.metadata ?? {};\n const [highlight] = highlightsFrom(packageTags);\n\n return (\n <Box fontSize=\"xs\">\n <HighlightComponent {...highlight} />\n </Box>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages?: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { FunctionComponent } from \"react\";\nimport { tagObjectsFrom } from \"../../util/package\";\nimport { PackageTag } from \"../PackageTag\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Tags: FunctionComponent = () => {\n const {\n keywords = [],\n metadata: { packageTags = [] },\n } = usePackageCard();\n\n const tags = tagObjectsFrom({\n packageTags,\n keywords,\n });\n\n return (\n <>\n {tags.slice(0, 10).map(({ id, keyword: { label, color } = {} }) => (\n <PackageTag key={id} value={id} variant={color}>\n {label}\n </PackageTag>\n ))}\n </>\n );\n};\n","import { Flex, Grid, LinkBox, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"gray.50\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"blue.800\"\n data-testid={testIds.wideContainer}\n h=\"full\"\n minH=\"12.5rem\"\n templateColumns={{ base: \"1fr\", lg: \"1fr 14rem\" }}\n w=\"full\"\n >\n {/* Top / Left side of card */}\n <Flex\n direction=\"column\"\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={3}>\n <Heading />\n </Stack>\n\n <Flex align=\"center\" sx={{ gap: \"0.5rem\" }} wrap=\"wrap\">\n <Tags />\n </Flex>\n </Flex>\n\n {/* Bottom / Right side of card */}\n <Flex\n align={{ base: \"end\", lg: \"initial\" }}\n borderLeft={{ lg: \"base\" }}\n borderTop={{ base: \"base\", lg: \"none\" }}\n direction={{ base: \"row\", lg: \"column\" }}\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={1}>\n <Highlight />\n <Stack spacing={1}>\n <Details />\n </Stack>\n </Stack>\n\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\n </Flex>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n pkg: CatalogPackage;\n variant?: PackageCardType;\n}\n\nconst PackageCardContext = createContext<\n (CatalogPackage & { comment?: string }) | null\n>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={pkg}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport type TimeOptions = {\n date: Date;\n format?: string;\n formattedDate?: string;\n};\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, formattedDate, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {formattedDate ?? format(date, formatString ?? \"\")}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { Stack, Image, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\ninterface HighlightProps {\n label: string;\n color?: string;\n icon?: string;\n}\n\nexport const Highlight: FunctionComponent<HighlightProps> = ({\n label,\n color,\n icon,\n}: HighlightProps) => {\n return (\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Image alt={`${label} icon`} src={icon} w={4} />\n <Text color={color} fontWeight=\"bold\">\n {label}\n </Text>\n </Stack>\n );\n};\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ keywords: [value] })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<\n LanguageSupportTooltipProps\n> = ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n const langName = LANGUAGE_NAME_MAP[language];\n\n const message = isSupported\n ? `Click to view documentation in ${langName}`\n : `Documentation support for ${langName} is coming soon!`;\n\n return (\n <Tooltip hasArrow label={message} placement=\"top-start\">\n <span>{children}</span>\n </Tooltip>\n );\n};\n","import { QuestionIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Heading,\n Text,\n Popover,\n PopoverTrigger,\n PopoverBody,\n PopoverArrow,\n PopoverContent,\n useBreakpointValue,\n PlacementWithLogical,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\n\nexport interface FilterHeadingProps {\n name: string;\n hint?: string;\n}\n\nexport const FilterHeading: FunctionComponent<FilterHeadingProps> = ({\n name,\n hint,\n}) => {\n const placement = useBreakpointValue<PlacementWithLogical>({\n base: \"auto\",\n md: \"right\",\n });\n\n return (\n <Flex align=\"center\" mb={1}>\n <Heading as=\"h4\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement={placement} strategy=\"fixed\">\n <PopoverTrigger>\n <Flex aria-label={`Hint: ${name}`} as=\"button\" ml={2}>\n <QuestionIcon h={3.5} w={3.5} />\n </Flex>\n </PopoverTrigger>\n <PopoverContent\n bg=\"gray.700\"\n borderRadius=\"base\"\n color=\"white\"\n fontSize=\"sm\"\n mx={{ base: \"1rem\", md: \"initial\" }}\n shadow=\"whiteAlpha.300\"\n >\n <PopoverArrow bg=\"gray.700\" />\n <PopoverBody>\n <Text>{hint}</Text>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n ) : null}\n </Flex>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nexport default createTestIds(\"searchRedesign\", [\n \"page\",\n // Results\n \"searchDetails\",\n \"nextPage\",\n \"prevPage\",\n \"goToPage\",\n // Sorting\n \"sortButton\",\n \"sortDropdown\",\n \"sortItem\",\n // Filters Panel\n \"filtersPanel\",\n \"cdkTypeFilter\",\n \"cdkVersionFilter\",\n \"filterItem\",\n \"languagesFilter\",\n] as const);\n","import { Radio, RadioGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\n\nexport interface RadioFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n value?: string;\n onValueChange: (value: string) => void;\n options: {\n display: string;\n value: string;\n }[];\n}\n\nexport const RadioFilter: FunctionComponent<RadioFilterProps> = ({\n \"data-testid\": dataTestid,\n value: checkedValue,\n onValueChange,\n options,\n name,\n hint,\n}) => {\n return (\n <Stack data-testid={dataTestid} spacing={1}>\n <FilterHeading hint={hint} name={name} />\n <RadioGroup onChange={onValueChange} value={checkedValue}>\n <Stack spacing={1}>\n {options.map(({ display, value }) => (\n <Radio key={value} value={value}>\n <Text\n color=\"gray.600\"\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n ))}\n </Stack>\n </RadioGroup>\n </Stack>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport type { QueryParamKey } from \"../../constants/url\";\n\nconst LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n\nexport const SORT_RENDER_MAP = {\n [CatalogSearchSort.NameAsc]: \"A-Z\",\n [CatalogSearchSort.NameDesc]: \"Z-A\",\n [CatalogSearchSort.PublishDateAsc]: \"Oldest first\",\n [CatalogSearchSort.PublishDateDesc]: \"Newest first\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n","export const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseQueryArray = <T extends string>(\n queryString: string | null\n) => {\n if (!queryString) return [];\n\n return decodeURIComponent(queryString).split(\",\") as T[];\n};\n","/**\n * @fileoverview Exposes page-level state and setters to all components in the new SearchResults View.\n */\nimport {\n createContext,\n FunctionComponent,\n useContext,\n useEffect,\n useMemo,\n} from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport {\n UseCatalogSearchReturn,\n useCatalogSearch,\n} from \"../../hooks/useCatalogSearch\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\nimport { LIMIT } from \"../SearchRedesign/constants\";\nimport { parseQueryArray, toNum } from \"./util\";\n\nexport interface SearchState {\n limit: number;\n offset: number;\n query: string;\n searchAPI: UseCatalogSearchReturn;\n}\n\nconst SearchStateContext = createContext<SearchState | undefined>(undefined);\n\n/**\n * A hook to access Search Page specific state. This can only be in descendants of the new Search Page\n * and will otherwise throw an error.\n */\nexport const useSearchState = () => {\n const state = useContext(SearchStateContext);\n\n if (!state) {\n throw new Error(\n `This hook must be called in a child of <SearchStateProvider />`\n );\n }\n\n return state;\n};\n\nexport const SearchStateProvider: FunctionComponent = ({ children }) => {\n const queryParams = useQueryParams();\n\n const offset = toNum(queryParams.get(QUERY_PARAMS.OFFSET) ?? \"0\");\n\n const query = decodeURIComponent(\n queryParams.get(QUERY_PARAMS.SEARCH_QUERY) ?? \"\"\n );\n\n const languages: Language[] = parseQueryArray(\n queryParams.get(QUERY_PARAMS.LANGUAGES)\n );\n const tagQuery = queryParams.get(QUERY_PARAMS.TAGS);\n const tags = useMemo(() => parseQueryArray(tagQuery), [tagQuery]);\n\n const keywordQuery = queryParams.get(QUERY_PARAMS.KEYWORDS);\n const keywords = useMemo(() => parseQueryArray(keywordQuery), [keywordQuery]);\n\n const sort = (queryParams.get(QUERY_PARAMS.SORT) ?? undefined) as\n | CatalogSearchSort\n | undefined;\n\n const cdkType =\n (queryParams.get(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined;\n\n const cdkMajorParam = queryParams.get(QUERY_PARAMS.CDK_MAJOR);\n const cdkMajor = cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n\n const searchAPI = useCatalogSearch({\n defaultCdkMajor: cdkMajor,\n defaultCdkType: cdkType,\n defaultKeywords: keywords,\n defaultLanguages: languages,\n defaultQuery: query,\n defaultSort: sort,\n defaultTags: tags,\n });\n\n useEffect(() => {\n if (query !== searchAPI.query) {\n searchAPI.setQuery(query);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query]);\n\n useEffect(() => {\n if (keywords.some((k) => !searchAPI.keywords.includes(k))) {\n searchAPI.setKeywords(keywords);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [keywords]);\n\n useEffect(() => {\n if (tags.some((t) => !searchAPI.tags.includes(t))) {\n searchAPI.setTags(tags);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tags]);\n\n return (\n <SearchStateContext.Provider\n value={{\n limit: LIMIT,\n offset,\n query,\n searchAPI,\n }}\n >\n {children}\n </SearchStateContext.Provider>\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { CatalogConstructFrameworkMeta } from \"../../api/catalog-search\";\nimport { CDKType, CDKTYPE_NAME_MAP } from \"../../constants/constructs\";\nimport { useSearchContext } from \"../../contexts/Search\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\ntype CDKOptions = Partial<{\n [key in CDKType]: CatalogConstructFrameworkMeta & {\n display: string;\n value: key;\n };\n}>;\n\nexport const CDKFilter: FunctionComponent = () => {\n const { cdkType, setCdkType, cdkMajor, setCdkMajor } =\n useSearchState().searchAPI;\n const searchAPI = useSearchContext()!;\n\n // Options with less than one package will be omitted\n const cdkOptions = useMemo(() => {\n const cdkTypes = searchAPI.constructFrameworks;\n const options = Object.entries(cdkTypes).reduce((opts, [name, meta]) => {\n if (meta.pkgCount < 1) {\n return opts;\n }\n\n return {\n ...opts,\n [name]: {\n display: CDKTYPE_NAME_MAP[name as CDKType],\n value: name,\n ...meta,\n },\n };\n }, {});\n\n return Object.keys(options).length ? (options as CDKOptions) : undefined;\n }, [searchAPI]);\n\n const majorsOptions = useMemo(() => {\n if (!cdkOptions || !cdkType) return undefined;\n const majorVersions = cdkOptions[cdkType]?.majorVersions;\n\n if (!majorVersions) return undefined;\n\n return [...majorVersions]\n .sort((a, b) => a - b)\n .map((value) => ({\n value: value.toString(),\n display: `${CDKTYPE_NAME_MAP[cdkType]} v${value}`,\n }));\n }, [cdkOptions, cdkType]);\n\n if (!cdkOptions) {\n return null;\n }\n\n const onCdkTypeChange = (type: string) => {\n const cdk = type as CDKType;\n setCdkMajor(undefined);\n setCdkType(type ? cdk : undefined);\n };\n\n const onCdkMajorChange = (major: string) => {\n if (!major) {\n setCdkMajor(undefined);\n return;\n }\n\n const majorNum = parseInt(major, 10);\n\n setCdkMajor(majorNum);\n };\n\n return (\n <>\n <RadioFilter\n data-testid={testIds.cdkTypeFilter}\n hint=\"Choose the right CDK for your IaC technology: AWS CDK for AWS CloudFormation, CDKtf for Terraform, or CDK8s for Kubernetes.\"\n name=\"CDK Type\"\n onValueChange={onCdkTypeChange}\n options={[\n { display: \"Any CDK Type\", value: \"\" },\n ...Object.values(cdkOptions),\n ]}\n value={cdkType ?? \"\"}\n />\n {/* No point in showing major versions if only a single one is available */}\n {!!(majorsOptions && majorsOptions.length > 1) && (\n <RadioFilter\n data-testid={testIds.cdkVersionFilter}\n hint=\"Choose the major version of the CDK you're using to see only constructs that will work with that version.\"\n name=\"CDK Major Version\"\n onValueChange={onCdkMajorChange}\n options={[\n { display: \"Any Major Version\", value: \"\" },\n ...majorsOptions,\n ]}\n value={cdkMajor?.toString() ?? \"\"}\n />\n )}\n </>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Button,\n Collapse,\n Checkbox,\n Stack,\n Text,\n Tooltip,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\n\ninterface CheckboxOption {\n display: string;\n value: string;\n isDisabled?: boolean;\n disabledHint?: string;\n}\n\ninterface CheckboxItemProps extends CheckboxOption {\n onChange: () => void;\n isChecked: boolean;\n}\n\nexport interface CheckboxFilterProps extends FilterHeadingProps {\n /**\n * Test ID to select checkbox in tests\n */\n \"data-testid\"?: string;\n /**\n * Number of items that can be initially shown\n */\n initialItemCount?: number;\n /**\n * Defines checkbox items\n */\n options: CheckboxOption[];\n /**\n * Selected values\n */\n values: string[];\n /**\n * Callback triggered when an item is clicked\n */\n onValueChange: (value: string) => void;\n}\n\nconst CheckboxItem: FunctionComponent<CheckboxItemProps> = ({\n display,\n value,\n isDisabled,\n disabledHint,\n isChecked,\n onChange,\n}) => (\n <Checkbox\n isChecked={isChecked}\n isDisabled={isDisabled}\n key={value}\n onChange={onChange}\n >\n <Tooltip\n hasArrow\n isDisabled={!isDisabled && !disabledHint}\n label={disabledHint}\n placement=\"right\"\n >\n <Text\n color=\"gray.600\"\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Tooltip>\n </Checkbox>\n);\n\nexport const CheckboxFilter: FunctionComponent<CheckboxFilterProps> = ({\n \"data-testid\": dataTestid,\n initialItemCount,\n hint,\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const collapse = useDisclosure();\n\n const getOnChange = (value: string) => () => {\n onValueChange(value);\n };\n\n let alwaysShow: typeof options = options;\n let showWhenExpanded: typeof options = [];\n\n if (initialItemCount) {\n alwaysShow = options.slice(0, initialItemCount);\n showWhenExpanded = options.slice(initialItemCount, options.length);\n }\n\n const isExpandible = showWhenExpanded.length > 0;\n\n return (\n <Flex data-testid={dataTestid} direction=\"column\">\n <FilterHeading hint={hint} name={name} />\n <Stack mt={1} spacing={1}>\n {alwaysShow.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item.value)}\n />\n ))}\n {isExpandible && (\n <Collapse animateOpacity in={collapse.isOpen} unmountOnExit>\n <Stack spacing={1}>\n {showWhenExpanded.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item.value)}\n />\n ))}\n </Stack>\n </Collapse>\n )}\n </Stack>\n {isExpandible && (\n <Flex align=\"start\" mt={1}>\n <Button\n color=\"gray.600\"\n fontWeight=\"normal\"\n leftIcon={collapse.isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n onClick={collapse.onToggle}\n size=\"sm\"\n textAlign=\"left\"\n variant=\"link\"\n w=\"auto\"\n >\n {collapse.isOpen\n ? `Show fewer options (${alwaysShow.length})`\n : `Show more options (${showWhenExpanded.length})`}\n </Button>\n </Flex>\n )}\n </Flex>\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { useSearchContext } from \"../../contexts/Search\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const KeywordsFilter: FunctionComponent = () => {\n const { keywords, setKeywords } = useSearchState().searchAPI;\n const keywordMap = useSearchContext()!.keywords;\n\n const onKeywordChange = (keyword: string) => {\n setKeywords(\n keywords.includes(keyword)\n ? keywords.filter((k) => k !== keyword)\n : [...keywords, keyword]\n );\n };\n\n const keywordOptions = useMemo(() => {\n const baseOptions = [...keywordMap.entries()]\n .sort(([, count1], [, count2]) => {\n return count1 < count2 ? 1 : -1;\n })\n .filter(([keyword]) => !keywords.includes(keyword))\n .map(([keyword]) => ({\n display: keyword,\n value: keyword,\n }))\n .slice(0, 25);\n\n const keywordsNotInOptions = keywords.filter(\n (k) => !baseOptions.some((opt) => opt.value === k)\n );\n\n return [\n ...keywordsNotInOptions.map((k) => ({ display: k, value: k })),\n ...baseOptions,\n ];\n }, [keywordMap, keywords]);\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Focus the results by choosing one or more keywords reflecting the kind of construct you're looking for. Keywords are provided by construct authors.\"\n initialItemCount={5}\n name=\"Keywords\"\n onValueChange={onKeywordChange}\n options={keywordOptions}\n values={keywords}\n />\n );\n};\n","import { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nconst languageOptions = Object.entries(LANGUAGE_NAME_MAP)\n .map(([key, value]) => ({\n display: value,\n value: key,\n ...(TEMP_SUPPORTED_LANGUAGES.has(key as Language)\n ? { isDisabled: false }\n : {\n isDisabled: true,\n disabledHint: `${\n LANGUAGE_NAME_MAP[key as Language]\n } support is coming soon!`,\n }),\n }))\n .sort((l1, l2) => {\n // Push disabled languages to back of list\n return l1.isDisabled > l2.isDisabled ? 1 : -1;\n });\n\nexport const LanguageFilter: FunctionComponent = () => {\n const { languages, setLanguages } = useSearchState().searchAPI;\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n setLanguages(\n languages.includes(language)\n ? languages.filter((l) => l !== language)\n : [...languages, language]\n );\n };\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Choose one or more languages. Results include constructs for use with at least one of the selected languages.\"\n name=\"Programming Language\"\n onValueChange={onLanguagesChange}\n options={languageOptions}\n values={languages}\n />\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { PackageTagConfig } from \"../../api/config\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { useSearchState } from \"./SearchState\";\n\ninterface FilterGroups {\n [group: string]: PackageTagConfig[];\n}\n\nexport const TagFilter: FunctionComponent = () => {\n const filterableTags =\n useConfigValue(\"packageTags\")?.filter((tag) => Boolean(tag.searchFilter)) ??\n [];\n\n const tagFilterGroups: FilterGroups = filterableTags.reduce(\n (accum: FilterGroups, tag: PackageTagConfig): FilterGroups => {\n const groupName = tag.searchFilter?.groupBy;\n if (groupName) {\n return {\n ...accum,\n [groupName]: [...(accum[groupName] ?? []), tag],\n };\n }\n return accum;\n },\n {}\n );\n\n const { tags, setTags } = useSearchState().searchAPI;\n\n const onTagsChange = (tag: string) => {\n setTags(\n tags.includes(tag) ? tags.filter((t) => t !== tag) : [...tags, tag]\n );\n };\n\n return (\n <>\n {Object.entries(tagFilterGroups).map(([title, tagItems]) => {\n return (\n <CheckboxFilter\n key={title}\n name={title}\n onValueChange={onTagsChange}\n options={tagItems.map((tag) => {\n return {\n display: tag.searchFilter!.display,\n value: tag.id,\n };\n })}\n values={tags}\n />\n );\n })}\n </>\n );\n};\n","import { Heading, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Card } from \"../../components/Card\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { TagFilter } from \"./TagFilter\";\nimport testIds from \"./testIds\";\n\nexport interface FilterPanelProps {}\n\n// Header height + section padding\nconst TOP_OFFSET = \"5.75rem\";\n\n/**\n * The desktop Resolution Filter Panel\n */\nexport const FilterPanel: FunctionComponent<FilterPanelProps> = () => {\n return (\n <Card\n borderRadius=\"none\"\n boxShadow=\"none\"\n data-testid={testIds.filtersPanel}\n display={{ base: \"none\", md: \"flex\" }}\n maxH={`calc(100vh - ${TOP_OFFSET} - 1.25rem)`}\n maxW=\"23rem\"\n minW=\"100%\"\n overflow=\"hidden auto\"\n p={4}\n pos=\"sticky\"\n top={TOP_OFFSET}\n zIndex=\"docked\"\n >\n <Stack color=\"blue.800\" h=\"max-content\" spacing={4} top={4}>\n <Heading as=\"h3\" size=\"sm\">\n Filters\n </Heading>\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </Card>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"../PackageCard\";\nimport { WideCardList } from \"./WideCardList\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n items: CatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n cardView = PackageCardType.Wide,\n items,\n loading,\n // title,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\nimport { PackageListViewProps } from \"./PackageList\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nexport interface ArrowButtonProps {\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n offset?: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-testid\": dataTestid,\n icon: Icon,\n offset,\n getPageUrl,\n}) => {\n const label = `Page ${offset} link`;\n\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-testid\": dataTestid,\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n if (offset !== undefined) {\n return <IconButton {...props} as={Link} to={getPageUrl({ offset })} />;\n }\n\n return <IconButton {...props} disabled />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport interface GoToPageProps {\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n getPageUrl: (params: { offset: number }) => string;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-testid\": dataTestid,\n pageLimit,\n offset,\n getPageUrl,\n}) => {\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n const { push } = useHistory();\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n push(getPageUrl({ offset: parseInt(inputValue) - 1 }));\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n colorScheme=\"blue\"\n data-testid={dataTestid}\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { GoToPage } from \"./GoToPage\";\nimport testIds from \"./testIds\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n getPageUrl: (params: { offset?: number }) => string;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n getPageUrl,\n pageLimit,\n}) => {\n const nextOffset = offset < pageLimit ? offset + 1 : undefined;\n const prevOffset = offset > 0 ? offset - 1 : undefined;\n\n return (\n <Stack\n align=\"center\"\n direction=\"row\"\n justify=\"space-between\"\n maxW=\"18rem\"\n mx=\"auto\"\n spacing={4}\n w=\"full\"\n >\n <ArrowButton\n data-testid={testIds.prevPage}\n getPageUrl={getPageUrl}\n icon={ChevronLeftIcon}\n offset={prevOffset}\n />\n <GoToPage\n data-testid={testIds.goToPage}\n getPageUrl={getPageUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-testid={testIds.nextPage}\n getPageUrl={getPageUrl}\n icon={ChevronRightIcon}\n offset={nextOffset}\n />\n </Stack>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport interface SearchDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n query?: string;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"strong\" color=\"gray.700\">\n {children}\n </Text>\n);\n\nconst Count: FunctionComponent<{\n first: number;\n count: number;\n last: number;\n}> = ({ first, count, last }) => {\n if (!first && last >= count) {\n return (\n <>\n <Em>{count}</Em> of <Em>{count}</Em>\n </>\n );\n }\n\n return (\n <>\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em>\n </>\n );\n};\n\nexport const SearchDetails: FunctionComponent<SearchDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n query,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n const hasResults = count > 0;\n\n return (\n <Text data-testid={testIds.searchDetails}>\n {hasResults ? (\n <>\n Displaying <Count count={count} first={first} last={last} />{\" \"}\n {filtered ? \"search results\" : \"constructs\"}\n </>\n ) : (\n <>{filtered ? \"There were no search results\" : \"No constructs found\"}</>\n )}\n {query && (\n <>\n {\" for \"}\n <Em>{query}</Em>\n </>\n )}\n .{!hasResults && filtered && <> Try a different term.</>}\n </Text>\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSearchState } from \"./SearchState\";\n\nexport const SortFilter: FunctionComponent = () => {\n const { sort, setSort } = useSearchState().searchAPI;\n\n const onSortChange = (newSort: string) => {\n setSort(newSort ? (newSort as CatalogSearchSort) : undefined);\n };\n\n return (\n <RadioFilter\n hint=\"Sets the order of search results\"\n name=\"Sorted By\"\n onValueChange={onSortChange}\n options={[\n { display: \"Relevance\", value: \"\" },\n ...Object.entries(SORT_RENDER_MAP).map(([value, display]) => ({\n display,\n value,\n })),\n ]}\n value={sort ?? \"\"}\n />\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Drawer,\n Stack,\n DrawerBody,\n DrawerHeader,\n DrawerOverlay,\n DrawerContent,\n DrawerCloseButton,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { SortFilter } from \"./SortFilter\";\nimport { TagFilter } from \"./TagFilter\";\n\n/**\n * The mobile filter Drawer (Bottomsheet in iOS terminology)\n */\nexport const SortAndFilterDrawer: FunctionComponent = () => {\n const drawer = useDisclosure();\n return (\n <>\n <Button\n colorScheme=\"blue\"\n display={{ md: \"none\" }}\n onClick={drawer.onOpen}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n Sorting and Filters\n </Button>\n <Drawer {...drawer} placement=\"bottom\">\n <DrawerOverlay />\n\n <DrawerContent color=\"blue.800\" maxH=\"full\">\n <DrawerHeader borderBottom=\"base\">Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"blue.800\" pb={4} spacing={4}>\n <SortFilter />\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Text,\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n Button,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { useSearchState } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const SortedBy: FunctionComponent = () => {\n const { searchAPI } = useSearchState();\n const { sort, setSort } = searchAPI;\n\n const selected = sort ? SORT_RENDER_MAP[sort] : \"Relevance\";\n\n return (\n <Flex align=\"center\">\n <Text>Sorted by</Text>\n <Menu>\n <MenuButton\n as={Button}\n color=\"blue.500\"\n data-testid={testIds.sortButton}\n ml={2}\n pl={2} // For some reason, the px shorthand doesn't work on this Button\n pr={2}\n py={1}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n {selected}\n </MenuButton>\n <MenuList data-testid={testIds.sortDropdown} minW=\"180\" zIndex=\"sticky\">\n <MenuItem\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => setSort(undefined)}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => setSort(value as CatalogSearchSort)}\n >\n {display}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n </Flex>\n );\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { SearchBar } from \"../../components/SearchBar\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { getSearchPath } from \"../../util/url\";\nimport { SearchQueryParam } from \"../SearchRedesign/constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { useSearchState } from \"./SearchState\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\n\nexport const SearchResults: FunctionComponent = () => {\n const isFirstRender = useRef(true);\n const { push } = useHistory();\n\n const { query, searchAPI, offset, limit } = useSearchState();\n const { keywords, languages, sort, cdkType, cdkMajor, onSearch, tags } =\n searchAPI;\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit,\n query,\n keywords,\n languages,\n cdkMajor,\n cdkType,\n sort,\n tags,\n });\n\n const getUrl = (\n params: Partial<{ [key in SearchQueryParam]: number | string }>\n ) => {\n return getSearchPath({\n cdkMajor,\n cdkType,\n keywords,\n query: (params.q ?? query) as string,\n languages,\n sort,\n offset: params.offset ?? offset,\n tags,\n });\n };\n\n // Resets the page number to 1 if query param offset is below 0, or to the last page if offset is higher than page count\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n push(getUrl({ offset: 0 }));\n } else {\n // Offset is too large, just take last page\n push(getUrl({ offset: pageLimit }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\n\n // Reset offset and update url when query, filters, or sort change\n // We want to avoid doing this on first render / when a user directly navigates to a search URL\n // so we keep a ref to prevent this\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else {\n // Trigger a history replace rather than push to avoid bloating browser history\n onSearch({ replace: true });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sort, keywords, languages, cdkType, cdkMajor, tags]);\n\n // Scroll to top on page change\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [page]);\n\n return (\n <Page\n meta={{\n title: query || \"Search\",\n description: query\n ? `${results.length} results for ${query} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Stack direction=\"column\" maxW=\"100vw\" pb={4} px={4} spacing={4}>\n <SearchBar\n bg=\"white\"\n onChange={searchAPI.onQueryChange}\n onSubmit={(e) => {\n searchAPI.setSort(undefined);\n searchAPI.onSubmit(e);\n }}\n value={searchAPI.query}\n />\n\n <Stack\n align={{ base: \"start\", lg: \"center\" }}\n direction={{ base: \"column-reverse\", lg: \"row\" }}\n justify={{ base: \"initial\", lg: \"space-between\" }}\n spacing={4}\n >\n <SearchDetails\n count={results.length}\n filtered={!!query}\n limit={limit}\n offset={offset}\n query={query}\n />\n\n <Box display={{ base: \"none\", md: \"initial\" }}>\n <SortedBy />\n </Box>\n\n <Box display={{ md: \"none\" }}>\n <SortAndFilterDrawer />\n </Box>\n </Stack>\n\n <PackageList items={page} />\n\n <Box w=\"full\">\n <PageControls\n getPageUrl={getUrl}\n offset={offset}\n pageLimit={pageLimit}\n />\n </Box>\n </Stack>\n </Page>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FilterPanel } from \"./FilterPanel\";\nimport { SearchResults } from \"./SearchResults\";\nimport { SearchStateProvider } from \"./SearchState\";\nimport testIds from \"./testIds\";\n\nexport const SearchRedesign: FunctionComponent = () => {\n return (\n <SearchStateProvider>\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description:\n \"Search Construct Libraries for AWS CDK, CDK8s, and CDKtf\",\n }}\n pageName=\"search\"\n >\n <Grid\n data-testid={testIds.page}\n gap={4}\n h=\"full\"\n maxW=\"100%\"\n px={{ base: 0, md: 6 }}\n py={6}\n templateColumns={{ base: \"1fr\", md: \"auto 1fr\" }}\n templateRows=\"1fr\"\n >\n {/* Filter Panel Desktop */}\n <FilterPanel />\n\n {/* Results, Info, and Controls */}\n <SearchResults />\n </Grid>\n </Page>\n </SearchStateProvider>\n );\n};\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[9],{146:function(e,n,r){"use strict";r.d(n,"a",(function(){return p}));var t=r(3),o=r(1),a=r(0),i=r.n(a),c=r(87);o.B?a.useLayoutEffect:a.useEffect;o.b;o.b;function u(e,n){if(null==e)return{};var r,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||(o[r]=e[r]);return o}function l(){return l=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},l.apply(this,arguments)}function s(e){return Object.entries(e).sort((function(e,n){return Number.parseInt(e[1],10)>Number.parseInt(n[1],10)?1:-1})).map((function(e,n,r){var t=e[0],o=e[1],a=r[n+1],i=a?a[1]:void 0,c=function(e,n){if(!(parseInt(e,10)>=0)&&!n)return"";var r="(min-width: "+b(e)+")";if(!n)return r;r&&(r+=" and ");return r+="(max-width: "+b(function(e){return function(e,n){if("number"===typeof e)return""+(e+n);return e.replace(d,(function(e){return""+(parseFloat(e)+n)}))}(e,e.endsWith("px")?-1:-.01)}(n))+")"}(o,i);return{minWidth:o,maxWidth:i,breakpoint:t,query:c}}))}var d=/([0-9]+\.?[0-9]*)/;function b(e){return Object(o.I)(e)?e+"px":e}var f=["query"],v=["query"];function p(e,n){var r=function(e){var n=Object(t.j)().breakpoints,r=Object(c.b)(),o=i.a.useMemo((function(){return s(l({base:"0px"},n))}),[n]),a=i.a.useState((function(){if(e){var n=o.find((function(n){return n.breakpoint===e}));if(n)return n.query,u(n,f)}})),d=a[0],b=a[1],p=null==d?void 0:d.breakpoint,O=i.a.useCallback((function(e,n){e.matches&&p!==n.breakpoint&&b(n)}),[p]);return i.a.useEffect((function(){var e=new Set;return o.forEach((function(n){var t=n.query,o=u(n,v),a=r.window.matchMedia(t);O(a,o);var i=function(){O(a,o)};return a.addListener(i),e.add({mediaQuery:a,handleChange:i}),function(){a.removeListener(i)}})),function(){e.forEach((function(e){var n=e.mediaQuery,r=e.handleChange;n.removeListener(r)})),e.clear()}}),[o,n,O,r.window]),p}(n),a=Object(t.j)();if(r){var d=Object.keys(a.breakpoints);return function(e,n,r){void 0===r&&(r=o.g);var t=Object.keys(e).indexOf(n);if(-1!==t)return e[n];for(var a=r.indexOf(n);a>=0;){if(null!=e[r[a]]){t=a;break}a-=1}return-1!==t?e[r[t]]:void 0}(Object(o.A)(e)?Object(o.q)(Object.entries(Object(o.f)(e,d)).map((function(e){return[e[0],e[1]]}))):e,r,d)}}},149:function(e,n,r){"use strict";r.d(n,"a",(function(){return D})),r.d(n,"b",(function(){return M})),r.d(n,"c",(function(){return _})),r.d(n,"d",(function(){return x})),r.d(n,"e",(function(){return E}));r(88);var t=r(3),o=r(47),a=r.n(o),i=r(1),c=r(0),u=r.n(c),l=r(12),s=r(31),d=r(11),b=r(44);function f(){return f=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},f.apply(this,arguments)}function v(e,n){if(null==e)return{};var r,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||(o[r]=e[r]);return o}var p=Object(l.a)({name:"PopoverContext",errorMessage:"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within `<Popover />`"}),O=p[0],h=p[1],j=function(e){if(e)return a()(e,{enter:{visibility:"visible"},exit:{transitionEnd:{visibility:"hidden"}}})},m=Object(s.a)(t.d.section),g=u.a.forwardRef((function(e,n){var r=h().isOpen;return u.a.createElement(m,f({ref:n,variants:j(e.variants)},e,{initial:!1,animate:r?"enter":"exit"}))}));g.defaultProps={variants:{exit:{opacity:0,scale:.95,transition:{duration:.1,ease:[.4,0,1,1]}},enter:{scale:1,opacity:1,transition:{duration:.15,ease:[0,0,.2,1]}}}};var y=["closeOnBlur","closeOnEsc","initialFocusRef","id","returnFocusOnClose","autoFocus","arrowSize","arrowShadowColor","trigger","openDelay","closeDelay","isLazy","lazyBehavior","computePositionOnMount"],k="click",w="hover";var C=["children"],P=["rootProps"],D=function(e){var n=Object(t.g)("Popover",e),r=Object(t.f)(e),o=r.children,a=function(e){void 0===e&&(e={});var n=e,r=n.closeOnBlur,t=void 0===r||r,o=n.closeOnEsc,a=void 0===o||o,u=n.initialFocusRef,s=n.id,p=n.returnFocusOnClose,O=void 0===p||p,h=n.autoFocus,j=void 0===h||h,m=n.arrowSize,g=n.arrowShadowColor,C=n.trigger,P=void 0===C?k:C,D=n.openDelay,E=void 0===D?200:D,x=n.closeDelay,R=void 0===x?200:x,_=n.isLazy,M=n.lazyBehavior,N=void 0===M?"unmount":M,S=n.computePositionOnMount,F=v(n,y),I=Object(d.g)(e),B=I.isOpen,T=I.onClose,q=I.onOpen,L=I.onToggle,z=Object(c.useRef)(null),A=Object(c.useRef)(null),K=Object(c.useRef)(!1),U=Object(c.useRef)(!1);B&&(U.current=!0);var H=Object(c.useState)(!1),W=H[0],G=H[1],V=Object(c.useState)(!1),Y=V[0],J=V[1],Q=Object(d.n)(s,"popover-trigger","popover-content","popover-header","popover-body"),X=Q[0],Z=Q[1],$=Q[2],ee=Q[3],ne=Object(b.b)(f({},F,{enabled:B||!!S})),re=ne.referenceRef,te=ne.getArrowProps,oe=ne.getPopperProps,ae=ne.getArrowInnerProps,ie=ne.forceUpdate;Object(d.j)({enabled:B,ref:z}),Object(d.i)(A,{focusRef:z,visible:B,shouldFocus:O&&P===k}),Object(d.k)(A,{focusRef:u,visible:B,shouldFocus:j&&P===k});var ce=Object(i.n)({hasBeenSelected:U.current,isLazy:_,lazyBehavior:N,isSelected:B}),ue=Object(c.useCallback)((function(e,n){var r;void 0===e&&(e={}),void 0===n&&(n=null);var o=f({},e,{style:f({},e.style,(r={transformOrigin:b.a.transformOrigin.varRef},r[b.a.arrowSize.var]=m?Object(i.Y)(m):void 0,r[b.a.arrowShadowColor.var]=g,r)),ref:Object(l.c)(A,n),children:ce?e.children:null,id:Z,tabIndex:-1,role:"dialog",onKeyDown:Object(i.i)(e.onKeyDown,(function(e){a&&"Escape"===e.key&&T()})),onBlur:Object(i.i)(e.onBlur,(function(e){var n=Object(i.x)(e),r=Object(i.j)(A.current,n),o=Object(i.j)(z.current,n);B&&t&&!r&&!o&&T()})),"aria-labelledby":W?$:void 0,"aria-describedby":Y?ee:void 0});return P===w&&(o.role="tooltip",o.onMouseEnter=Object(i.i)(e.onMouseEnter,(function(){K.current=!0})),o.onMouseLeave=Object(i.i)(e.onMouseLeave,(function(){K.current=!1,setTimeout(T,R)}))),o}),[ce,Z,W,$,Y,ee,P,a,T,B,t,R,g,m]),le=Object(c.useCallback)((function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),oe(f({},e,{style:f({visibility:B?"visible":"hidden"},e.style)}),n)}),[B,oe]),se=Object(c.useRef)(),de=Object(c.useRef)(),be=Object(c.useCallback)((function(e,n){void 0===e&&(e={}),void 0===n&&(n=null);var r=f({},e,{ref:Object(l.c)(z,n,re),id:X,"aria-haspopup":"dialog","aria-expanded":B,"aria-controls":Z});return P===k&&(r.onClick=Object(i.i)(e.onClick,L)),P===w&&(r.onFocus=Object(i.i)(e.onFocus,q),r.onBlur=Object(i.i)(e.onBlur,T),r.onKeyDown=Object(i.i)(e.onKeyDown,(function(e){"Escape"===e.key&&T()})),r.onMouseEnter=Object(i.i)(e.onMouseEnter,(function(){K.current=!0,se.current=window.setTimeout(q,E)})),r.onMouseLeave=Object(i.i)(e.onMouseLeave,(function(){K.current=!1,se.current&&(clearTimeout(se.current),se.current=void 0),de.current=window.setTimeout((function(){!1===K.current&&T()}),R)}))),r}),[X,B,Z,P,re,L,q,T,E,R]);Object(c.useEffect)((function(){return function(){se.current&&clearTimeout(se.current),de.current&&clearTimeout(de.current)}}),[]);var fe=Object(c.useCallback)((function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),f({},e,{id:$,ref:Object(l.c)(n,(function(e){G(!!e)}))})}),[$]),ve=Object(c.useCallback)((function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),f({},e,{id:ee,ref:Object(l.c)(n,(function(e){J(!!e)}))})}),[ee]);return{forceUpdate:ie,isOpen:B,onClose:T,getArrowProps:te,getArrowInnerProps:ae,getPopoverPositionerProps:le,getPopoverProps:ue,getTriggerProps:be,getHeaderProps:fe,getBodyProps:ve}}(f({},v(r,C),{direction:Object(t.j)().direction}));return c.createElement(O,{value:a},c.createElement(t.b,{value:n},Object(i.ab)(o,{isOpen:a.isOpen,onClose:a.onClose,forceUpdate:a.forceUpdate})))};i.b&&(D.displayName="Popover");var E=function(e){var n=c.Children.only(e.children),r=h().getTriggerProps;return c.cloneElement(n,r(n.props,n.ref))};i.b&&(E.displayName="PopoverTrigger");var x=Object(t.e)((function(e,n){var r=e.rootProps,o=v(e,P),a=h(),u=a.getPopoverProps,l=a.getPopoverPositionerProps,s=Object(t.i)(),d=f({position:"relative",display:"flex",flexDirection:"column"},s.content);return c.createElement(t.d.div,f({},l(r),{__css:s.popper,className:"chakra-popover__popper"}),c.createElement(g,f({},u(o,n),{className:Object(i.k)("chakra-popover__content",e.className),__css:d})))}));i.b&&(x.displayName="PopoverContent");var R=Object(t.e)((function(e,n){var r=h().getHeaderProps,o=Object(t.i)();return c.createElement(t.d.header,f({},r(e,n),{className:Object(i.k)("chakra-popover__header",e.className),__css:o.header}))}));i.b&&(R.displayName="PopoverHeader");var _=Object(t.e)((function(e,n){var r=h().getBodyProps,o=Object(t.i)();return c.createElement(t.d.div,f({},r(e,n),{className:Object(i.k)("chakra-popover__body",e.className),__css:o.body}))}));i.b&&(_.displayName="PopoverBody");i.b;i.b;var M=function(e){var n,r=e.bg,o=e.bgColor,a=e.backgroundColor,u=h(),l=u.getArrowProps,s=u.getArrowInnerProps,d=Object(t.i)(),b=null!=(n=null!=r?r:o)?n:a;return c.createElement(t.d.div,f({},l(),{className:"chakra-popover__arrow-positioner"}),c.createElement(t.d.div,f({className:Object(i.k)("chakra-popover__arrow",e.className)},s(e),{__css:f({},d.arrow,{"--popper-arrow-bg":b?"colors."+b+", "+b:void 0})})))};i.b&&(M.displayName="PopoverArrow")},150:function(e,n,r){"use strict";r.d(n,"a",(function(){return k})),r.d(n,"b",(function(){return j}));var t=r(3),o=r(55),a=r(1),i=r(0),c=r(12),u=r(11),l=r(90),s=r(59);function d(e,n){if(null==e)return{};var r,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)r=a[t],n.indexOf(r)>=0||(o[r]=e[r]);return o}function b(){return b=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},b.apply(this,arguments)}var f=["onChange","value","defaultValue","name","isDisabled","isFocusable","isNative"];var v=["colorScheme","size","variant","children","className","isDisabled","isFocusable"],p=Object(c.a)({name:"RadioGroupContext",strict:!1}),O=p[0],h=p[1],j=Object(t.e)((function(e,n){var r=e.colorScheme,o=e.size,l=e.variant,s=e.children,p=e.className,h=e.isDisabled,j=e.isFocusable,m=function(e){void 0===e&&(e={});var n=e,r=n.onChange,t=n.value,o=n.defaultValue,l=n.name,s=n.isDisabled,v=n.isFocusable,p=n.isNative,O=d(n,f),h=i.useState(o||""),j=h[0],m=h[1],g=Object(u.e)(t,j),y=g[0],k=g[1],w=i.useRef(null),C=i.useCallback((function(){var e=w.current;if(e){var n="input:not(:disabled):checked",r=e.querySelector(n);if(r)r.focus();else{n="input:not(:disabled)";var t=e.querySelector(n);null==t||t.focus()}}}),[]),P=Object(u.m)(void 0,"radio"),D=l||P,E=i.useCallback((function(e){var n=Object(a.G)(e)?e.target.value:e;y||m(n),null==r||r(String(n))}),[r,y]),x=i.useCallback((function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),b({},e,{ref:Object(c.c)(n,w),role:"radiogroup"})}),[]),R=i.useCallback((function(e,n){var r;return void 0===e&&(e={}),void 0===n&&(n=null),b({},e,((r={ref:n,name:D})[p?"checked":"isChecked"]=null!=k?e.value===k:void 0,r.onChange=E,r["data-radiogroup"]=!0,r))}),[p,D,E,k]);return{getRootProps:x,getRadioProps:R,name:D,ref:w,focus:C,setValue:m,value:k,onChange:E,isDisabled:s,isFocusable:v,htmlProps:O}}(d(e,v)),g=m.value,y=m.onChange,k=m.getRootProps,w=m.name,C=m.htmlProps,P=i.useMemo((function(){return{name:w,size:o,onChange:y,colorScheme:r,value:g,variant:l,isDisabled:h,isFocusable:j}}),[w,o,y,r,g,l,h,j]),D=k(C,n),E=Object(a.k)("chakra-radio-group",p);return i.createElement(O,{value:P},i.createElement(t.d.div,b({},D,{className:E}),s))}));a.b&&(j.displayName="RadioGroup");var m=["defaultIsChecked","defaultChecked","isChecked","isFocusable","isDisabled","isReadOnly","isRequired","onChange","isInvalid","name","value","id","data-radiogroup"];function g(e){e.preventDefault(),e.stopPropagation()}var y=["spacing","children","isFullWidth","isDisabled","isFocusable"],k=Object(t.e)((function(e,n){var r,c=h(),f=e.onChange,v=e.value,p=Object(t.g)("Radio",b({},c,e)),O=Object(t.f)(e),j=O.spacing,k=void 0===j?"0.5rem":j,w=O.children,C=O.isFullWidth,P=O.isDisabled,D=void 0===P?null==c?void 0:c.isDisabled:P,E=O.isFocusable,x=void 0===E?null==c?void 0:c.isFocusable:E,R=d(O,y),_=e.isChecked;null!=(null==c?void 0:c.value)&&null!=v&&(_=c.value===v);var M=f;null!=c&&c.onChange&&null!=v&&(M=Object(a.h)(c.onChange,f));var N=function(e){void 0===e&&(e={});var n=e,r=n.defaultIsChecked,t=n.defaultChecked,o=void 0===t?r:t,c=n.isChecked,f=n.isFocusable,v=n.isDisabled,p=n.isReadOnly,O=n.isRequired,j=n.onChange,y=n.isInvalid,k=n.name,w=n.value,C=n.id,P=n["data-radiogroup"],D=d(n,m),E=Object(u.m)(void 0,"radio"),x=Object(l.b)(),R=h(),_=!x||R||P?E:x.id;_=null!=C?C:_;var M=null!=v?v:null==x?void 0:x.isDisabled,N=null!=p?p:null==x?void 0:x.isReadOnly,S=null!=O?O:null==x?void 0:x.isRequired,F=null!=y?y:null==x?void 0:x.isInvalid,I=Object(u.b)(),B=I[0],T=I[1],q=Object(u.b)(),L=q[0],z=q[1],A=Object(u.b)(),K=A[0],U=A[1],H=Object(i.useState)(Boolean(o)),W=H[0],G=H[1],V=Object(u.e)(c,W),Y=V[0],J=V[1];Object(a.db)({condition:!!r,message:'The "defaultIsChecked" prop has been deprecated and will be removed in a future version. Please use the "defaultChecked" prop instead, which mirrors default React checkbox behavior.'});var Q=Object(i.useCallback)((function(e){N||M?e.preventDefault():(Y||G(e.target.checked),null==j||j(e))}),[Y,M,N,j]),X=Object(i.useCallback)((function(e){" "===e.key&&U.on()}),[U]),Z=Object(i.useCallback)((function(e){" "===e.key&&U.off()}),[U]),$=Object(i.useCallback)((function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),b({},e,{ref:n,"data-active":Object(a.l)(K),"data-hover":Object(a.l)(L),"data-disabled":Object(a.l)(M),"data-invalid":Object(a.l)(F),"data-checked":Object(a.l)(J),"data-focus":Object(a.l)(B),"data-readonly":Object(a.l)(N),"aria-hidden":!0,onMouseDown:Object(a.i)(e.onMouseDown,U.on),onMouseUp:Object(a.i)(e.onMouseUp,U.off),onMouseEnter:Object(a.i)(e.onMouseEnter,z.on),onMouseLeave:Object(a.i)(e.onMouseLeave,z.off)})}),[K,L,M,F,J,B,N,U.on,U.off,z.on,z.off]),ee=null!=x?x:{},ne=ee.onFocus,re=ee.onBlur,te=Object(i.useCallback)((function(e,n){void 0===e&&(e={}),void 0===n&&(n=null);var r=M&&!f;return b({},e,{id:_,ref:n,type:"radio",name:k,value:w,onChange:Object(a.i)(e.onChange,Q),onBlur:Object(a.i)(re,e.onBlur,T.off),onFocus:Object(a.i)(ne,e.onFocus,T.on),onKeyDown:Object(a.i)(e.onKeyDown,X),onKeyUp:Object(a.i)(e.onKeyUp,Z),checked:J,disabled:r,readOnly:N,required:S,"aria-invalid":Object(a.e)(F),"aria-disabled":Object(a.e)(r),"aria-required":Object(a.e)(S),"data-readonly":Object(a.l)(N),style:s.b})}),[M,f,_,k,w,Q,re,T,ne,X,Z,J,N,S,F]);return{state:{isInvalid:F,isFocused:B,isChecked:J,isActive:K,isHovered:L,isDisabled:M,isReadOnly:N,isRequired:S},getCheckboxProps:$,getInputProps:te,getLabelProps:function(e,n){return void 0===e&&(e={}),void 0===n&&(n=null),b({},e,{ref:n,onMouseDown:Object(a.i)(e.onMouseDown,g),onTouchStart:Object(a.i)(e.onTouchStart,g),"data-disabled":Object(a.l)(M),"data-checked":Object(a.l)(J),"data-invalid":Object(a.l)(F)})},getRootProps:function(e,n){return void 0===n&&(n=null),b({},e,{ref:n,"data-disabled":Object(a.l)(M),"data-checked":Object(a.l)(J),"data-invalid":Object(a.l)(F)})},htmlProps:D}}(b({},R,{isChecked:_,isFocusable:x,isDisabled:D,onChange:M,name:null!=(r=null==e?void 0:e.name)?r:null==c?void 0:c.name})),S=N.getInputProps,F=N.getCheckboxProps,I=N.getLabelProps,B=N.getRootProps,T=N.htmlProps,q=Object(a.bb)(T,o.c),L=q[0],z=F(q[1]),A=S({},n),K=I(),U=Object.assign({},L,B()),H=b({width:C?"full":void 0,display:"inline-flex",alignItems:"center",verticalAlign:"top",cursor:"pointer"},p.container),W=b({display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},p.control),G=b({userSelect:"none",marginStart:k},p.label);return i.createElement(t.d.label,b({className:"chakra-radio"},U,{__css:H}),i.createElement("input",b({className:"chakra-radio__input"},A)),i.createElement(t.d.span,b({className:"chakra-radio__control"},z,{__css:W})),w&&i.createElement(t.d.span,b({className:"chakra-radio__label"},K,{__css:G}),w))}));a.b&&(k.displayName="Radio")},592:function(e,n,r){"use strict";r.d(n,"a",(function(){return v}));var t=r(265),o=r(208),a=r(201);function i(e,n){Object(a.a)(2,arguments);var r=Object(o.a)(e),t=Object(o.a)(n),i=r.getTime()-t.getTime();return i<0?-1:i>0?1:i}function c(e){return function(e,n){if(null==e)throw new TypeError("assign requires that input parameter not be null or undefined");for(var r in n=n||{})Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r]);return e}({},e)}var u=r(294),l=6e4,s=1440,d=43200,b=525600;function f(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object(a.a)(2,arguments);var f=r.locale||u.a;if(!f.formatDistance)throw new RangeError("locale must contain localize.formatDistance property");var v=i(e,n);if(isNaN(v))throw new RangeError("Invalid time value");var p,O,h=c(r);h.addSuffix=Boolean(r.addSuffix),h.comparison=v,v>0?(p=Object(o.a)(n),O=Object(o.a)(e)):(p=Object(o.a)(e),O=Object(o.a)(n));var j,m=null==r.roundingMethod?"round":String(r.roundingMethod);if("floor"===m)j=Math.floor;else if("ceil"===m)j=Math.ceil;else{if("round"!==m)throw new RangeError("roundingMethod must be 'floor', 'ceil' or 'round'");j=Math.round}var g,y=O.getTime()-p.getTime(),k=y/l,w=Object(t.a)(O)-Object(t.a)(p),C=(y-w)/l;if("second"===(g=null==r.unit?k<1?"second":k<60?"minute":k<s?"hour":C<d?"day":C<b?"month":"year":String(r.unit))){var P=j(y/1e3);return f.formatDistance("xSeconds",P,h)}if("minute"===g){var D=j(k);return f.formatDistance("xMinutes",D,h)}if("hour"===g){var E=j(k/60);return f.formatDistance("xHours",E,h)}if("day"===g){var x=j(C/s);return f.formatDistance("xDays",x,h)}if("month"===g){var R=j(C/d);return 12===R&&"month"!==r.unit?f.formatDistance("xYears",1,h):f.formatDistance("xMonths",R,h)}if("year"===g){var _=j(C/b);return f.formatDistance("xYears",_,h)}throw new RangeError("unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'")}function v(e,n){return Object(a.a)(1,arguments),f(e,Date.now(),n)}}}]);
|
|
2
|
+
//# sourceMappingURL=9.09ca5564.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/@chakra-ui/media-query/dist/chakra-ui-media-query.esm.js","../node_modules/@chakra-ui/popover/dist/chakra-ui-popover.esm.js","../node_modules/@chakra-ui/radio/dist/chakra-ui-radio.esm.js","../node_modules/date-fns/esm/compareAsc/index.js","../node_modules/date-fns/esm/_lib/cloneObject/index.js","../node_modules/date-fns/esm/_lib/assign/index.js","../node_modules/date-fns/esm/formatDistanceStrict/index.js","../node_modules/date-fns/esm/formatDistanceToNowStrict/index.js"],"names":["isBrowser","React","__DEV__","_objectWithoutPropertiesLoose","source","excluded","key","i","target","sourceKeys","Object","keys","length","indexOf","_extends","assign","arguments","prototype","hasOwnProperty","call","apply","this","createMediaQueries","breakpoints","entries","sort","a","b","Number","parseInt","map","_ref","index","arr","breakpoint","minWidth","next","maxWidth","undefined","query","toMediaString","value","modifier","replace","measurementRegex","match","parseFloat","calculateMeasurement","endsWith","subtract","createMediaQueryString","isNumber","_excluded","_excluded2","useBreakpointValue","values","defaultBreakpoint","useTheme","env","useEnvironment","mediaQueries","React__default","useMemo","base","_React$useState","useState","mediaQuery","find","currentBreakpoint","setCurrentBreakpoint","current","update","useCallback","matches","useEffect","listeners","Set","forEach","_ref2","window","matchMedia","handleChange","addListener","add","removeListener","_ref3","clear","useBreakpoint","theme","breakpoints$1","stopIndex","getClosestValue","isArray","fromEntries","arrayToObjectNotation","_createContext","createContext","name","errorMessage","PopoverProvider","usePopoverContext","mergeVariants","variants","mergeWith","enter","visibility","exit","transitionEnd","Section","motion","chakra","section","PopoverTransition","forwardRef","props","ref","isOpen","createElement","initial","animate","defaultProps","opacity","scale","transition","duration","ease","_excluded$1","TRIGGER","Popover","styles","useMultiStyleConfig","_omitThemingProps","omitThemingProps","children","context","_props","_props$closeOnBlur","closeOnBlur","_props$closeOnEsc","closeOnEsc","initialFocusRef","id","_props$returnFocusOnC","returnFocusOnClose","_props$autoFocus","autoFocus","arrowSize","arrowShadowColor","_props$trigger","trigger","_props$openDelay","openDelay","_props$closeDelay","closeDelay","isLazy","_props$lazyBehavior","lazyBehavior","computePositionOnMount","popperProps","_useDisclosure","useDisclosure","onClose","onOpen","onToggle","triggerRef","useRef","popoverRef","isHoveringRef","hasBeenOpened","_useState","hasHeader","setHasHeader","_useState2","hasBody","setHasBody","_useIds","useIds","triggerId","popoverId","headerId","bodyId","_usePopper","usePopper","enabled","referenceRef","getArrowProps","getPopperProps","getArrowInnerProps","forceUpdate","useFocusOnPointerDown","useFocusOnHide","focusRef","visible","shouldFocus","useFocusOnShow","shouldRenderChildren","determineLazyBehavior","hasBeenSelected","isSelected","getPopoverProps","_extends2","popoverProps","style","transformOrigin","popperCSSVars","varRef","px","mergeRefs","tabIndex","role","onKeyDown","callAllHandlers","event","onBlur","relatedTarget","getRelatedTarget","targetIsPopover","contains","targetIsTrigger","onMouseEnter","onMouseLeave","setTimeout","getPopoverPositionerProps","forwardedRef","openTimeout","closeTimeout","getTriggerProps","triggerProps","onClick","onFocus","clearTimeout","getHeaderProps","node","getBodyProps","usePopover","direction","StylesProvider","runIfFn","displayName","PopoverTrigger","child","only","PopoverContent","rootProps","contentProps","_usePopoverContext2","useStyles","contentStyles","position","display","flexDirection","content","div","__css","popper","className","cx","PopoverHeader","header","PopoverBody","body","PopoverArrow","bg","bgColor","backgroundColor","_usePopoverContext6","arrowBg","arrow","_excluded$3","_excluded$2","strict","RadioGroupProvider","useRadioGroupContext","RadioGroup","colorScheme","size","variant","isDisabled","isFocusable","_useRadioGroup","onChangeProp","onChange","valueProp","defaultValue","nameProp","isNative","htmlProps","valueState","setValue","_useControllableProp","useControllableProp","isControlled","focus","rootNode","firstEnabledAndCheckedInput","querySelector","firstEnabledInput","fallbackName","useId","eventOrValue","nextValue","isInputEvent","String","getRootProps","getRadioProps","useRadioGroup","group","groupProps","_className","stop","preventDefault","stopPropagation","Radio","_props$name","ownProps","_ownProps$spacing","spacing","isFullWidth","_ownProps$isDisabled","_ownProps$isFocusable","rest","isChecked","callAll","_useRadio","defaultIsChecked","_props$defaultChecked","defaultChecked","isCheckedProp","isDisabledProp","isReadOnlyProp","isReadOnly","isRequiredProp","isRequired","isInvalidProp","isInvalid","idProp","dataRadioGroup","uuid","formControl","useFormControlContext","_useBoolean","useBoolean","isFocused","setFocused","_useBoolean2","isHovered","setHovering","_useBoolean3","isActive","setActive","Boolean","isCheckedState","setChecked","warn","condition","message","checked","on","onKeyUp","off","getCheckboxProps","dataAttr","onMouseDown","onMouseUp","getInputProps","trulyDisabled","type","disabled","readOnly","required","ariaAttr","visuallyHiddenStyle","state","getLabelProps","onTouchStart","useRadio","_split","split","layoutPropNames","layoutProps","checkboxProps","inputProps","labelProps","rootStyles","width","alignItems","verticalAlign","cursor","container","checkboxStyles","justifyContent","flexShrink","control","labelStyles","userSelect","marginStart","label","span","compareAsc","dirtyDateLeft","dirtyDateRight","requiredArgs","dateLeft","toDate","dateRight","diff","getTime","cloneObject","dirtyObject","TypeError","property","MILLISECONDS_IN_MINUTE","MINUTES_IN_DAY","MINUTES_IN_MONTH","MINUTES_IN_YEAR","formatDistanceStrict","dirtyDate","dirtyBaseDate","options","locale","defaultLocale","formatDistance","RangeError","comparison","isNaN","localizeOptions","addSuffix","roundingMethodFn","roundingMethod","Math","floor","ceil","round","unit","milliseconds","minutes","timezoneOffset","getTimezoneOffsetInMilliseconds","dstNormalizedMinutes","seconds","roundedMinutes","hours","days","months","years","formatDistanceToNowStrict","dirtyOptions","Date","now"],"mappings":"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","file":"static/js/9.09ca5564.chunk.js","sourcesContent":["import { useTheme } from '@chakra-ui/system';\nimport { isBrowser, __DEV__, memoizedGet, isNumber, breakpoints, isArray, fromEntries, arrayToObjectNotation } from '@chakra-ui/utils';\nimport * as React from 'react';\nimport React__default from 'react';\nimport { useEnvironment } from '@chakra-ui/react-env';\n\nvar useSafeLayoutEffect = isBrowser ? React.useLayoutEffect : React.useEffect;\n/**\n * React hook that tracks state of a CSS media query\n *\n * @param query the media query to match\n */\n\nfunction useMediaQuery(query) {\n var env = useEnvironment();\n var queries = Array.isArray(query) ? query : [query];\n var isSupported = isBrowser && \"matchMedia\" in env.window;\n\n var _React$useState = React.useState(queries.map(function (query) {\n return isSupported ? !!env.window.matchMedia(query).matches : false;\n })),\n matches = _React$useState[0],\n setMatches = _React$useState[1];\n\n useSafeLayoutEffect(function () {\n if (!isSupported) return undefined;\n var mediaQueryList = queries.map(function (query) {\n return env.window.matchMedia(query);\n });\n var listenerList = mediaQueryList.map(function () {\n var listener = function listener() {\n var isEqual = function isEqual(prev, curr) {\n return prev.length === curr.length && prev.every(function (elem, idx) {\n return elem === curr[idx];\n });\n };\n\n var currentMatches = mediaQueryList.map(function (mediaQuery) {\n return mediaQuery.matches;\n });\n\n if (!isEqual(matches, currentMatches)) {\n setMatches(currentMatches);\n }\n };\n\n env.window.addEventListener(\"resize\", listener);\n return listener;\n });\n return function () {\n mediaQueryList.forEach(function (_, index) {\n env.window.removeEventListener(\"resize\", listenerList[index]);\n });\n };\n }, [query]);\n return matches;\n}\n\n/**\n * Visibility\n *\n * React component to control the visibility of its\n * children based on the current breakpoint\n */\nvar Visibility = function Visibility(props) {\n var breakpoint = props.breakpoint,\n hide = props.hide,\n children = props.children;\n\n var _useMediaQuery = useMediaQuery(breakpoint),\n show = _useMediaQuery[0];\n\n var isVisible = hide ? !show : show;\n var rendered = isVisible ? children : null;\n return rendered;\n};\n\nvar Hide = function Hide(props) {\n var children = props.children;\n var query = useQuery(props);\n return /*#__PURE__*/React.createElement(Visibility, {\n breakpoint: query,\n hide: true\n }, children);\n};\n\nif (__DEV__) {\n Hide.displayName = \"Hide\";\n}\n\nvar Show = function Show(props) {\n var children = props.children;\n var query = useQuery(props);\n return /*#__PURE__*/React.createElement(Visibility, {\n breakpoint: query\n }, children);\n};\n\nif (__DEV__) {\n Show.displayName = \"Show\";\n}\n\nvar getBreakpoint = function getBreakpoint(theme, value) {\n return memoizedGet(theme, \"breakpoints.\" + value, value);\n};\n\nfunction useQuery(props) {\n var _props$breakpoint = props.breakpoint,\n breakpoint = _props$breakpoint === void 0 ? \"\" : _props$breakpoint,\n below = props.below,\n above = props.above;\n var theme = useTheme();\n var bpBelow = getBreakpoint(theme, below);\n var bpAbove = getBreakpoint(theme, above);\n var query = breakpoint;\n\n if (bpBelow) {\n query = \"(max-width: \" + bpBelow + \")\";\n } else if (bpAbove) {\n query = \"(min-width: \" + bpAbove + \")\";\n }\n\n return query;\n}\n\n/**\n * React hook used to get the user's animation preference.\n */\n\nfunction usePrefersReducedMotion() {\n var _useMediaQuery = useMediaQuery(\"(prefers-reduced-motion: reduce)\"),\n prefersReducedMotion = _useMediaQuery[0];\n\n return prefersReducedMotion;\n}\n/**\n * React hook for getting the user's color mode preference.\n */\n\nfunction useColorModePreference() {\n var _useMediaQuery2 = useMediaQuery([\"(prefers-color-scheme: light)\", \"(prefers-color-scheme: dark)\"]),\n isLight = _useMediaQuery2[0],\n isDark = _useMediaQuery2[1];\n\n if (isLight) return \"light\";\n if (isDark) return \"dark\";\n return undefined;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction createMediaQueries(breakpoints) {\n return Object.entries(breakpoints) // sort css units in ascending order to ensure media queries are generated\n // in the correct order and reference to each other correctly aswell\n .sort(function (a, b) {\n return Number.parseInt(a[1], 10) > Number.parseInt(b[1], 10) ? 1 : -1;\n }).map(function (_ref, index, arr) {\n var breakpoint = _ref[0],\n minWidth = _ref[1];\n // given a following breakpoint\n var next = arr[index + 1]; // this breakpoint must end prior the threshold of the next\n\n var maxWidth = next ? next[1] : undefined;\n var query = createMediaQueryString(minWidth, maxWidth);\n return {\n minWidth: minWidth,\n maxWidth: maxWidth,\n breakpoint: breakpoint,\n query: query\n };\n });\n}\n/**\n * Create a media query string from the breakpoints,\n * using a combination of `min-width` and `max-width`.\n */\n\nfunction createMediaQueryString(minWidth, maxWidth) {\n var hasMinWidth = parseInt(minWidth, 10) >= 0;\n\n if (!hasMinWidth && !maxWidth) {\n return \"\";\n }\n\n var query = \"(min-width: \" + toMediaString(minWidth) + \")\";\n\n if (!maxWidth) {\n return query;\n }\n\n if (query) {\n query += \" and \";\n }\n\n query += \"(max-width: \" + toMediaString(subtract(maxWidth)) + \")\";\n return query;\n}\n\nvar measurementRegex = /([0-9]+\\.?[0-9]*)/;\n\nvar calculateMeasurement = function calculateMeasurement(value, modifier) {\n if (typeof value === \"number\") {\n return \"\" + (value + modifier);\n }\n\n return value.replace(measurementRegex, function (match) {\n return \"\" + (parseFloat(match) + modifier);\n });\n};\n/**\n * 0.01 and 0.1 are too small of a difference for `px` breakpoint values\n *\n * @see https://github.com/chakra-ui/chakra-ui/issues/2188#issuecomment-712774785\n */\n\n\nfunction subtract(value) {\n return calculateMeasurement(value, value.endsWith(\"px\") ? -1 : -0.01);\n}\n/**\n * Convert media query value to string\n */\n\n\nfunction toMediaString(value) {\n return isNumber(value) ? value + \"px\" : value;\n}\n\nvar _excluded = [\"query\"],\n _excluded2 = [\"query\"];\n\n/**\n * React hook used to get the current responsive media breakpoint.\n *\n * @param defaultBreakpoint default breakpoint name\n * (in non-window environments like SSR)\n *\n * For SSR, you can use a package like [is-mobile](https://github.com/kaimallea/isMobile)\n * to get the default breakpoint value from the user-agent\n */\nfunction useBreakpoint(defaultBreakpoint) {\n var _useTheme = useTheme(),\n breakpoints = _useTheme.breakpoints;\n\n var env = useEnvironment();\n var mediaQueries = React__default.useMemo(function () {\n return createMediaQueries(_extends({\n base: \"0px\"\n }, breakpoints));\n }, [breakpoints]);\n\n var _React$useState = React__default.useState(function () {\n if (!defaultBreakpoint) {\n return undefined;\n }\n\n var mediaQuery = mediaQueries.find(function (_ref) {\n var breakpoint = _ref.breakpoint;\n return breakpoint === defaultBreakpoint;\n });\n\n if (mediaQuery) {\n mediaQuery.query;\n var breakpoint = _objectWithoutPropertiesLoose(mediaQuery, _excluded);\n\n return breakpoint;\n }\n\n return undefined;\n }),\n currentBreakpoint = _React$useState[0],\n setCurrentBreakpoint = _React$useState[1];\n\n var current = currentBreakpoint == null ? void 0 : currentBreakpoint.breakpoint;\n var update = React__default.useCallback(function (query, breakpoint) {\n if (query.matches && current !== breakpoint.breakpoint) {\n setCurrentBreakpoint(breakpoint);\n }\n }, [current]);\n React__default.useEffect(function () {\n var listeners = new Set();\n mediaQueries.forEach(function (_ref2) {\n var query = _ref2.query,\n breakpoint = _objectWithoutPropertiesLoose(_ref2, _excluded2);\n\n var mediaQuery = env.window.matchMedia(query); // trigger an initial update to determine media query\n\n update(mediaQuery, breakpoint);\n\n var handleChange = function handleChange() {\n update(mediaQuery, breakpoint);\n }; // add media query-listener\n\n\n mediaQuery.addListener(handleChange); // push the media query list handleChange\n // so we can use it to remove Listener\n\n listeners.add({\n mediaQuery: mediaQuery,\n handleChange: handleChange\n });\n return function () {\n // clean up 1\n mediaQuery.removeListener(handleChange);\n };\n });\n return function () {\n // clean up 2: for safety\n listeners.forEach(function (_ref3) {\n var mediaQuery = _ref3.mediaQuery,\n handleChange = _ref3.handleChange;\n mediaQuery.removeListener(handleChange);\n });\n listeners.clear();\n };\n }, [mediaQueries, breakpoints, update, env.window]);\n return current;\n}\n\nfunction getClosestValue(values, breakpoint, breakpoints$1) {\n if (breakpoints$1 === void 0) {\n breakpoints$1 = breakpoints;\n }\n\n var index = Object.keys(values).indexOf(breakpoint);\n\n if (index !== -1) {\n return values[breakpoint];\n }\n\n var stopIndex = breakpoints$1.indexOf(breakpoint);\n\n while (stopIndex >= 0) {\n var key = breakpoints$1[stopIndex];\n\n if (values[key] != null) {\n index = stopIndex;\n break;\n }\n\n stopIndex -= 1;\n }\n\n if (index !== -1) {\n var _key = breakpoints$1[index];\n return values[_key];\n }\n\n return undefined;\n}\n\n/**\n * React hook for getting the value for the current breakpoint from the\n * provided responsive values object.\n *\n * @param values\n * @param defaultBreakpoint default breakpoint name\n * (in non-window environments like SSR)\n *\n * For SSR, you can use a package like [is-mobile](https://github.com/kaimallea/isMobile)\n * to get the default breakpoint value from the user-agent\n *\n * @example\n * const width = useBreakpointValue({ base: '150px', md: '250px' })\n */\n\nfunction useBreakpointValue(values, defaultBreakpoint) {\n var breakpoint = useBreakpoint(defaultBreakpoint);\n var theme = useTheme();\n if (!breakpoint) return undefined;\n /**\n * Get the non-number breakpoint keys from the provided breakpoints\n */\n\n var breakpoints = Object.keys(theme.breakpoints);\n var obj = isArray(values) ? fromEntries(Object.entries(arrayToObjectNotation(values, breakpoints)).map(function (_ref) {\n var key = _ref[0],\n value = _ref[1];\n return [key, value];\n })) : values;\n return getClosestValue(obj, breakpoint, breakpoints);\n}\n\nexport { Hide, Show, useBreakpoint, useBreakpointValue, useColorModePreference, useMediaQuery, usePrefersReducedMotion, useQuery };\n","import { CloseButton } from '@chakra-ui/close-button';\nimport { chakra, useMultiStyleConfig, omitThemingProps, useTheme, StylesProvider, forwardRef, useStyles } from '@chakra-ui/system';\nimport { mergeWith, determineLazyBehavior, px, callAllHandlers, getRelatedTarget, contains, runIfFn, __DEV__, cx } from '@chakra-ui/utils';\nimport * as React from 'react';\nimport React__default, { useRef, useState, useCallback, useEffect } from 'react';\nimport { createContext, mergeRefs } from '@chakra-ui/react-utils';\nimport { motion } from 'framer-motion';\nimport { useDisclosure, useIds, useFocusOnPointerDown, useFocusOnHide, useFocusOnShow } from '@chakra-ui/hooks';\nimport { usePopper, popperCSSVars } from '@chakra-ui/popper';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nvar _createContext = createContext({\n name: \"PopoverContext\",\n errorMessage: \"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within `<Popover />`\"\n}),\n PopoverProvider = _createContext[0],\n usePopoverContext = _createContext[1];\n\nvar mergeVariants = function mergeVariants(variants) {\n if (!variants) return;\n return mergeWith(variants, {\n enter: {\n visibility: \"visible\"\n },\n exit: {\n transitionEnd: {\n visibility: \"hidden\"\n }\n }\n });\n};\n\nvar scaleFade = {\n exit: {\n opacity: 0,\n scale: 0.95,\n transition: {\n duration: 0.1,\n ease: [0.4, 0, 1, 1]\n }\n },\n enter: {\n scale: 1,\n opacity: 1,\n transition: {\n duration: 0.15,\n ease: [0, 0, 0.2, 1]\n }\n }\n};\nvar Section = motion(chakra.section);\nvar PopoverTransition = /*#__PURE__*/React__default.forwardRef(function (props, ref) {\n var _usePopoverContext = usePopoverContext(),\n isOpen = _usePopoverContext.isOpen;\n\n return /*#__PURE__*/React__default.createElement(Section, _extends({\n ref: ref,\n variants: mergeVariants(props.variants)\n }, props, {\n initial: false,\n animate: isOpen ? \"enter\" : \"exit\"\n }));\n});\nPopoverTransition.defaultProps = {\n variants: scaleFade\n};\n\nvar _excluded$1 = [\"closeOnBlur\", \"closeOnEsc\", \"initialFocusRef\", \"id\", \"returnFocusOnClose\", \"autoFocus\", \"arrowSize\", \"arrowShadowColor\", \"trigger\", \"openDelay\", \"closeDelay\", \"isLazy\", \"lazyBehavior\", \"computePositionOnMount\"];\nvar TRIGGER = {\n click: \"click\",\n hover: \"hover\"\n};\n\n/**\n * @internal\n */\nfunction usePopover(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n _props$closeOnBlur = _props.closeOnBlur,\n closeOnBlur = _props$closeOnBlur === void 0 ? true : _props$closeOnBlur,\n _props$closeOnEsc = _props.closeOnEsc,\n closeOnEsc = _props$closeOnEsc === void 0 ? true : _props$closeOnEsc,\n initialFocusRef = _props.initialFocusRef,\n id = _props.id,\n _props$returnFocusOnC = _props.returnFocusOnClose,\n returnFocusOnClose = _props$returnFocusOnC === void 0 ? true : _props$returnFocusOnC,\n _props$autoFocus = _props.autoFocus,\n autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,\n arrowSize = _props.arrowSize,\n arrowShadowColor = _props.arrowShadowColor,\n _props$trigger = _props.trigger,\n trigger = _props$trigger === void 0 ? TRIGGER.click : _props$trigger,\n _props$openDelay = _props.openDelay,\n openDelay = _props$openDelay === void 0 ? 200 : _props$openDelay,\n _props$closeDelay = _props.closeDelay,\n closeDelay = _props$closeDelay === void 0 ? 200 : _props$closeDelay,\n isLazy = _props.isLazy,\n _props$lazyBehavior = _props.lazyBehavior,\n lazyBehavior = _props$lazyBehavior === void 0 ? \"unmount\" : _props$lazyBehavior,\n computePositionOnMount = _props.computePositionOnMount,\n popperProps = _objectWithoutPropertiesLoose(_props, _excluded$1);\n\n var _useDisclosure = useDisclosure(props),\n isOpen = _useDisclosure.isOpen,\n onClose = _useDisclosure.onClose,\n onOpen = _useDisclosure.onOpen,\n onToggle = _useDisclosure.onToggle;\n\n var triggerRef = useRef(null);\n var popoverRef = useRef(null);\n var isHoveringRef = useRef(false);\n var hasBeenOpened = useRef(false);\n\n if (isOpen) {\n hasBeenOpened.current = true;\n }\n\n var _useState = useState(false),\n hasHeader = _useState[0],\n setHasHeader = _useState[1];\n\n var _useState2 = useState(false),\n hasBody = _useState2[0],\n setHasBody = _useState2[1];\n\n var _useIds = useIds(id, \"popover-trigger\", \"popover-content\", \"popover-header\", \"popover-body\"),\n triggerId = _useIds[0],\n popoverId = _useIds[1],\n headerId = _useIds[2],\n bodyId = _useIds[3];\n\n var _usePopper = usePopper(_extends({}, popperProps, {\n enabled: isOpen || !!computePositionOnMount\n })),\n referenceRef = _usePopper.referenceRef,\n getArrowProps = _usePopper.getArrowProps,\n getPopperProps = _usePopper.getPopperProps,\n getArrowInnerProps = _usePopper.getArrowInnerProps,\n forceUpdate = _usePopper.forceUpdate;\n\n useFocusOnPointerDown({\n enabled: isOpen,\n ref: triggerRef\n });\n useFocusOnHide(popoverRef, {\n focusRef: triggerRef,\n visible: isOpen,\n shouldFocus: returnFocusOnClose && trigger === TRIGGER.click\n });\n useFocusOnShow(popoverRef, {\n focusRef: initialFocusRef,\n visible: isOpen,\n shouldFocus: autoFocus && trigger === TRIGGER.click\n });\n var shouldRenderChildren = determineLazyBehavior({\n hasBeenSelected: hasBeenOpened.current,\n isLazy: isLazy,\n lazyBehavior: lazyBehavior,\n isSelected: isOpen\n });\n var getPopoverProps = useCallback(function (props, _ref) {\n var _extends2;\n\n if (props === void 0) {\n props = {};\n }\n\n if (_ref === void 0) {\n _ref = null;\n }\n\n var popoverProps = _extends({}, props, {\n style: _extends({}, props.style, (_extends2 = {\n transformOrigin: popperCSSVars.transformOrigin.varRef\n }, _extends2[popperCSSVars.arrowSize[\"var\"]] = arrowSize ? px(arrowSize) : undefined, _extends2[popperCSSVars.arrowShadowColor[\"var\"]] = arrowShadowColor, _extends2)),\n ref: mergeRefs(popoverRef, _ref),\n children: shouldRenderChildren ? props.children : null,\n id: popoverId,\n tabIndex: -1,\n role: \"dialog\",\n onKeyDown: callAllHandlers(props.onKeyDown, function (event) {\n if (closeOnEsc && event.key === \"Escape\") {\n onClose();\n }\n }),\n onBlur: callAllHandlers(props.onBlur, function (event) {\n var relatedTarget = getRelatedTarget(event);\n var targetIsPopover = contains(popoverRef.current, relatedTarget);\n var targetIsTrigger = contains(triggerRef.current, relatedTarget);\n var isValidBlur = !targetIsPopover && !targetIsTrigger;\n\n if (isOpen && closeOnBlur && isValidBlur) {\n onClose();\n }\n }),\n \"aria-labelledby\": hasHeader ? headerId : undefined,\n \"aria-describedby\": hasBody ? bodyId : undefined\n });\n\n if (trigger === TRIGGER.hover) {\n popoverProps.role = \"tooltip\";\n popoverProps.onMouseEnter = callAllHandlers(props.onMouseEnter, function () {\n isHoveringRef.current = true;\n });\n popoverProps.onMouseLeave = callAllHandlers(props.onMouseLeave, function () {\n isHoveringRef.current = false;\n setTimeout(onClose, closeDelay);\n });\n }\n\n return popoverProps;\n }, [shouldRenderChildren, popoverId, hasHeader, headerId, hasBody, bodyId, trigger, closeOnEsc, onClose, isOpen, closeOnBlur, closeDelay, arrowShadowColor, arrowSize]);\n var getPopoverPositionerProps = useCallback(function (props, forwardedRef) {\n if (props === void 0) {\n props = {};\n }\n\n if (forwardedRef === void 0) {\n forwardedRef = null;\n }\n\n return getPopperProps(_extends({}, props, {\n style: _extends({\n visibility: isOpen ? \"visible\" : \"hidden\"\n }, props.style)\n }), forwardedRef);\n }, [isOpen, getPopperProps]);\n var openTimeout = useRef();\n var closeTimeout = useRef();\n var getTriggerProps = useCallback(function (props, _ref) {\n if (props === void 0) {\n props = {};\n }\n\n if (_ref === void 0) {\n _ref = null;\n }\n\n var triggerProps = _extends({}, props, {\n ref: mergeRefs(triggerRef, _ref, referenceRef),\n id: triggerId,\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": isOpen,\n \"aria-controls\": popoverId\n });\n\n if (trigger === TRIGGER.click) {\n triggerProps.onClick = callAllHandlers(props.onClick, onToggle);\n }\n\n if (trigger === TRIGGER.hover) {\n /**\n * Any content that shows on pointer hover should also show on keyboard focus.\n * Consider focus and blur to be the `hover` for keyboard users.\n *\n * @see https://www.w3.org/WAI/WCAG21/Understanding/content-on-hover-or-focus.html\n */\n triggerProps.onFocus = callAllHandlers(props.onFocus, onOpen);\n triggerProps.onBlur = callAllHandlers(props.onBlur, onClose);\n /**\n * Any content that shows on hover or focus must be dismissible.\n * This case pressing `Escape` will dismiss the popover\n */\n\n triggerProps.onKeyDown = callAllHandlers(props.onKeyDown, function (event) {\n if (event.key === \"Escape\") {\n onClose();\n }\n });\n triggerProps.onMouseEnter = callAllHandlers(props.onMouseEnter, function () {\n isHoveringRef.current = true;\n openTimeout.current = window.setTimeout(onOpen, openDelay);\n });\n triggerProps.onMouseLeave = callAllHandlers(props.onMouseLeave, function () {\n isHoveringRef.current = false;\n\n if (openTimeout.current) {\n clearTimeout(openTimeout.current);\n openTimeout.current = undefined;\n }\n\n closeTimeout.current = window.setTimeout(function () {\n if (isHoveringRef.current === false) {\n onClose();\n }\n }, closeDelay);\n });\n }\n\n return triggerProps;\n }, [triggerId, isOpen, popoverId, trigger, referenceRef, onToggle, onOpen, onClose, openDelay, closeDelay]);\n useEffect(function () {\n return function () {\n if (openTimeout.current) {\n clearTimeout(openTimeout.current);\n }\n\n if (closeTimeout.current) {\n clearTimeout(closeTimeout.current);\n }\n };\n }, []);\n var getHeaderProps = useCallback(function (props, ref) {\n if (props === void 0) {\n props = {};\n }\n\n if (ref === void 0) {\n ref = null;\n }\n\n return _extends({}, props, {\n id: headerId,\n ref: mergeRefs(ref, function (node) {\n setHasHeader(!!node);\n })\n });\n }, [headerId]);\n var getBodyProps = useCallback(function (props, ref) {\n if (props === void 0) {\n props = {};\n }\n\n if (ref === void 0) {\n ref = null;\n }\n\n return _extends({}, props, {\n id: bodyId,\n ref: mergeRefs(ref, function (node) {\n setHasBody(!!node);\n })\n });\n }, [bodyId]);\n return {\n forceUpdate: forceUpdate,\n isOpen: isOpen,\n onClose: onClose,\n getArrowProps: getArrowProps,\n getArrowInnerProps: getArrowInnerProps,\n getPopoverPositionerProps: getPopoverPositionerProps,\n getPopoverProps: getPopoverProps,\n getTriggerProps: getTriggerProps,\n getHeaderProps: getHeaderProps,\n getBodyProps: getBodyProps\n };\n}\n\nvar _excluded = [\"children\"],\n _excluded2 = [\"rootProps\"];\n\n/**\n * Popover is used to bring attention to specific user interface elements,\n * typically to suggest an action or to guide users through a new experience.\n */\nvar Popover = function Popover(props) {\n var styles = useMultiStyleConfig(\"Popover\", props);\n\n var _omitThemingProps = omitThemingProps(props),\n children = _omitThemingProps.children,\n rest = _objectWithoutPropertiesLoose(_omitThemingProps, _excluded);\n\n var theme = useTheme();\n var context = usePopover(_extends({}, rest, {\n direction: theme.direction\n }));\n return /*#__PURE__*/React.createElement(PopoverProvider, {\n value: context\n }, /*#__PURE__*/React.createElement(StylesProvider, {\n value: styles\n }, runIfFn(children, {\n isOpen: context.isOpen,\n onClose: context.onClose,\n forceUpdate: context.forceUpdate\n })));\n};\n\nif (__DEV__) {\n Popover.displayName = \"Popover\";\n}\n/**\n * PopoverTrigger opens the popover's content. It must be an interactive element\n * such as `button` or `a`.\n */\n\n\nvar PopoverTrigger = function PopoverTrigger(props) {\n // enforce a single child\n var child = React.Children.only(props.children);\n\n var _usePopoverContext = usePopoverContext(),\n getTriggerProps = _usePopoverContext.getTriggerProps;\n\n return /*#__PURE__*/React.cloneElement(child, getTriggerProps(child.props, child.ref));\n};\n\nif (__DEV__) {\n PopoverTrigger.displayName = \"PopoverTrigger\";\n}\n\nvar PopoverContent = /*#__PURE__*/forwardRef(function (props, ref) {\n var rootProps = props.rootProps,\n contentProps = _objectWithoutPropertiesLoose(props, _excluded2);\n\n var _usePopoverContext2 = usePopoverContext(),\n getPopoverProps = _usePopoverContext2.getPopoverProps,\n getPopoverPositionerProps = _usePopoverContext2.getPopoverPositionerProps;\n\n var styles = useStyles();\n\n var contentStyles = _extends({\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\"\n }, styles.content);\n\n return /*#__PURE__*/React.createElement(chakra.div, _extends({}, getPopoverPositionerProps(rootProps), {\n __css: styles.popper,\n className: \"chakra-popover__popper\"\n }), /*#__PURE__*/React.createElement(PopoverTransition, _extends({}, getPopoverProps(contentProps, ref), {\n className: cx(\"chakra-popover__content\", props.className),\n __css: contentStyles\n })));\n});\n\nif (__DEV__) {\n PopoverContent.displayName = \"PopoverContent\";\n}\n\n/**\n * PopoverHeader is the accessible header or label\n * for the popover's content and it is first announced by screenreaders.\n */\nvar PopoverHeader = /*#__PURE__*/forwardRef(function (props, ref) {\n var _usePopoverContext3 = usePopoverContext(),\n getHeaderProps = _usePopoverContext3.getHeaderProps;\n\n var styles = useStyles();\n return /*#__PURE__*/React.createElement(chakra.header, _extends({}, getHeaderProps(props, ref), {\n className: cx(\"chakra-popover__header\", props.className),\n __css: styles.header\n }));\n});\n\nif (__DEV__) {\n PopoverHeader.displayName = \"PopoverHeader\";\n}\n\n/**\n * PopoverBody is the main content area for the popover. Should contain\n * at least one interactive element.\n */\nvar PopoverBody = /*#__PURE__*/forwardRef(function (props, ref) {\n var _usePopoverContext4 = usePopoverContext(),\n getBodyProps = _usePopoverContext4.getBodyProps;\n\n var styles = useStyles();\n return /*#__PURE__*/React.createElement(chakra.div, _extends({}, getBodyProps(props, ref), {\n className: cx(\"chakra-popover__body\", props.className),\n __css: styles.body\n }));\n});\n\nif (__DEV__) {\n PopoverBody.displayName = \"PopoverBody\";\n}\n\nvar PopoverFooter = function PopoverFooter(props) {\n var styles = useStyles();\n return /*#__PURE__*/React.createElement(chakra.footer, _extends({}, props, {\n className: cx(\"chakra-popover__footer\", props.className),\n __css: styles.footer\n }));\n};\n\nif (__DEV__) {\n PopoverFooter.displayName = \"PopoverFooter\";\n}\n\nvar PopoverCloseButton = function PopoverCloseButton(props) {\n var _usePopoverContext5 = usePopoverContext(),\n onClose = _usePopoverContext5.onClose;\n\n var styles = useStyles();\n return /*#__PURE__*/React.createElement(CloseButton, _extends({\n size: \"sm\",\n onClick: onClose,\n className: cx(\"chakra-popover__close-btn\", props.className),\n __css: styles.closeButton\n }, props));\n};\n\nif (__DEV__) {\n PopoverCloseButton.displayName = \"PopoverCloseButton\";\n}\n\nvar PopoverArrow = function PopoverArrow(props) {\n var _ref;\n\n var bg = props.bg,\n bgColor = props.bgColor,\n backgroundColor = props.backgroundColor;\n\n var _usePopoverContext6 = usePopoverContext(),\n getArrowProps = _usePopoverContext6.getArrowProps,\n getArrowInnerProps = _usePopoverContext6.getArrowInnerProps;\n\n var styles = useStyles();\n var arrowBg = (_ref = bg != null ? bg : bgColor) != null ? _ref : backgroundColor;\n return /*#__PURE__*/React.createElement(chakra.div, _extends({}, getArrowProps(), {\n className: \"chakra-popover__arrow-positioner\"\n }), /*#__PURE__*/React.createElement(chakra.div, _extends({\n className: cx(\"chakra-popover__arrow\", props.className)\n }, getArrowInnerProps(props), {\n __css: _extends({}, styles.arrow, {\n \"--popper-arrow-bg\": arrowBg ? \"colors.\" + arrowBg + \", \" + arrowBg : undefined\n })\n })));\n};\n\nif (__DEV__) {\n PopoverArrow.displayName = \"PopoverArrow\";\n}\n\nexport { Popover, PopoverArrow, PopoverBody, PopoverCloseButton, PopoverContent, PopoverFooter, PopoverHeader, PopoverTrigger, usePopover, usePopoverContext };\n","import { forwardRef, chakra, useMultiStyleConfig, omitThemingProps, layoutPropNames } from '@chakra-ui/system';\nimport { isInputEvent, cx, __DEV__, warn, dataAttr, callAllHandlers, ariaAttr, callAll, split } from '@chakra-ui/utils';\nimport * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { mergeRefs, createContext } from '@chakra-ui/react-utils';\nimport { useControllableProp, useId, useBoolean } from '@chakra-ui/hooks';\nimport { useFormControlContext } from '@chakra-ui/form-control';\nimport { visuallyHiddenStyle } from '@chakra-ui/visually-hidden';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar _excluded$3 = [\"onChange\", \"value\", \"defaultValue\", \"name\", \"isDisabled\", \"isFocusable\", \"isNative\"];\n\n/**\n * React hook to manage a group of radio inputs\n */\nfunction useRadioGroup(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n onChangeProp = _props.onChange,\n valueProp = _props.value,\n defaultValue = _props.defaultValue,\n nameProp = _props.name,\n isDisabled = _props.isDisabled,\n isFocusable = _props.isFocusable,\n isNative = _props.isNative,\n htmlProps = _objectWithoutPropertiesLoose(_props, _excluded$3);\n\n var _React$useState = React.useState(defaultValue || \"\"),\n valueState = _React$useState[0],\n setValue = _React$useState[1];\n\n var _useControllableProp = useControllableProp(valueProp, valueState),\n isControlled = _useControllableProp[0],\n value = _useControllableProp[1];\n\n var ref = React.useRef(null);\n var focus = React.useCallback(function () {\n var rootNode = ref.current;\n if (!rootNode) return;\n var query = \"input:not(:disabled):checked\";\n var firstEnabledAndCheckedInput = rootNode.querySelector(query);\n\n if (firstEnabledAndCheckedInput) {\n firstEnabledAndCheckedInput.focus();\n return;\n }\n\n query = \"input:not(:disabled)\";\n var firstEnabledInput = rootNode.querySelector(query);\n firstEnabledInput == null ? void 0 : firstEnabledInput.focus();\n }, []);\n /**\n * All radio options must use the same name\n */\n\n var fallbackName = useId(undefined, \"radio\");\n var name = nameProp || fallbackName;\n var onChange = React.useCallback(function (eventOrValue) {\n var nextValue = isInputEvent(eventOrValue) ? eventOrValue.target.value : eventOrValue;\n\n if (!isControlled) {\n setValue(nextValue);\n }\n\n onChangeProp == null ? void 0 : onChangeProp(String(nextValue));\n }, [onChangeProp, isControlled]);\n var getRootProps = React.useCallback(function (props, forwardedRef) {\n if (props === void 0) {\n props = {};\n }\n\n if (forwardedRef === void 0) {\n forwardedRef = null;\n }\n\n return _extends({}, props, {\n ref: mergeRefs(forwardedRef, ref),\n role: \"radiogroup\"\n });\n }, []);\n var getRadioProps = React.useCallback(function (props, ref) {\n var _extends2;\n\n if (props === void 0) {\n props = {};\n }\n\n if (ref === void 0) {\n ref = null;\n }\n\n var checkedKey = isNative ? \"checked\" : \"isChecked\";\n return _extends({}, props, (_extends2 = {\n ref: ref,\n name: name\n }, _extends2[checkedKey] = value != null ? props.value === value : undefined, _extends2.onChange = onChange, _extends2[\"data-radiogroup\"] = true, _extends2));\n }, [isNative, name, onChange, value]);\n return {\n getRootProps: getRootProps,\n getRadioProps: getRadioProps,\n name: name,\n ref: ref,\n focus: focus,\n setValue: setValue,\n value: value,\n onChange: onChange,\n isDisabled: isDisabled,\n isFocusable: isFocusable,\n htmlProps: htmlProps\n };\n}\n\nvar _excluded$2 = [\"colorScheme\", \"size\", \"variant\", \"children\", \"className\", \"isDisabled\", \"isFocusable\"];\n\nvar _createContext = createContext({\n name: \"RadioGroupContext\",\n strict: false\n}),\n RadioGroupProvider = _createContext[0],\n useRadioGroupContext = _createContext[1];\n\n/**\n * Used for multiple radios which are bound in one group,\n * and it indicates which option is selected.\n *\n * @see Docs https://chakra-ui.com/radio\n */\nvar RadioGroup = /*#__PURE__*/forwardRef(function (props, ref) {\n var colorScheme = props.colorScheme,\n size = props.size,\n variant = props.variant,\n children = props.children,\n className = props.className,\n isDisabled = props.isDisabled,\n isFocusable = props.isFocusable,\n rest = _objectWithoutPropertiesLoose(props, _excluded$2);\n\n var _useRadioGroup = useRadioGroup(rest),\n value = _useRadioGroup.value,\n onChange = _useRadioGroup.onChange,\n getRootProps = _useRadioGroup.getRootProps,\n name = _useRadioGroup.name,\n htmlProps = _useRadioGroup.htmlProps;\n\n var group = React.useMemo(function () {\n return {\n name: name,\n size: size,\n onChange: onChange,\n colorScheme: colorScheme,\n value: value,\n variant: variant,\n isDisabled: isDisabled,\n isFocusable: isFocusable\n };\n }, [name, size, onChange, colorScheme, value, variant, isDisabled, isFocusable]);\n var groupProps = getRootProps(htmlProps, ref);\n\n var _className = cx(\"chakra-radio-group\", className);\n\n return /*#__PURE__*/React.createElement(RadioGroupProvider, {\n value: group\n }, /*#__PURE__*/React.createElement(chakra.div, _extends({}, groupProps, {\n className: _className\n }), children));\n});\n\nif (__DEV__) {\n RadioGroup.displayName = \"RadioGroup\";\n}\n\nvar _excluded$1 = [\"defaultIsChecked\", \"defaultChecked\", \"isChecked\", \"isFocusable\", \"isDisabled\", \"isReadOnly\", \"isRequired\", \"onChange\", \"isInvalid\", \"name\", \"value\", \"id\", \"data-radiogroup\"];\n/**\n * @todo use the `useClickable` hook here\n * to manage the isFocusable & isDisabled props\n */\n\nfunction useRadio(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n defaultIsChecked = _props.defaultIsChecked,\n _props$defaultChecked = _props.defaultChecked,\n defaultChecked = _props$defaultChecked === void 0 ? defaultIsChecked : _props$defaultChecked,\n isCheckedProp = _props.isChecked,\n isFocusable = _props.isFocusable,\n isDisabledProp = _props.isDisabled,\n isReadOnlyProp = _props.isReadOnly,\n isRequiredProp = _props.isRequired,\n onChange = _props.onChange,\n isInvalidProp = _props.isInvalid,\n name = _props.name,\n value = _props.value,\n idProp = _props.id,\n dataRadioGroup = _props[\"data-radiogroup\"],\n htmlProps = _objectWithoutPropertiesLoose(_props, _excluded$1);\n\n var uuid = useId(undefined, \"radio\");\n var formControl = useFormControlContext();\n var group = useRadioGroupContext();\n var isWithinRadioGroup = !!group || !!dataRadioGroup;\n var isWithinFormControl = !!formControl;\n var id = isWithinFormControl && !isWithinRadioGroup ? formControl.id : uuid;\n id = idProp != null ? idProp : id;\n var isDisabled = isDisabledProp != null ? isDisabledProp : formControl == null ? void 0 : formControl.isDisabled;\n var isReadOnly = isReadOnlyProp != null ? isReadOnlyProp : formControl == null ? void 0 : formControl.isReadOnly;\n var isRequired = isRequiredProp != null ? isRequiredProp : formControl == null ? void 0 : formControl.isRequired;\n var isInvalid = isInvalidProp != null ? isInvalidProp : formControl == null ? void 0 : formControl.isInvalid;\n\n var _useBoolean = useBoolean(),\n isFocused = _useBoolean[0],\n setFocused = _useBoolean[1];\n\n var _useBoolean2 = useBoolean(),\n isHovered = _useBoolean2[0],\n setHovering = _useBoolean2[1];\n\n var _useBoolean3 = useBoolean(),\n isActive = _useBoolean3[0],\n setActive = _useBoolean3[1];\n\n var _useState = useState(Boolean(defaultChecked)),\n isCheckedState = _useState[0],\n setChecked = _useState[1];\n\n var _useControllableProp = useControllableProp(isCheckedProp, isCheckedState),\n isControlled = _useControllableProp[0],\n isChecked = _useControllableProp[1];\n\n warn({\n condition: !!defaultIsChecked,\n message: 'The \"defaultIsChecked\" prop has been deprecated and will be removed in a future version. ' + 'Please use the \"defaultChecked\" prop instead, which mirrors default React checkbox behavior.'\n });\n var handleChange = useCallback(function (event) {\n if (isReadOnly || isDisabled) {\n event.preventDefault();\n return;\n }\n\n if (!isControlled) {\n setChecked(event.target.checked);\n }\n\n onChange == null ? void 0 : onChange(event);\n }, [isControlled, isDisabled, isReadOnly, onChange]);\n var onKeyDown = useCallback(function (event) {\n if (event.key === \" \") {\n setActive.on();\n }\n }, [setActive]);\n var onKeyUp = useCallback(function (event) {\n if (event.key === \" \") {\n setActive.off();\n }\n }, [setActive]);\n var getCheckboxProps = useCallback(function (props, ref) {\n if (props === void 0) {\n props = {};\n }\n\n if (ref === void 0) {\n ref = null;\n }\n\n return _extends({}, props, {\n ref: ref,\n \"data-active\": dataAttr(isActive),\n \"data-hover\": dataAttr(isHovered),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-invalid\": dataAttr(isInvalid),\n \"data-checked\": dataAttr(isChecked),\n \"data-focus\": dataAttr(isFocused),\n \"data-readonly\": dataAttr(isReadOnly),\n \"aria-hidden\": true,\n onMouseDown: callAllHandlers(props.onMouseDown, setActive.on),\n onMouseUp: callAllHandlers(props.onMouseUp, setActive.off),\n onMouseEnter: callAllHandlers(props.onMouseEnter, setHovering.on),\n onMouseLeave: callAllHandlers(props.onMouseLeave, setHovering.off)\n });\n }, [isActive, isHovered, isDisabled, isInvalid, isChecked, isFocused, isReadOnly, setActive.on, setActive.off, setHovering.on, setHovering.off]);\n\n var _ref = formControl != null ? formControl : {},\n onFocus = _ref.onFocus,\n onBlur = _ref.onBlur;\n\n var getInputProps = useCallback(function (props, ref) {\n if (props === void 0) {\n props = {};\n }\n\n if (ref === void 0) {\n ref = null;\n }\n\n var trulyDisabled = isDisabled && !isFocusable;\n return _extends({}, props, {\n id: id,\n ref: ref,\n type: \"radio\",\n name: name,\n value: value,\n onChange: callAllHandlers(props.onChange, handleChange),\n onBlur: callAllHandlers(onBlur, props.onBlur, setFocused.off),\n onFocus: callAllHandlers(onFocus, props.onFocus, setFocused.on),\n onKeyDown: callAllHandlers(props.onKeyDown, onKeyDown),\n onKeyUp: callAllHandlers(props.onKeyUp, onKeyUp),\n checked: isChecked,\n disabled: trulyDisabled,\n readOnly: isReadOnly,\n required: isRequired,\n \"aria-invalid\": ariaAttr(isInvalid),\n \"aria-disabled\": ariaAttr(trulyDisabled),\n \"aria-required\": ariaAttr(isRequired),\n \"data-readonly\": dataAttr(isReadOnly),\n style: visuallyHiddenStyle\n });\n }, [isDisabled, isFocusable, id, name, value, handleChange, onBlur, setFocused, onFocus, onKeyDown, onKeyUp, isChecked, isReadOnly, isRequired, isInvalid]);\n\n var getLabelProps = function getLabelProps(props, ref) {\n if (props === void 0) {\n props = {};\n }\n\n if (ref === void 0) {\n ref = null;\n }\n\n return _extends({}, props, {\n ref: ref,\n onMouseDown: callAllHandlers(props.onMouseDown, stop),\n onTouchStart: callAllHandlers(props.onTouchStart, stop),\n \"data-disabled\": dataAttr(isDisabled),\n \"data-checked\": dataAttr(isChecked),\n \"data-invalid\": dataAttr(isInvalid)\n });\n };\n\n var getRootProps = function getRootProps(props, ref) {\n if (ref === void 0) {\n ref = null;\n }\n\n return _extends({}, props, {\n ref: ref,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-checked\": dataAttr(isChecked),\n \"data-invalid\": dataAttr(isInvalid)\n });\n };\n\n return {\n state: {\n isInvalid: isInvalid,\n isFocused: isFocused,\n isChecked: isChecked,\n isActive: isActive,\n isHovered: isHovered,\n isDisabled: isDisabled,\n isReadOnly: isReadOnly,\n isRequired: isRequired\n },\n getCheckboxProps: getCheckboxProps,\n getInputProps: getInputProps,\n getLabelProps: getLabelProps,\n getRootProps: getRootProps,\n htmlProps: htmlProps\n };\n}\n/**\n * Prevent `onBlur` being fired when the checkbox label is touched\n */\n\nfunction stop(event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nvar _excluded = [\"spacing\", \"children\", \"isFullWidth\", \"isDisabled\", \"isFocusable\"];\n\n/**\n * Radio component is used in forms when a user needs to select a single value from\n * several options.\n *\n * @see Docs https://chakra-ui.com/radio\n */\nvar Radio = /*#__PURE__*/forwardRef(function (props, ref) {\n var _props$name;\n\n var group = useRadioGroupContext();\n var onChangeProp = props.onChange,\n valueProp = props.value;\n var styles = useMultiStyleConfig(\"Radio\", _extends({}, group, props));\n var ownProps = omitThemingProps(props);\n\n var _ownProps$spacing = ownProps.spacing,\n spacing = _ownProps$spacing === void 0 ? \"0.5rem\" : _ownProps$spacing,\n children = ownProps.children,\n isFullWidth = ownProps.isFullWidth,\n _ownProps$isDisabled = ownProps.isDisabled,\n isDisabled = _ownProps$isDisabled === void 0 ? group == null ? void 0 : group.isDisabled : _ownProps$isDisabled,\n _ownProps$isFocusable = ownProps.isFocusable,\n isFocusable = _ownProps$isFocusable === void 0 ? group == null ? void 0 : group.isFocusable : _ownProps$isFocusable,\n rest = _objectWithoutPropertiesLoose(ownProps, _excluded);\n\n var isChecked = props.isChecked;\n\n if ((group == null ? void 0 : group.value) != null && valueProp != null) {\n isChecked = group.value === valueProp;\n }\n\n var onChange = onChangeProp;\n\n if (group != null && group.onChange && valueProp != null) {\n onChange = callAll(group.onChange, onChangeProp);\n }\n\n var name = (_props$name = props == null ? void 0 : props.name) != null ? _props$name : group == null ? void 0 : group.name;\n\n var _useRadio = useRadio(_extends({}, rest, {\n isChecked: isChecked,\n isFocusable: isFocusable,\n isDisabled: isDisabled,\n onChange: onChange,\n name: name\n })),\n getInputProps = _useRadio.getInputProps,\n getCheckboxProps = _useRadio.getCheckboxProps,\n getLabelProps = _useRadio.getLabelProps,\n getRootProps = _useRadio.getRootProps,\n htmlProps = _useRadio.htmlProps;\n\n var _split = split(htmlProps, layoutPropNames),\n layoutProps = _split[0],\n otherProps = _split[1];\n\n var checkboxProps = getCheckboxProps(otherProps);\n var inputProps = getInputProps({}, ref);\n var labelProps = getLabelProps();\n var rootProps = Object.assign({}, layoutProps, getRootProps());\n\n var rootStyles = _extends({\n width: isFullWidth ? \"full\" : undefined,\n display: \"inline-flex\",\n alignItems: \"center\",\n verticalAlign: \"top\",\n cursor: \"pointer\"\n }, styles.container);\n\n var checkboxStyles = _extends({\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0\n }, styles.control);\n\n var labelStyles = _extends({\n userSelect: \"none\",\n marginStart: spacing\n }, styles.label);\n\n return /*#__PURE__*/React.createElement(chakra.label, _extends({\n className: \"chakra-radio\"\n }, rootProps, {\n __css: rootStyles\n }), /*#__PURE__*/React.createElement(\"input\", _extends({\n className: \"chakra-radio__input\"\n }, inputProps)), /*#__PURE__*/React.createElement(chakra.span, _extends({\n className: \"chakra-radio__control\"\n }, checkboxProps, {\n __css: checkboxStyles\n })), children && /*#__PURE__*/React.createElement(chakra.span, _extends({\n className: \"chakra-radio__label\"\n }, labelProps, {\n __css: labelStyles\n }), children));\n});\n\nif (__DEV__) {\n Radio.displayName = \"Radio\";\n}\n\nexport { Radio, RadioGroup, useRadio, useRadioGroup, useRadioGroupContext };\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var diff = dateLeft.getTime() - dateRight.getTime();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}","import assign from \"../assign/index.js\";\nexport default function cloneObject(dirtyObject) {\n return assign({}, dirtyObject);\n}","export default function assign(target, dirtyObject) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n dirtyObject = dirtyObject || {};\n\n for (var property in dirtyObject) {\n if (Object.prototype.hasOwnProperty.call(dirtyObject, property)) {\n target[property] = dirtyObject[property];\n }\n }\n\n return target;\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 1000 * 60;\nvar MINUTES_IN_DAY = 60 * 24;\nvar MINUTES_IN_MONTH = MINUTES_IN_DAY * 30;\nvar MINUTES_IN_YEAR = MINUTES_IN_DAY * 365;\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result |\n * |------------------------|---------------------|\n * | 0 ... 59 secs | [0..59] seconds |\n * | 1 ... 59 mins | [1..59] minutes |\n * | 1 ... 23 hrs | [1..23] hours |\n * | 1 ... 29 days | [1..29] days |\n * | 1 ... 11 months | [1..11] months |\n * | 1 ... N years | [1..N] years |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWordsStrict` to `formatDistanceStrict`\n * to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n * consistent with `differenceIn...` functions.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(2015, 0, 2),\n * new Date(2014, 6, 2)\n * ) //=> '6 months'\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(2014, 6, 2),\n * new Date(2015, 0, 2)\n * ) //=> '6 months'\n * ```\n *\n * - `partialMethod` option is renamed to `roundingMethod`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 10, 33, 1),\n * { partialMethod: 'ceil' }\n * ) //=> '2 minutes'\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(1986, 3, 4, 10, 33, 1),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { roundingMethod: 'ceil' }\n * ) //=> '2 minutes'\n * ```\n *\n * - If `roundingMethod` is not specified, it now defaults to `round` instead of `floor`.\n *\n * - `unit` option now accepts one of the strings:\n * 'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 10, 33, 1),\n * { unit: 'm' }\n * )\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(1986, 3, 4, 10, 33, 1),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { unit: 'minute' }\n * )\n * ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * const result = formatDistanceStrict(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * const result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n * unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2015\n * // to 28 January 2015, in months, rounded up?\n * const result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n * unit: 'month',\n * roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> '1 jaro'\n */\n\nexport default function formatDistanceStrict(dirtyDate, dirtyBaseDate) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n requiredArgs(2, arguments);\n var locale = options.locale || defaultLocale;\n\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain localize.formatDistance property');\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value');\n }\n\n var localizeOptions = cloneObject(options);\n localizeOptions.addSuffix = Boolean(options.addSuffix);\n localizeOptions.comparison = comparison;\n var dateLeft;\n var dateRight;\n\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate);\n dateRight = toDate(dirtyDate);\n } else {\n dateLeft = toDate(dirtyDate);\n dateRight = toDate(dirtyBaseDate);\n }\n\n var roundingMethod = options.roundingMethod == null ? 'round' : String(options.roundingMethod);\n var roundingMethodFn;\n\n if (roundingMethod === 'floor') {\n roundingMethodFn = Math.floor;\n } else if (roundingMethod === 'ceil') {\n roundingMethodFn = Math.ceil;\n } else if (roundingMethod === 'round') {\n roundingMethodFn = Math.round;\n } else {\n throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\");\n }\n\n var milliseconds = dateRight.getTime() - dateLeft.getTime();\n var minutes = milliseconds / MILLISECONDS_IN_MINUTE;\n var timezoneOffset = getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft); // Use DST-normalized difference in minutes for years, months and days;\n // use regular difference in minutes for hours, minutes and seconds.\n\n var dstNormalizedMinutes = (milliseconds - timezoneOffset) / MILLISECONDS_IN_MINUTE;\n var unit;\n\n if (options.unit == null) {\n if (minutes < 1) {\n unit = 'second';\n } else if (minutes < 60) {\n unit = 'minute';\n } else if (minutes < MINUTES_IN_DAY) {\n unit = 'hour';\n } else if (dstNormalizedMinutes < MINUTES_IN_MONTH) {\n unit = 'day';\n } else if (dstNormalizedMinutes < MINUTES_IN_YEAR) {\n unit = 'month';\n } else {\n unit = 'year';\n }\n } else {\n unit = String(options.unit);\n } // 0 up to 60 seconds\n\n\n if (unit === 'second') {\n var seconds = roundingMethodFn(milliseconds / 1000);\n return locale.formatDistance('xSeconds', seconds, localizeOptions); // 1 up to 60 mins\n } else if (unit === 'minute') {\n var roundedMinutes = roundingMethodFn(minutes);\n return locale.formatDistance('xMinutes', roundedMinutes, localizeOptions); // 1 up to 24 hours\n } else if (unit === 'hour') {\n var hours = roundingMethodFn(minutes / 60);\n return locale.formatDistance('xHours', hours, localizeOptions); // 1 up to 30 days\n } else if (unit === 'day') {\n var days = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_DAY);\n return locale.formatDistance('xDays', days, localizeOptions); // 1 up to 12 months\n } else if (unit === 'month') {\n var months = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_MONTH);\n return months === 12 && options.unit !== 'month' ? locale.formatDistance('xYears', 1, localizeOptions) : locale.formatDistance('xMonths', months, localizeOptions); // 1 year up to max Date\n } else if (unit === 'year') {\n var years = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_YEAR);\n return locale.formatDistance('xYears', years, localizeOptions);\n }\n\n throw new RangeError(\"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\");\n}","import formatDistanceStrict from \"../formatDistanceStrict/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatDistanceToNowStrict\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result |\n * |------------------------|---------------------|\n * | 0 ... 59 secs | [0..59] seconds |\n * | 1 ... 59 mins | [1..59] minutes |\n * | 1 ... 23 hrs | [1..23] hours |\n * | 1 ... 29 days | [1..29] days |\n * | 1 ... 11 months | [1..11] months |\n * | 1 ... N years | [1..N] years |\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * var result = formatDistanceToNowStrict(\n * new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * var result = formatDistanceToNowStrict(\n * new Date(2015, 0, 1, 0, 0, 15)\n * )\n * //=> '20 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * var result = formatDistanceToNowStrict(\n * new Date(2016, 0, 1),\n * {addSuffix: true}\n * )\n * //=> 'in 1 year'\n *\n * @example\n * // If today is 28 January 2015,\n * // what is the distance to 1 January 2015, in months, rounded up??\n * var result = formatDistanceToNowStrict(new Date(2015, 0, 1), {\n * unit: 'month',\n * roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 August 2016 in Esperanto?\n * var eoLocale = require('date-fns/locale/eo')\n * var result = formatDistanceToNowStrict(\n * new Date(2016, 7, 1),\n * {locale: eoLocale}\n * )\n * //=> '1 jaro'\n */\n\nexport default function formatDistanceToNowStrict(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n return formatDistanceStrict(dirtyDate, Date.now(), dirtyOptions);\n}"],"sourceRoot":""}
|