construct-hub 0.3.56 → 0.3.60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. package/.jsii +2 -2
  2. package/lib/construct-hub.js +1 -1
  3. package/lib/package-sources/code-artifact.js +1 -1
  4. package/lib/package-sources/npmjs.js +1 -1
  5. package/lib/package-tag/index.js +2 -2
  6. package/lib/spdx-license.js +1 -1
  7. package/package.json +3 -3
  8. package/website/asset-manifest.json +27 -27
  9. package/website/assets/checkmark.svg +3 -0
  10. package/website/index.html +1 -1
  11. package/website/service-worker.js +1 -1
  12. package/website/static/js/{1.fa36c516.chunk.js → 1.ddd0fd4b.chunk.js} +2 -2
  13. package/website/static/js/{1.fa36c516.chunk.js.map → 1.ddd0fd4b.chunk.js.map} +1 -1
  14. package/website/static/js/{10.02ced27a.chunk.js → 10.b91108a6.chunk.js} +2 -2
  15. package/website/static/js/10.b91108a6.chunk.js.map +1 -0
  16. package/website/static/js/{12.ba292c49.chunk.js → 12.309ba8f7.chunk.js} +1 -1
  17. package/website/static/js/{12.ba292c49.chunk.js.map → 12.309ba8f7.chunk.js.map} +1 -1
  18. package/website/static/js/{4.d2b9c583.chunk.js → 4.e2ba75d9.chunk.js} +3 -3
  19. package/website/static/js/{4.d2b9c583.chunk.js.LICENSE.txt → 4.e2ba75d9.chunk.js.LICENSE.txt} +0 -0
  20. package/website/static/js/4.e2ba75d9.chunk.js.map +1 -0
  21. package/website/static/js/{5.a2819889.chunk.js → 5.33b63db6.chunk.js} +3 -3
  22. package/website/static/js/{5.a2819889.chunk.js.LICENSE.txt → 5.33b63db6.chunk.js.LICENSE.txt} +0 -0
  23. package/website/static/js/{5.a2819889.chunk.js.map → 5.33b63db6.chunk.js.map} +1 -1
  24. package/website/static/js/{6.7ba5b2e6.chunk.js → 6.0fcd2680.chunk.js} +2 -2
  25. package/website/static/js/{6.7ba5b2e6.chunk.js.map → 6.0fcd2680.chunk.js.map} +1 -1
  26. package/website/static/js/{7.ca8ff14b.chunk.js → 7.123067dc.chunk.js} +2 -2
  27. package/website/static/js/7.123067dc.chunk.js.map +1 -0
  28. package/website/static/js/8.703cfb42.chunk.js +2 -0
  29. package/website/static/js/8.703cfb42.chunk.js.map +1 -0
  30. package/website/static/js/9.a8fecf34.chunk.js +2 -0
  31. package/website/static/js/9.a8fecf34.chunk.js.map +1 -0
  32. package/website/static/js/main.ca806cb8.chunk.js +2 -0
  33. package/website/static/js/main.ca806cb8.chunk.js.map +1 -0
  34. package/website/static/js/{runtime-main.808c6139.js → runtime-main.9acc4988.js} +2 -2
  35. package/website/static/js/{runtime-main.808c6139.js.map → runtime-main.9acc4988.js.map} +1 -1
  36. package/website/static/js/10.02ced27a.chunk.js.map +0 -1
  37. package/website/static/js/4.d2b9c583.chunk.js.map +0 -1
  38. package/website/static/js/7.ca8ff14b.chunk.js.map +0 -1
  39. package/website/static/js/8.bd66730f.chunk.js +0 -2
  40. package/website/static/js/8.bd66730f.chunk.js.map +0 -1
  41. package/website/static/js/9.b8a2bbeb.chunk.js +0 -2
  42. package/website/static/js/9.b8a2bbeb.chunk.js.map +0 -1
  43. package/website/static/js/main.fd06cc71.chunk.js +0 -2
  44. package/website/static/js/main.fd06cc71.chunk.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","hooks/useQueryParams/useQueryParams.ts","hooks/useLanguage/useLanguage.ts","util/css.ts","constants/keywords.ts","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.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","hooks/useConfigValue/useConfigValue.ts","components/Time/Time.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/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","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","useQueryParams","useLocation","useMemo","URLSearchParams","defaultLang","Language","TypeScript","LOCAL_KEY","isValidLang","lang","TEMP_SUPPORTED_LANGUAGES","has","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","makeGridAreas","rows","map","row","col","join","KEYWORD_IGNORE_LIST","Set","PackageCardType","testIds","createTestIds","Detail","dataTestid","icon","label","value","fontSize","Details","currentLanguage","usePackageCard","author","date","metadata","version","data","useStats","downloads","packages","npm","authorName","undefined","Download","toLocaleString","published","Time","Date","format","NavLink","color","to","getSearchPath","query","Heading","comment","constructFramework","cdkType","cdkVersion","majorVersion","as","Link","getPackagePath","align","hasArrow","CDKType","placement","mr","zIndex","fontWeight","wordBreak","lineHeight","noOfLines","Highlight","direction","spacing","alt","src","w","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","borderRadius","h","opacity","LanguageSupportTooltip","Languages","pkg","Tags","keywords","packageTags","tags","filter","tag","Boolean","keyword","v","id","slice","PackageTag","variant","GRID_AREA","gridAreasMd","gridAreasMobile","WideCard","highlights","reduce","accum","highlight","_hover","bg","autoColumns","autoRows","border","boxShadow","wideContainer","gap","p","templateAreas","base","gridArea","display","maxH","overflow","alignItems","alignSelf","templateColumns","templateRows","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","useConfigValue","key","useConfig","forwardRef","ref","formatString","boxProps","dateTime","toISOString","displayName","tagProps","textDecoration","isSupported","langName","LANGUAGE_NAME_MAP","message","FilterHeading","hint","colorScheme","strategy","Question","ml","px","py","shadow","RadioFilter","checkedValue","onValueChange","onChange","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","TAGS","SORT","CDK_TYPE","cdkMajorParam","CDK_MAJOR","cdkMajor","searchAPI","useCatalogSearch","defaultCdkMajor","defaultCdkType","defaultLanguages","defaultQuery","defaultSort","defaultTags","setQuery","limit","CDKFilter","setCdkType","setCdkMajor","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","opts","pkgCount","CDKTYPE_NAME_MAP","length","majorsOptions","majorVersions","a","b","cdkTypeFilter","type","cdk","values","cdkVersionFilter","major","majorNum","CheckboxFilter","checkedValues","getOnChange","disabledHint","isDisabled","isChecked","languageOptions","l1","l2","LanguageFilter","setLanguages","languagesFilter","l","TagFilter","tagFilterGroups","searchFilter","groupName","groupBy","setTags","onTagsChange","t","tagItems","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxW","minW","pos","top","listViews","items","PackageList","memo","cardView","loading","View","ArrowButton","getPageUrl","props","borderColor","mx","disabled","GoToPage","pageLimit","inputValue","setInputValue","push","onSubmit","e","preventDefault","max","min","target","textAlign","PageControls","nextOffset","prevOffset","justify","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","Em","SearchDetails","count","filtered","first","last","searchDetails","SortFilter","setSort","newSort","SortAndFilterDrawer","drawer","useDisclosure","onClick","onOpen","rightIcon","ChevronDown","pb","SortedBy","selected","Button","sortButton","pl","pr","sortDropdown","sortItem","SearchResults","isFirstRender","useRef","onSearch","useCatalogResults","results","getUrl","q","current","SearchBar","onQueryChange","SearchRedesign"],"mappings":"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","file":"static/js/8.703cfb42.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { 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 { 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","/**\n * @fileoverview CSS Related Utils\n */\n\n/**\n * Translates a series of grid row definitions into a grid area string\n * ```ts\n * const gridAreas = makeGridAreas(\n * [\"header\", \"header\", \"header\"],\n * [\"aside\", \"main\", \"main\"],\n * [\"aside\", \"footer\", \"footer\"]\n * ); // `\"header header header\" \"aside main main\" \"aside footer footer\"`\n *\n * const withBlank = makeGridAreas(\n * [\"header\", null, \"main\"]\n * ); // `\"header . main\"`\n * ```\n */\nexport const makeGridAreas = (...rows: (string | null)[][]): string => {\n return rows\n .map((row) => `\"${row.map((col) => col ?? \".\").join(\" \")}\"`)\n .join(\" \");\n};\n","export const KEYWORD_IGNORE_LIST = new Set([\n \"aws-cdk\",\n \"aws\",\n \"awscdk\",\n \"cdk-construct\",\n \"cdk\",\n \"construct\",\n \"constructs\",\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 { DownloadIcon } from \"@chakra-ui/icons\";\nimport { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { useStats } from \"../../contexts/Stats\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\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 icon?: ReactChild;\n label: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n icon,\n label,\n value,\n}) => (\n <Text data-testid={dataTestid} fontSize=\"xs\">\n {icon}\n {icon ? \" \" : \"\"}\n <strong>{label}</strong> {value}\n </Text>\n);\n\nexport const Details: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n\n const {\n author,\n metadata: { date },\n version,\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\n return (\n <>\n {downloads !== undefined && downloads >= 10 ? (\n <Detail\n data-testid={testIds.downloads}\n icon={<DownloadIcon />}\n label={downloads.toLocaleString()}\n value={\"Weekly downloads\"}\n />\n ) : (\n <Detail data-testid={testIds.version} label=\"Version\" value={version} />\n )}\n <Detail\n data-testid={testIds.published}\n label=\"Published\"\n value={\n <Time date={new Date(date)} fontSize=\"xs\" format=\"MMM dd, yyyy\" />\n }\n />\n <Detail\n data-testid={testIds.author}\n label=\"Author\"\n value={\n <NavLink\n color=\"blue.500\"\n to={getSearchPath({\n query: authorName,\n language: currentLanguage,\n })}\n >\n {authorName}\n </NavLink>\n }\n />\n </>\n );\n};\n","import {\n Flex,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n Tooltip,\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 { CDKTypeIcon, CDKTypeText } from \"../CDKType\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const {\n comment,\n description,\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 {cdkType && (\n <Tooltip\n hasArrow\n label={<CDKTypeText majorVersion={cdkVersion} name={cdkType} />}\n placement=\"top\"\n >\n <CDKTypeIcon mr={2} name={cdkType} zIndex={1} />\n </Tooltip>\n )}\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"break-all\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\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 {comment && (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text\n as=\"span\"\n color=\"blue.500\"\n fontSize=\"md\"\n fontWeight=\"bold\"\n lineHeight=\"tall\"\n >\n Editor&apos;s note:{\" \"}\n </Text>\n {comment}\n </Text>\n )}\n </>\n );\n};\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 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 { PackageTagConfig } from \"../../api/config\";\nimport { KEYWORD_IGNORE_LIST } from \"../../constants/keywords\";\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: PackageTagConfig[] = [\n ...packageTags.filter((tag) => Boolean(tag.keyword)),\n ...keywords\n .filter((v) => Boolean(v) && !KEYWORD_IGNORE_LIST.has(v))\n .map((label) => ({\n id: label,\n keyword: {\n label,\n },\n })),\n ];\n return (\n <>\n {tags.slice(0, 3).map(({ id, keyword: { label, color } = {} }) => (\n <PackageTag key={id} mr={1} value={id} variant={color}>\n {label}\n </PackageTag>\n ))}\n </>\n );\n};\n","import { Grid, Stack, LinkBox, Divider } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { PackageTagConfig, PackageHighlight } from \"../../api/config\";\nimport { makeGridAreas } from \"../../util/css\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { usePackageCard } from \"./PackageCard\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nconst GRID_AREA = {\n DETAILS: \"details\",\n LANGUAGES: \"languages\",\n TAGS: \"tags\",\n HEADING: \"heading\",\n};\n\nconst gridAreasMd = makeGridAreas(\n [GRID_AREA.HEADING, GRID_AREA.HEADING, GRID_AREA.DETAILS],\n [GRID_AREA.HEADING, GRID_AREA.HEADING, GRID_AREA.DETAILS],\n [GRID_AREA.TAGS, GRID_AREA.TAGS, GRID_AREA.LANGUAGES]\n);\n\nconst gridAreasMobile = makeGridAreas(\n [GRID_AREA.HEADING],\n [GRID_AREA.LANGUAGES],\n [GRID_AREA.DETAILS]\n);\n\nexport const WideCard: FunctionComponent = () => {\n const highlights =\n usePackageCard()?.metadata?.packageTags?.reduce(\n (\n accum: PackageHighlight[],\n tag: PackageTagConfig\n ): PackageHighlight[] => {\n if (tag.highlight) {\n return [...accum, tag.highlight];\n }\n return accum;\n },\n []\n ) ?? [];\n\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"gray.50\",\n },\n }}\n >\n <Grid\n as=\"article\"\n autoColumns=\"1fr\"\n autoRows=\"auto\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"gray.600\"\n data-testid={testIds.wideContainer}\n gap={5}\n h=\"100%\"\n p={5}\n templateAreas={{ base: gridAreasMobile, md: gridAreasMd }}\n w=\"100%\"\n >\n {/* Name + Desc */}\n <Stack gridArea={GRID_AREA.HEADING} spacing={2}>\n <Heading />\n </Stack>\n\n <Stack\n direction=\"row\"\n display={{ base: \"none\", md: \"initial\" }}\n gridArea={GRID_AREA.TAGS}\n maxH={6}\n overflow=\"hidden\"\n >\n <Tags />\n </Stack>\n\n <Grid\n alignItems=\"start\"\n alignSelf=\"center\"\n autoColumns={{ base: \"initial\", md: \"1fr\" }}\n autoRows={{ base: \"initial\", md: \"auto\" }}\n fontSize=\"xs\"\n gap={{ base: 0, md: 1 }}\n gridArea={GRID_AREA.DETAILS}\n templateColumns={{ base: \"1fr 1fr\", md: \"initial\" }}\n templateRows={{ base: \"1fr 1fr\", md: \"initial\" }}\n >\n {highlights.map((highlight) => (\n <Highlight key={highlight.label} {...highlight} />\n ))}\n <Details />\n </Grid>\n\n <Stack gridArea={GRID_AREA.LANGUAGES} spacing={{ base: 4, md: 0 }}>\n <Divider display={{ md: \"none\" }} />\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\n </Stack>\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 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 { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\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<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 IconButton,\n PopoverTrigger,\n PopoverBody,\n PopoverArrow,\n PopoverContent,\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 return (\n <Flex align=\"center\">\n <Heading as=\"h4\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement=\"right\" strategy=\"fixed\">\n <PopoverTrigger>\n <IconButton\n aria-label={`Hint: ${name}`}\n icon={<QuestionIcon h={4} w={4} />}\n ml={2}\n px={0}\n py={0}\n size=\"sm\"\n variant=\"ghost\"\n />\n </PopoverTrigger>\n <PopoverContent\n bg=\"gray.700\"\n borderRadius=\"base\"\n color=\"white\"\n fontSize=\"sm\"\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={2}>\n <FilterHeading hint={hint} name={name} />\n <RadioGroup onChange={onValueChange} value={checkedValue}>\n <Stack>\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 fontSize=\"sm\"\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 { createContext, FunctionComponent, useContext, useEffect } 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 tags = parseQueryArray(queryParams.get(QUERY_PARAMS.TAGS));\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 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 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 { Checkbox, Stack, Text, Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\n\nexport interface CheckboxFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n options: {\n display: string;\n value: string;\n isDisabled?: boolean;\n disabledHint?: string;\n }[];\n values: string[];\n onValueChange: (value: string) => void;\n}\n\nexport const CheckboxFilter: FunctionComponent<CheckboxFilterProps> = ({\n \"data-testid\": dataTestid,\n hint,\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const getOnChange = (value: string) => () => {\n onValueChange(value);\n };\n\n return (\n <Stack data-testid={dataTestid} spacing={2}>\n <FilterHeading hint={hint} name={name} />\n {options.map(({ disabledHint, display, isDisabled, value }) => (\n <Checkbox\n isChecked={checkedValues.includes(value)}\n isDisabled={isDisabled}\n key={value}\n onChange={getOnChange(value)}\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 fontSize=\"sm\"\n isTruncated\n >\n {display}\n </Text>\n </Tooltip>\n </Checkbox>\n ))}\n </Stack>\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 { 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={6} top={4}>\n <Heading as=\"h3\" size=\"sm\">\n Filters\n </Heading>\n <CDKFilter />\n <LanguageFilter />\n <TagFilter />\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\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 return (\n <Text data-testid={testIds.searchDetails}>\n Displaying{\" \"}\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em> {filtered ? \"search results\" : \"constructs\"}\n {query && (\n <>\n {\" for \"}\n <Em>{query}</Em>\n </>\n )}\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 { 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\">\n <DrawerHeader>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 </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 { languages, sort, cdkType, cdkMajor, onSearch, tags } = searchAPI;\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit,\n query,\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 query: (params.q ?? query) as string,\n languages,\n sort,\n offset: params.offset ?? offset,\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, languages, cdkType, cdkMajor, tags]);\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={searchAPI.onSubmit}\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],{10:function(e,t,n){"use strict";var r=n(64);n.o(r,"layoutPropNames")&&n.d(t,"layoutPropNames",(function(){return r.layoutPropNames}));var o=n(359);n.o(o,"layoutPropNames")&&n.d(t,"layoutPropNames",(function(){return o.layoutPropNames}))},359:function(e,t){},361:function(e,t,n){"use strict";n.d(t,"b",(function(){return m})),n.d(t,"a",(function(){return y}));var r=n(5),o=n(17),a=n(20),c=n(14),i=n(8),u=n(119),l=n(0),s=n(4),d=n(148),b=n(117),v=n(157);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e){void 0===e&&(e={});var t=e,n=t.onChange,o=t.value,a=t.defaultValue,c=t.name,u=t.isDisabled,f=t.isFocusable,O=t.isNative,j=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,["onChange","value","defaultValue","name","isDisabled","isFocusable","isNative"]),h=l.useState(a||""),g=Object(r.a)(h,2),m=g[0],y=g[1],k=Object(d.a)(o,m),P=Object(r.a)(k,2),w=P[0],C=P[1],N=l.useRef(null),_=l.useCallback((function(){var e=N.current;if(e){var t="input:not(:disabled):checked",n=e.querySelector(t);if(n)n.focus();else{t="input:not(:disabled)";var r=e.querySelector(t);null==r||r.focus()}}}),[]),E=Object(b.b)(void 0,"radio"),x=c||E,S=l.useCallback((function(e){var t=Object(i.f)(e)?e.target.value:e;w||y(t),null==n||n(String(t))}),[n,w]),R=l.useCallback((function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),p({},e,{ref:Object(v.a)(t,N),role:"radiogroup"})}),[]),D=l.useCallback((function(e,t){var n;void 0===e&&(e={}),void 0===t&&(t=null);var r=O?"checked":"isChecked";return p({},e,(n={ref:t,name:x},Object(s.a)(n,r,null!=C?e.value===C:void 0),Object(s.a)(n,"onChange",S),Object(s.a)(n,"data-radiogroup",!0),n))}),[O,x,S,C]);return{getRootProps:R,getRadioProps:D,name:x,ref:N,focus:_,setValue:y,value:C,onChange:S,isDisabled:u,isFocusable:f,htmlProps:j}}function O(){return O=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},O.apply(this,arguments)}var j=Object(u.a)({name:"RadioGroupContext",strict:!1}),h=Object(r.a)(j,2),g=h[0],m=h[1],y=Object(o.a)((function(e,t){var n=e.colorScheme,r=e.size,o=e.variant,i=e.children,u=e.className,s=e.isDisabled,d=e.isFocusable,b=f(function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,["colorScheme","size","variant","children","className","isDisabled","isFocusable"])),v=b.value,p=b.onChange,j=b.getRootProps,h=b.name,m=b.htmlProps,y=l.useMemo((function(){return{name:h,size:r,onChange:p,colorScheme:n,value:v,variant:o,isDisabled:s,isFocusable:d}}),[h,r,p,n,v,o,s,d]),k=j(m,t),P=Object(c.d)("chakra-radio-group",u);return l.createElement(g,{value:y},l.createElement(a.a.div,O({},k,{className:P}),i))}));i.a&&(y.displayName="RadioGroup")},363:function(e,t,n){"use strict";n.d(t,"b",(function(){return l})),n.d(t,"a",(function(){return s}));var r=n(17),o=n(20),a=n(14),c=n(0);function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}function u(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var l=Object(r.a)((function(e,t){var n=e.isExternal,r=e.target,l=e.rel,s=e.className,d=u(e,["isExternal","target","rel","className"]);return c.createElement(o.a.a,i({},d,{ref:t,className:Object(a.d)("chakra-linkbox__overlay",s),rel:n?"noopener noreferrer":l,target:n?"_blank":r,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),s=Object(r.a)((function(e,t){var n=e.className,r=u(e,["className"]);return c.createElement(o.a.div,i({ref:t,position:"relative"},r,{className:Object(a.d)("chakra-linkbox",n),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))}))},587:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(81),o=Object(r.a)({d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",displayName:"ChevronRightIcon"})},601:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(81),o=Object(r.a)({d:"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm0,19a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,12,19Zm1.6-6.08a1,1,0,0,0-.6.917,1,1,0,1,1-2,0,3,3,0,0,1,1.8-2.75A2,2,0,1,0,10,9.255a1,1,0,1,1-2,0,4,4,0,1,1,5.6,3.666Z",displayName:"QuestionIcon"})},602:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(81),o=Object(r.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},609:function(e,t,n){"use strict";n.d(t,"a",(function(){return re})),n.d(t,"e",(function(){return oe})),n.d(t,"d",(function(){return ae})),n.d(t,"c",(function(){return ie})),n.d(t,"b",(function(){return ue}));n(200);var r=n(58),o=n(34),a=n(49),c=n(17),i=n(20),u=n(29),l=n(8),s=n(14),d=n(0),b=n.n(d),v=n(5),p=n(119),f=Object(p.a)({name:"PopoverContext",errorMessage:"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within `<Popover />`"}),O=Object(v.a)(f,2),j=O[0],h=O[1],g=n(184),m=n(51),y=n.n(m);function k(){return k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},k.apply(this,arguments)}var P=function(e){if(e)return y()(e,{enter:{visibility:"visible"},exit:{transitionEnd:{visibility:"hidden"}}})},w=Object(g.a)(i.a.section),C=b.a.forwardRef((function(e,t){var n=h().isOpen;return b.a.createElement(w,k({ref:t,variants:P(e.variants)},e,{initial:!1,animate:n?"enter":"exit"}))}));C.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 N=n(4),_=n(203),E=n(117);var x=n(38),S=n(181);function R(e){return!!e.touches}var D={pageX:0,pageY:0};function F(e,t){void 0===t&&(t="page");var n=e.touches[0]||e.changedTouches[0]||D;return{x:n[t+"X"],y:n[t+"Y"]}}function M(e,t){return void 0===t&&(t="page"),{x:e[t+"X"],y:e[t+"Y"]}}function I(e,t){return void 0===t&&(t="page"),{point:R(e)?F(e,t):M(e,t)}}var A=function(e,t){void 0===t&&(t=!1);var n,r=function(t){return e(t,I(t))};return t?(n=r,function(e){var t=e instanceof Object(s.g)(e).MouseEvent;(!t||t&&0===e.button)&&n(e)}):r},B={pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointercancel:"mousecancel",pointerover:"mouseover",pointerout:"mouseout",pointerenter:"mouseenter",pointerleave:"mouseleave"},T={pointerdown:"touchstart",pointermove:"touchmove",pointerup:"touchend",pointercancel:"touchcancel"};function z(e){return s.j&&null===window.onpointerdown?e:s.j&&null===window.ontouchstart?T[e]:s.j&&null===window.onmousedown?B[e]:e}var L=n(187);function K(e){var t,n,r,o,a,c=e.ref,i=e.elements,u=e.enabled,d=(t="Safari",!!s.j&&function(e){var t=e.userAgent,n=e.vendor,r=/(android)/i.test(t);switch(!0){case/CriOS/.test(t):return"Chrome for iOS";case/Edg\//.test(t):return"Edge";case r&&/Silk\//.test(t):return"Silk";case/Chrome/.test(t)&&/Google Inc/.test(n):return"Chrome";case/Firefox\/\d+\.\d+$/.test(t):return"Firefox";case r:return"AOSP";case/MSIE|Trident/.test(t):return"IE";case/Safari/.test(e.userAgent)&&/Apple Computer/.test(t):return"Safari";case/AppleWebKit/.test(t):return"WebKit";default:return null}}(window.navigator)===t);n=function(){return Object(s.h)(c.current)},r="pointerdown",o=function(e){if(d&&u){var t=e.target,n=(null!=i?i:[c]).some((function(e){var n=Object(l.j)(e)?e.current:e;return Object(s.c)(n,t)}));!Object(x.a)(t)&&n&&(e.preventDefault(),Object(S.a)(t))}},Object(L.a)(z(r),A(o,"pointerdown"===r),n,a)}var q=n(213),U=n(199),H=n(137),W={preventScroll:!0,shouldFocus:!1};var G=n(224),V=n(26),X=n(157),Y=n(214),Z=n(198);function J(){return J=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},J.apply(this,arguments)}var Q="click",$="hover";function ee(e){void 0===e&&(e={});var t=e,n=t.closeOnBlur,r=void 0===n||n,o=t.closeOnEsc,a=void 0===o||o,c=t.initialFocusRef,i=t.id,b=t.returnFocusOnClose,p=void 0===b||b,f=t.autoFocus,O=void 0===f||f,j=t.arrowSize,h=t.arrowShadowColor,g=t.trigger,m=void 0===g?Q:g,y=t.openDelay,k=void 0===y?200:y,P=t.closeDelay,w=void 0===P?200:P,C=t.isLazy,x=t.lazyBehavior,R=void 0===x?"unmount":x,D=t.computePositionOnMount,F=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,["closeOnBlur","closeOnEsc","initialFocusRef","id","returnFocusOnClose","autoFocus","arrowSize","arrowShadowColor","trigger","openDelay","closeDelay","isLazy","lazyBehavior","computePositionOnMount"]),M=Object(_.a)(e),I=M.isOpen,A=M.onClose,B=M.onOpen,T=M.onToggle,z=Object(d.useRef)(null),ee=Object(d.useRef)(null),te=Object(d.useRef)(!1),ne=Object(d.useRef)(!1);I&&(ne.current=!0);var re=Object(d.useState)(!1),oe=Object(v.a)(re,2),ae=oe[0],ce=oe[1],ie=Object(d.useState)(!1),ue=Object(v.a)(ie,2),le=ue[0],se=ue[1],de=Object(E.c)(i,"popover-trigger","popover-content","popover-header","popover-body"),be=Object(v.a)(de,4),ve=be[0],pe=be[1],fe=be[2],Oe=be[3],je=Object(G.a)(J({},F,{enabled:I||!!D})),he=je.referenceRef,ge=je.getArrowProps,me=je.getPopperProps,ye=je.getArrowInnerProps,ke=je.forceUpdate;K({enabled:I,ref:z}),Object(q.a)(ee,{focusRef:z,visible:I,shouldFocus:p&&m===Q}),function(e,t){void 0===t&&(t=W);var n=t,r=n.focusRef,o=n.preventScroll,a=n.shouldFocus,c=n.visible,i=Object(l.j)(e)?e.current:e,u=a&&c,b=Object(d.useCallback)((function(){if(i&&u&&!Object(s.c)(i,document.activeElement))if(null!=r&&r.current)Object(S.a)(r.current,{preventScroll:o,nextTick:!0});else{var e=Object(U.a)(i);e.length>0&&Object(S.a)(e[0],{preventScroll:o,nextTick:!0})}}),[u,o,i,r]);Object(H.a)((function(){b()}),[b]),Object(L.a)("transitionend",b,i)}(ee,{focusRef:c,visible:I,shouldFocus:O&&m===Q});var Pe=Object(Y.a)({hasBeenSelected:ne.current,isLazy:C,lazyBehavior:R,isSelected:I}),we=Object(d.useCallback)((function(e,t){var n;void 0===e&&(e={}),void 0===t&&(t=null);var o=J({},e,{style:J({},e.style,(n={transformOrigin:V.a.transformOrigin.varRef},Object(N.a)(n,V.a.arrowSize.var,j?Object(Z.b)(j):void 0),Object(N.a)(n,V.a.arrowShadowColor.var,h),n)),ref:Object(X.a)(ee,t),children:Pe?e.children:null,id:pe,tabIndex:-1,role:"dialog",onKeyDown:Object(u.b)(e.onKeyDown,(function(e){a&&"Escape"===e.key&&A()})),onBlur:Object(u.b)(e.onBlur,(function(e){var t=Object(s.i)(e),n=Object(s.c)(ee.current,t),o=Object(s.c)(z.current,t);I&&r&&(!n&&!o)&&A()})),"aria-labelledby":ae?fe:void 0,"aria-describedby":le?Oe:void 0});return m===$&&(o.role="tooltip",o.onMouseEnter=Object(u.b)(e.onMouseEnter,(function(){te.current=!0})),o.onMouseLeave=Object(u.b)(e.onMouseLeave,(function(){te.current=!1,setTimeout(A,w)}))),o}),[Pe,pe,ae,fe,le,Oe,m,a,A,I,r,w,h,j]),Ce=Object(d.useCallback)((function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),me(J({},e,{style:J({visibility:I?"visible":"hidden"},e.style)}),t)}),[I,me]),Ne=Object(d.useRef)(),_e=Object(d.useRef)(),Ee=Object(d.useCallback)((function(e,t){void 0===e&&(e={}),void 0===t&&(t=null);var n=J({},e,{ref:Object(X.a)(z,t,he),id:ve,"aria-haspopup":"dialog","aria-expanded":I,"aria-controls":pe});return m===Q&&(n.onClick=Object(u.b)(e.onClick,T)),m===$&&(n.onFocus=Object(u.b)(e.onFocus,B),n.onBlur=Object(u.b)(e.onBlur,A),n.onKeyDown=Object(u.b)(e.onKeyDown,(function(e){"Escape"===e.key&&A()})),n.onMouseEnter=Object(u.b)(e.onMouseEnter,(function(){te.current=!0,Ne.current=window.setTimeout(B,k)})),n.onMouseLeave=Object(u.b)(e.onMouseLeave,(function(){te.current=!1,Ne.current&&(clearTimeout(Ne.current),Ne.current=void 0),_e.current=window.setTimeout((function(){!1===te.current&&A()}),w)}))),n}),[ve,I,pe,m,he,T,B,A,k,w]);Object(d.useEffect)((function(){return function(){Ne.current&&clearTimeout(Ne.current),_e.current&&clearTimeout(_e.current)}}),[]);var xe=Object(d.useCallback)((function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),J({},e,{id:fe,ref:Object(X.a)(t,(function(e){ce(!!e)}))})}),[fe]),Se=Object(d.useCallback)((function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),J({},e,{id:Oe,ref:Object(X.a)(t,(function(e){se(!!e)}))})}),[Oe]);return{forceUpdate:ke,isOpen:I,onClose:A,getArrowProps:ge,getArrowInnerProps:ye,getPopoverPositionerProps:Ce,getPopoverProps:we,getTriggerProps:Ee,getHeaderProps:xe,getBodyProps:Se}}function te(){return te=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},te.apply(this,arguments)}function ne(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var re=function(e){var t=Object(r.a)("Popover",e),n=Object(o.b)(e),c=n.children,i=ee(te({},ne(n,["children"]),{direction:Object(a.e)().direction}));return d.createElement(j,{value:i},d.createElement(a.b,{value:t},Object(u.e)(c,{isOpen:i.isOpen,onClose:i.onClose,forceUpdate:i.forceUpdate})))};l.a&&(re.displayName="Popover");var oe=function(e){var t=d.Children.only(e.children),n=h().getTriggerProps;return d.cloneElement(t,n(t.props,t.ref))};l.a&&(oe.displayName="PopoverTrigger");var ae=Object(c.a)((function(e,t){var n=e.rootProps,r=ne(e,["rootProps"]),o=h(),c=o.getPopoverProps,u=o.getPopoverPositionerProps,l=Object(a.d)(),b=te({position:"relative",display:"flex",flexDirection:"column"},l.content);return d.createElement(i.a.div,te({},u(n),{__css:l.popper,className:"chakra-popover__popper"}),d.createElement(C,te({},c(r,t),{className:Object(s.d)("chakra-popover__content",e.className),__css:b})))}));l.a&&(ae.displayName="PopoverContent");var ce=Object(c.a)((function(e,t){var n=h().getHeaderProps,r=Object(a.d)();return d.createElement(i.a.header,te({},n(e,t),{className:Object(s.d)("chakra-popover__header",e.className),__css:r.header}))}));l.a&&(ce.displayName="PopoverHeader");var ie=Object(c.a)((function(e,t){var n=h().getBodyProps,r=Object(a.d)();return d.createElement(i.a.div,te({},n(e,t),{className:Object(s.d)("chakra-popover__body",e.className),__css:r.body}))}));l.a&&(ie.displayName="PopoverBody");l.a;l.a;var ue=function(e){var t,n=e.bg,r=e.bgColor,o=e.backgroundColor,c=h(),u=c.getArrowProps,l=c.getArrowInnerProps,b=Object(a.d)(),v=null!=(t=null!=n?n:r)?t:o;return d.createElement(i.a.div,te({},u(),{className:"chakra-popover__arrow-positioner"}),d.createElement(i.a.div,te({className:Object(s.d)("chakra-popover__arrow",e.className)},l(e),{__css:te({},b.arrow,{"--popper-arrow-bg":v?"colors."+v+", "+v:void 0})})))};l.a&&(ue.displayName="PopoverArrow")},612:function(e,t,n){"use strict";n.d(t,"a",(function(){return C}));var r=n(5),o=n(17),a=n(58),c=n(34),i=n(10),u=n(20),l=n(29),s=n(28),d=n(8),b=n(0),v=n(361),p=n(151),f=n(117),O=n(182),j=n(148),h=n(157),g=n(14),m=n(183);function y(){return y=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},y.apply(this,arguments)}function k(e){void 0===e&&(e={});var t=e,n=t.defaultIsChecked,o=t.defaultChecked,a=void 0===o?n:o,c=t.isChecked,i=t.isFocusable,u=t.isDisabled,s=t.isReadOnly,d=t.isRequired,k=t.onChange,w=t.isInvalid,C=t.name,N=t.value,_=t.id,E=t["data-radiogroup"],x=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,["defaultIsChecked","defaultChecked","isChecked","isFocusable","isDisabled","isReadOnly","isRequired","onChange","isInvalid","name","value","id","data-radiogroup"]),S=Object(f.b)(void 0,"radio"),R=Object(p.a)(),D=Object(v.b)(),F=!!R&&!(!!D||!!E)?R.id:S;F=null!=_?_:F;var M=null!=u?u:null==R?void 0:R.isDisabled,I=null!=s?s:null==R?void 0:R.isReadOnly,A=null!=d?d:null==R?void 0:R.isRequired,B=null!=w?w:null==R?void 0:R.isInvalid,T=Object(O.a)(),z=Object(r.a)(T,2),L=z[0],K=z[1],q=Object(O.a)(),U=Object(r.a)(q,2),H=U[0],W=U[1],G=Object(O.a)(),V=Object(r.a)(G,2),X=V[0],Y=V[1],Z=Object(b.useRef)(null),J=Object(b.useState)(Boolean(a)),Q=Object(r.a)(J,2),$=Q[0],ee=Q[1],te=Object(j.a)(c,$),ne=Object(r.a)(te,2),re=ne[0],oe=ne[1];Object(l.f)({condition:!!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.'});var ae=Object(b.useCallback)((function(e){I||M?e.preventDefault():(re||ee(e.target.checked),null==k||k(e))}),[re,M,I,k]),ce=Object(b.useCallback)((function(e){" "===e.key&&Y.on()}),[Y]),ie=Object(b.useCallback)((function(e){" "===e.key&&Y.off()}),[Y]),ue=Object(b.useCallback)((function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),y({},e,{ref:t,"data-active":Object(g.e)(X),"data-hover":Object(g.e)(H),"data-disabled":Object(g.e)(M),"data-invalid":Object(g.e)(B),"data-checked":Object(g.e)(oe),"data-focus":Object(g.e)(L),"data-readonly":Object(g.e)(I),"aria-hidden":!0,onMouseDown:Object(l.b)(e.onMouseDown,Y.on),onMouseUp:Object(l.b)(e.onMouseUp,Y.off),onMouseEnter:Object(l.b)(e.onMouseEnter,W.on),onMouseLeave:Object(l.b)(e.onMouseLeave,W.off)})}),[X,H,M,B,oe,L,I,Y.on,Y.off,W.on,W.off]),le=null!=R?R:{},se=le.onFocus,de=le.onBlur,be=Object(b.useCallback)((function(e,t){void 0===e&&(e={}),void 0===t&&(t=null);var n=M&&!i;return y({},e,{id:F,ref:Object(h.a)(t,Z),type:"radio",name:C,value:N,onChange:Object(l.b)(e.onChange,ae),onBlur:Object(l.b)(de,e.onBlur,K.off),onFocus:Object(l.b)(se,e.onFocus,K.on),onKeyDown:Object(l.b)(e.onKeyDown,ce),onKeyUp:Object(l.b)(e.onKeyUp,ie),checked:oe,disabled:n,readOnly:I,required:A,"aria-invalid":Object(g.b)(B),"aria-disabled":Object(g.b)(n),"aria-required":Object(g.b)(A),"data-readonly":Object(g.e)(I),style:m.b})}),[M,i,F,C,N,ae,de,K,se,ce,ie,oe,I,A,B]);return{state:{isInvalid:B,isFocused:L,isChecked:oe,isActive:X,isHovered:H,isDisabled:M,isReadOnly:I,isRequired:A},getCheckboxProps:ue,getInputProps:be,getLabelProps:function(e,t){return void 0===e&&(e={}),void 0===t&&(t=null),y({},e,{ref:t,onMouseDown:Object(l.b)(e.onMouseDown,P),onTouchStart:Object(l.b)(e.onTouchStart,P),"data-disabled":Object(g.e)(M),"data-checked":Object(g.e)(oe),"data-invalid":Object(g.e)(B)})},getRootProps:function(e,t){return void 0===t&&(t=null),y({},e,{ref:t,"data-disabled":Object(g.e)(M),"data-checked":Object(g.e)(oe),"data-invalid":Object(g.e)(B)})},htmlProps:x}}function P(e){e.preventDefault(),e.stopPropagation()}function w(){return w=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},w.apply(this,arguments)}var C=Object(o.a)((function(e,t){var n,o=Object(v.b)(),d=e.onChange,p=e.value,f=Object(a.a)("Radio",w({},o,e)),O=Object(c.b)(e),j=O.spacing,h=void 0===j?"0.5rem":j,g=O.children,m=O.isFullWidth,y=O.isDisabled,P=void 0===y?null==o?void 0:o.isDisabled:y,C=O.isFocusable,N=void 0===C?null==o?void 0:o.isFocusable:C,_=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(O,["spacing","children","isFullWidth","isDisabled","isFocusable"]),E=e.isChecked;null!=(null==o?void 0:o.value)&&null!=p&&(E=o.value===p);var x=d;null!=o&&o.onChange&&null!=p&&(x=Object(l.a)(o.onChange,d));var S=k(w({},_,{isChecked:E,isFocusable:N,isDisabled:P,onChange:x,name:null!=(n=null==e?void 0:e.name)?n:null==o?void 0:o.name})),R=S.getInputProps,D=S.getCheckboxProps,F=S.getLabelProps,M=S.getRootProps,I=S.htmlProps,A=Object(s.i)(I,i.layoutPropNames),B=Object(r.a)(A,2),T=B[0],z=D(B[1]),L=R({},t),K=F(),q=Object.assign({},T,M()),U=w({width:m?"full":void 0,display:"inline-flex",alignItems:"center",verticalAlign:"top"},f.container),H=w({display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},f.control),W=w({userSelect:"none",marginStart:h},f.label);return b.createElement(u.a.label,w({className:"chakra-radio"},q,{__css:U}),b.createElement("input",w({className:"chakra-radio__input"},L)),b.createElement(u.a.span,w({className:"chakra-radio__control"},z,{__css:H})),g&&b.createElement(u.a.span,w({className:"chakra-radio__label"},K,{__css:W}),g))}));d.a&&(C.displayName="Radio")}}]);
2
+ //# sourceMappingURL=9.a8fecf34.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/index.ts","../../../src/use-radio-group.ts","../../../src/radio-group.tsx","../../../src/link-box.tsx","../../../src/ChevronRight.tsx","../../../src/Question.tsx","../../../src/ChevronLeft.tsx","../../../src/popover-context.ts","../../../src/popover-transition.tsx","../../../src/pointer-event.ts","../../../src/use-focus-on-pointerdown.ts","../../../src/user-agent.ts","../../../src/use-pointer-event.ts","../../../src/use-focus-on-show.ts","../../../src/use-popover.ts","../../../src/popover.tsx","../../../src/use-radio.ts","../../../src/radio.tsx"],"names":["useRadioGroup","props","onChange","value","name","isNative","React","defaultValue","useControllableProp","valueProp","ref","focus","rootNode","query","firstEnabledAndCheckedInput","firstEnabledInput","fallbackName","useId","undefined","nameProp","eventOrValue","nextValue","isInputEvent","setValue","onChangeProp","String","getRootProps","forwardedRef","mergeRefs","role","getRadioProps","checkedKey","isDisabled","isFocusable","htmlProps","createContext","strict","RadioGroup","forwardRef","group","size","colorScheme","variant","groupProps","_className","cx","className","LinkOverlay","rel","isExternal","target","__css","position","content","cursor","display","top","left","zIndex","width","height","LinkBox","ChevronRightIcon","createIcon","d","displayName","QuestionIcon","ChevronLeftIcon","errorMessage","mergeVariants","variants","mergeWith","enter","visibility","exit","transitionEnd","Section","motion","chakra","PopoverTransition","isOpen","usePopoverContext","initial","animate","opacity","scale","transition","duration","ease","isTouchEvent","event","defaultPagePoint","pageX","pageY","pointFromTouch","e","pointType","point","x","y","pointFromMouse","extractEventInfo","wrapPointerEventHandler","shouldFilterPrimaryPointer","eventHandler","listener","handler","isMouseEvent","getEventWindow","mouseEventNames","pointerdown","pointermove","pointerup","pointercancel","pointerover","pointerout","pointerenter","pointerleave","touchEventNames","getPointerEventName","isBrowser","window","useFocusOnPointerDown","browser","enabled","isSafari","navigator","userAgent","vendor","android","test","ua","getUserAgentBrowser","getOwnerDocument","isValidTarget","elements","elementOrRef","el","isRefObject","contains","isActiveElement","useEventListener","eventName","defaultOptions","preventScroll","shouldFocus","TRIGGER","usePopover","closeOnBlur","closeOnEsc","returnFocusOnClose","autoFocus","trigger","openDelay","closeDelay","lazyBehavior","computePositionOnMount","useDisclosure","onToggle","triggerRef","useRef","popoverRef","isHoveringRef","hasBeenOpened","useState","useIds","usePopper","forceUpdate","useFocusOnHide","focusRef","visible","options","element","onFocus","useCallback","document","nextTick","tabbableEls","getAllFocusable","useUpdateEffect","useFocusOnShow","shouldRenderChildren","determineLazyBehavior","hasBeenSelected","isLazy","isSelected","getPopoverProps","_ref","popoverProps","style","transformOrigin","popperCSSVars","arrowSize","px","arrowShadowColor","children","id","tabIndex","onKeyDown","callAllHandlers","onClose","onBlur","relatedTarget","getRelatedTarget","targetIsPopover","targetIsTrigger","hasHeader","headerId","hasBody","bodyId","setTimeout","getPopoverPositionerProps","getPopperProps","openTimeout","closeTimeout","getTriggerProps","triggerProps","popoverId","clearTimeout","useEffect","getHeaderProps","node","setHasHeader","getBodyProps","setHasBody","getArrowProps","getArrowInnerProps","Popover","styles","useMultiStyleConfig","omitThemingProps","context","direction","useTheme","runIfFn","PopoverTrigger","child","PopoverContent","rootProps","useStyles","contentStyles","flexDirection","contentProps","PopoverHeader","header","PopoverBody","body","PopoverArrow","backgroundColor","arrowBg","bg","useRadio","defaultChecked","isChecked","isReadOnly","isRequired","isInvalid","dataRadioGroup","uuid","formControl","useFormControlContext","useRadioGroupContext","isWithinFormControl","idProp","isDisabledProp","isReadOnlyProp","isRequiredProp","isInvalidProp","useBoolean","Boolean","warn","condition","message","handleChange","setChecked","isControlled","setActive","onKeyUp","getCheckboxProps","dataAttr","onMouseDown","onMouseUp","onMouseEnter","setHovering","onMouseLeave","getInputProps","trulyDisabled","type","setFocused","checked","disabled","readOnly","required","ariaAttr","visuallyHiddenStyle","state","isFocused","isActive","isHovered","getLabelProps","onTouchStart","stop","Radio","ownProps","spacing","callAll","split","checkboxProps","inputProps","labelProps","Object","rootStyles","isFullWidth","alignItems","verticalAlign","checkboxStyles","justifyContent","flexShrink","labelStyles","userSelect","marginStart"],"mappings":"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","file":"static/js/9.a8fecf34.chunk.js","sourcesContent":["export * from \"@chakra-ui/color-mode\"\nexport * from \"@chakra-ui/styled-system\"\nexport { keyframes } from \"@emotion/react\"\nexport type { Interpolation } from \"@emotion/react\"\nexport * from \"./hooks\"\nexport * from \"./system.types\"\nexport * from \"./providers\"\nexport { omitThemingProps } from \"./system.utils\"\nexport * from \"./system\"\nexport * from \"./forward-ref\"\nexport * from \"./use-style-config\"\nexport { shouldForwardProp } from \"./should-forward-prop\"\n","import { useControllableProp, useId } from \"@chakra-ui/hooks\"\nimport { StringOrNumber, isInputEvent } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\nimport { mergeRefs, PropGetter } from \"@chakra-ui/react-utils\"\n\ntype EventOrValue = React.ChangeEvent<HTMLInputElement> | StringOrNumber\n\nexport interface UseRadioGroupProps {\n /**\n * The value of the radio to be `checked`\n * (in controlled mode)\n */\n value?: StringOrNumber\n /**\n * The value of the radio to be `checked`\n * initially (in uncontrolled mode)\n */\n defaultValue?: StringOrNumber\n /**\n * Function called once a radio is checked\n * @param nextValue the value of the checked radio\n */\n onChange?(nextValue: string): void\n /**\n * If `true`, all wrapped radio inputs will be disabled\n */\n isDisabled?: boolean\n\n /**\n * If `true` and `isDisabled` is true, all wrapped radio inputs will remain\n * focusable but not interactive.\n */\n isFocusable?: boolean\n /**\n * The `name` attribute forwarded to each `radio` element\n */\n name?: string\n /**\n * If `true`, input elements will receive\n * `checked` attribute instead of `isChecked`.\n *\n * This assumes, you're using native radio inputs\n */\n isNative?: boolean\n}\n\ntype RadioPropGetter = PropGetter<\n HTMLInputElement,\n {\n onChange?: (e: EventOrValue) => void\n value?: StringOrNumber\n /**\n * checked is defined if isNative=true\n */\n checked?: boolean\n /**\n * isChecked is defined if isNative=false\n */\n isChecked?: boolean\n } & Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"size\" | \"value\"\n >\n>\n\n/**\n * React hook to manage a group of radio inputs\n */\nexport function useRadioGroup(props: UseRadioGroupProps = {}) {\n const {\n onChange: onChangeProp,\n value: valueProp,\n defaultValue,\n name: nameProp,\n isDisabled,\n isFocusable,\n isNative,\n ...htmlProps\n } = props\n\n const [valueState, setValue] = React.useState<StringOrNumber>(\n defaultValue || \"\",\n )\n const [isControlled, value] = useControllableProp(valueProp, valueState)\n\n const ref = React.useRef<any>(null)\n\n const focus = React.useCallback(() => {\n const rootNode = ref.current\n if (!rootNode) return\n\n let query = `input:not(:disabled):checked`\n\n const firstEnabledAndCheckedInput = rootNode.querySelector(\n query,\n ) as HTMLElement\n\n if (firstEnabledAndCheckedInput) {\n firstEnabledAndCheckedInput.focus()\n return\n }\n\n query = `input:not(:disabled)`\n\n const firstEnabledInput = rootNode.querySelector(query) as HTMLElement\n firstEnabledInput?.focus()\n }, [])\n\n /**\n * All radio options must use the same name\n */\n const fallbackName = useId(undefined, `radio`)\n const name = nameProp || fallbackName\n\n const onChange = React.useCallback(\n (eventOrValue: EventOrValue) => {\n const nextValue = isInputEvent(eventOrValue)\n ? eventOrValue.target.value\n : eventOrValue\n\n if (!isControlled) {\n setValue(nextValue)\n }\n\n onChangeProp?.(String(nextValue))\n },\n [onChangeProp, isControlled],\n )\n\n const getRootProps: PropGetter = React.useCallback(\n (props = {}, forwardedRef = null) => ({\n ...props,\n ref: mergeRefs(forwardedRef, ref),\n role: \"radiogroup\",\n }),\n [],\n )\n\n const getRadioProps: RadioPropGetter = React.useCallback(\n (props = {}, ref = null) => {\n const checkedKey = isNative ? \"checked\" : \"isChecked\"\n return {\n ...props,\n ref,\n name,\n [checkedKey]: value != null ? props.value === value : undefined,\n onChange,\n \"data-radiogroup\": true,\n }\n },\n [isNative, name, onChange, value],\n )\n\n return {\n getRootProps,\n getRadioProps,\n name,\n ref,\n focus,\n setValue,\n value,\n onChange,\n isDisabled,\n isFocusable,\n htmlProps,\n }\n}\n\nexport type UseRadioGroupReturn = ReturnType<typeof useRadioGroup>\n","import {\n chakra,\n forwardRef,\n ThemingProps,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport { createContext } from \"@chakra-ui/react-utils\"\nimport * as React from \"react\"\nimport {\n useRadioGroup,\n UseRadioGroupProps,\n UseRadioGroupReturn,\n} from \"./use-radio-group\"\n\nexport interface RadioGroupContext\n extends Pick<\n UseRadioGroupReturn,\n \"onChange\" | \"value\" | \"name\" | \"isDisabled\" | \"isFocusable\"\n >,\n Omit<ThemingProps<\"Radio\">, \"orientation\"> {}\n\nconst [\n RadioGroupProvider,\n useRadioGroupContext,\n] = createContext<RadioGroupContext>({\n name: \"RadioGroupContext\",\n strict: false,\n})\n\nexport { useRadioGroupContext }\n\ntype Omitted =\n | \"onChange\"\n | \"value\"\n | \"defaultValue\"\n | \"defaultChecked\"\n | \"children\"\nexport interface RadioGroupProps\n extends UseRadioGroupProps,\n Omit<HTMLChakraProps<\"div\">, Omitted>,\n Omit<ThemingProps<\"Radio\">, \"orientation\"> {\n children: React.ReactNode\n}\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 */\nexport const RadioGroup = forwardRef<RadioGroupProps, \"div\">((props, ref) => {\n const {\n colorScheme,\n size,\n variant,\n children,\n className,\n isDisabled,\n isFocusable,\n ...rest\n } = props\n\n const { value, onChange, getRootProps, name, htmlProps } = useRadioGroup(rest)\n\n const group = React.useMemo(\n () => ({\n name,\n size,\n onChange,\n colorScheme,\n value,\n variant,\n isDisabled,\n isFocusable,\n }),\n [\n name,\n size,\n onChange,\n colorScheme,\n value,\n variant,\n isDisabled,\n isFocusable,\n ],\n )\n\n const groupProps = getRootProps(htmlProps, ref)\n const _className = cx(\"chakra-radio-group\", className)\n\n return (\n <RadioGroupProvider value={group}>\n <chakra.div {...groupProps} className={_className}>\n {children}\n </chakra.div>\n </RadioGroupProvider>\n )\n})\n\nif (__DEV__) {\n RadioGroup.displayName = \"RadioGroup\"\n}\n","import { chakra, forwardRef, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { cx } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface LinkOverlayProps extends HTMLChakraProps<\"a\"> {\n /**\n * If `true`, the link will open in new tab\n */\n isExternal?: boolean\n}\n\nexport const LinkOverlay = forwardRef<LinkOverlayProps, \"a\">((props, ref) => {\n const { isExternal, target, rel, className, ...rest } = props\n return (\n <chakra.a\n {...rest}\n ref={ref}\n className={cx(\"chakra-linkbox__overlay\", className)}\n rel={isExternal ? \"noopener noreferrer\" : rel}\n target={isExternal ? \"_blank\" : target}\n __css={{\n position: \"static\",\n \"&::before\": {\n content: \"''\",\n cursor: \"inherit\",\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 0,\n width: \"100%\",\n height: \"100%\",\n },\n }}\n />\n )\n})\n\nexport interface LinkBoxProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * `LinkBox` is used to wrap content areas within a link while ensuring semantic html\n *\n * @see Docs https://chakra-ui.com/docs/navigation/link-overlay\n * @see Resources https://www.sarasoueidan.com/blog/nested-links\n */\nexport const LinkBox = forwardRef<LinkBoxProps, \"div\">((props, ref) => {\n const { className, ...rest } = props\n\n return (\n <chakra.div\n ref={ref}\n position=\"relative\"\n {...rest}\n className={cx(\"chakra-linkbox\", className)}\n __css={{\n /* Elevate the links and abbreviations up */\n \"a[href]:not(.chakra-linkbox__overlay), abbr[title]\": {\n position: \"relative\",\n zIndex: 1,\n },\n }}\n />\n )\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronRightIcon = createIcon({\n d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\",\n displayName: \"ChevronRightIcon\",\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const QuestionIcon = createIcon({\n d:\n \"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm0,19a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,12,19Zm1.6-6.08a1,1,0,0,0-.6.917,1,1,0,1,1-2,0,3,3,0,0,1,1.8-2.75A2,2,0,1,0,10,9.255a1,1,0,1,1-2,0,4,4,0,1,1,5.6,3.666Z\",\n displayName: \"QuestionIcon\",\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronLeftIcon = createIcon({\n d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\",\n displayName: \"ChevronLeftIcon\",\n})\n","import { createContext } from \"@chakra-ui/react-utils\"\nimport { UsePopoverReturn } from \"./use-popover\"\n\nexport const [\n PopoverProvider,\n usePopoverContext,\n] = createContext<UsePopoverReturn>({\n name: \"PopoverContext\",\n errorMessage:\n \"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within `<Popover />`\",\n})\n","import { chakra, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { HTMLMotionProps, motion, Variant } from \"framer-motion\"\nimport { mergeWith } from \"@chakra-ui/utils\"\nimport React from \"react\"\nimport { usePopoverContext } from \"./popover-context\"\n\n// TODO: consider moving this to some util\ntype HTMLMotionChakraProps<T extends keyof React.ReactHTML> = Omit<\n HTMLChakraProps<T>,\n keyof HTMLMotionProps<T>\n> &\n Omit<\n HTMLMotionProps<T>,\n | \"style\"\n | \"onDrag\"\n | \"onDragEnd\"\n | \"onDragStart\"\n | \"onAnimationStart\"\n | \"variants\"\n > & {\n variants?: MotionVariants\n }\n\ntype MotionVariants = Partial<Record<\"enter\" | \"exit\", Variant>>\n\nconst mergeVariants = (variants?: MotionVariants) => {\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\nconst scaleFade: MotionVariants = {\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}\n\nconst Section = motion(chakra.section)\n\nexport interface PopoverTransitionProps\n extends HTMLMotionChakraProps<\"section\"> {}\n\nexport const PopoverTransition = React.forwardRef(\n (props: HTMLMotionChakraProps<\"section\">, ref: React.Ref<any>) => {\n const { isOpen } = usePopoverContext()\n return (\n <Section\n ref={ref}\n variants={mergeVariants(props.variants)}\n {...props}\n initial={false}\n animate={isOpen ? \"enter\" : \"exit\"}\n />\n )\n },\n)\n\nPopoverTransition.defaultProps = {\n variants: scaleFade,\n}\n","/**\n * Credit goes to `framer-motion` of this useful utilities.\n * License can be found here: https://github.com/framer/motion\n */\n\nimport { addDomEvent, getEventWindow, isBrowser } from \"./dom\"\n\nexport type AnyPointerEvent = MouseEvent | TouchEvent | PointerEvent\n\ntype PointType = \"page\" | \"client\"\n\nexport function isMouseEvent(event: AnyPointerEvent): event is MouseEvent {\n const win = getEventWindow(event)\n\n // PointerEvent inherits from MouseEvent so we can't use a straight instanceof check.\n if (\n typeof win.PointerEvent !== \"undefined\" &&\n event instanceof win.PointerEvent\n ) {\n return !!(event.pointerType === \"mouse\")\n }\n\n return event instanceof win.MouseEvent\n}\n\nexport function isTouchEvent(event: AnyPointerEvent): event is TouchEvent {\n const hasTouches = !!(event as TouchEvent).touches\n return hasTouches\n}\n\nexport interface Point {\n x: number\n y: number\n}\n\nexport interface PointerEventInfo {\n point: Point\n}\n\nexport type EventHandler = (\n event: AnyPointerEvent,\n info: PointerEventInfo,\n) => void\n\n/**\n * Filters out events not attached to the primary pointer (currently left mouse button)\n * @param eventHandler\n */\nfunction filterPrimaryPointer(eventHandler: EventListener): EventListener {\n return (event: Event) => {\n const win = getEventWindow(event)\n const isMouseEvent = event instanceof win.MouseEvent\n const isPrimaryPointer =\n !isMouseEvent || (isMouseEvent && (event as MouseEvent).button === 0)\n if (isPrimaryPointer) {\n eventHandler(event)\n }\n }\n}\n\nexport type EventListenerWithPointInfo = (\n e: AnyPointerEvent,\n info: PointerEventInfo,\n) => void\n\nconst defaultPagePoint = { pageX: 0, pageY: 0 }\n\nfunction pointFromTouch(e: TouchEvent, pointType: PointType = \"page\") {\n const primaryTouch = e.touches[0] || e.changedTouches[0]\n const point = primaryTouch || defaultPagePoint\n\n return {\n x: point[`${pointType}X`],\n y: point[`${pointType}Y`],\n }\n}\n\nfunction pointFromMouse(\n point: MouseEvent | PointerEvent,\n pointType: PointType = \"page\",\n) {\n return {\n x: point[`${pointType}X`],\n y: point[`${pointType}Y`],\n }\n}\n\nexport function extractEventInfo(\n event: AnyPointerEvent,\n pointType: PointType = \"page\",\n): PointerEventInfo {\n return {\n point: isTouchEvent(event)\n ? pointFromTouch(event, pointType)\n : pointFromMouse(event, pointType),\n }\n}\n\nexport function getViewportPointFromEvent(event: AnyPointerEvent) {\n return extractEventInfo(event, \"client\")\n}\n\nexport const wrapPointerEventHandler = (\n handler: EventListenerWithPointInfo,\n shouldFilterPrimaryPointer = false,\n): EventListener => {\n const listener: EventListener = (event: any) =>\n handler(event, extractEventInfo(event))\n\n return shouldFilterPrimaryPointer ? filterPrimaryPointer(listener) : listener\n}\n\n// We check for event support via functions in case they've been mocked by a testing suite.\nconst supportsPointerEvents = () => isBrowser && window.onpointerdown === null\nconst supportsTouchEvents = () => isBrowser && window.ontouchstart === null\nconst supportsMouseEvents = () => isBrowser && window.onmousedown === null\n\ninterface PointerNameMap {\n pointerdown: string\n pointermove: string\n pointerup: string\n pointercancel: string\n pointerover?: string\n pointerout?: string\n pointerenter?: string\n pointerleave?: string\n}\n\nconst mouseEventNames: PointerNameMap = {\n pointerdown: \"mousedown\",\n pointermove: \"mousemove\",\n pointerup: \"mouseup\",\n pointercancel: \"mousecancel\",\n pointerover: \"mouseover\",\n pointerout: \"mouseout\",\n pointerenter: \"mouseenter\",\n pointerleave: \"mouseleave\",\n}\n\nconst touchEventNames: PointerNameMap = {\n pointerdown: \"touchstart\",\n pointermove: \"touchmove\",\n pointerup: \"touchend\",\n pointercancel: \"touchcancel\",\n}\n\nexport function getPointerEventName(name: string): string {\n if (supportsPointerEvents()) {\n return name\n }\n if (supportsTouchEvents()) {\n return touchEventNames[name]\n }\n if (supportsMouseEvents()) {\n return mouseEventNames[name]\n }\n\n return name\n}\n\nexport function addPointerEvent(\n target: EventTarget,\n eventName: string,\n handler: EventListenerWithPointInfo,\n options?: AddEventListenerOptions,\n) {\n return addDomEvent(\n target,\n getPointerEventName(eventName),\n wrapPointerEventHandler(handler, eventName === \"pointerdown\"),\n options,\n )\n}\n\nexport function isMultiTouchEvent(event: AnyPointerEvent) {\n return isTouchEvent(event) && event.touches.length > 1\n}\n","import {\n contains,\n detectBrowser,\n focus,\n getOwnerDocument,\n isActiveElement,\n isRefObject,\n} from \"@chakra-ui/utils\"\nimport { RefObject } from \"react\"\nimport { usePointerEvent } from \"./use-pointer-event\"\n\nexport interface UseFocusOnMouseDownProps {\n enabled?: boolean\n ref: RefObject<HTMLElement>\n elements?: Array<RefObject<HTMLElement> | HTMLElement | null>\n}\n\n/**\n * Polyfill to get `relatedTarget` working correctly consistently\n * across all browsers.\n *\n * It ensures that elements receives focus on pointer down if\n * it's not the active active element.\n *\n * @internal\n */\nexport function useFocusOnPointerDown(props: UseFocusOnMouseDownProps) {\n const { ref, elements, enabled } = props\n\n const isSafari = detectBrowser(\"Safari\")\n const doc = () => getOwnerDocument(ref.current)\n\n usePointerEvent(doc, \"pointerdown\", (event) => {\n if (!isSafari || !enabled) return\n const target = event.target as HTMLElement\n\n const els = elements ?? [ref]\n const isValidTarget = els.some((elementOrRef) => {\n const el = isRefObject(elementOrRef) ? elementOrRef.current : elementOrRef\n return contains(el, target)\n })\n\n if (!isActiveElement(target) && isValidTarget) {\n event.preventDefault()\n focus(target)\n }\n })\n}\n","import { isBrowser } from \"./dom\"\n\nfunction getUserAgentBrowser(navigator: Navigator) {\n const { userAgent: ua, vendor } = navigator\n const android = /(android)/i.test(ua)\n\n switch (true) {\n case /CriOS/.test(ua):\n return \"Chrome for iOS\"\n case /Edg\\//.test(ua):\n return \"Edge\"\n case android && /Silk\\//.test(ua):\n return \"Silk\"\n case /Chrome/.test(ua) && /Google Inc/.test(vendor):\n return \"Chrome\"\n case /Firefox\\/\\d+\\.\\d+$/.test(ua):\n return \"Firefox\"\n case android:\n return \"AOSP\"\n case /MSIE|Trident/.test(ua):\n return \"IE\"\n case /Safari/.test(navigator.userAgent) && /Apple Computer/.test(ua):\n return \"Safari\"\n case /AppleWebKit/.test(ua):\n return \"WebKit\"\n default:\n return null\n }\n}\n\nexport type UserAgentBrowser = NonNullable<\n ReturnType<typeof getUserAgentBrowser>\n>\n\nfunction getUserAgentOS(navigator: Navigator) {\n const { userAgent: ua, platform } = navigator\n switch (true) {\n case /Android/.test(ua):\n return \"Android\"\n case /iPhone|iPad|iPod/.test(platform):\n return \"iOS\"\n case /Win/.test(platform):\n return \"Windows\"\n case /Mac/.test(platform):\n return \"Mac\"\n case /CrOS/.test(ua):\n return \"Chrome OS\"\n case /Firefox/.test(ua):\n return \"Firefox OS\"\n default:\n return null\n }\n}\n\nexport type UserAgentOS = NonNullable<ReturnType<typeof getUserAgentOS>>\n\nexport function detectDeviceType(navigator: Navigator) {\n const { userAgent: ua } = navigator\n if (/(tablet)|(iPad)|(Nexus 9)/i.test(ua)) return \"tablet\"\n if (/(mobi)/i.test(ua)) return \"phone\"\n return \"desktop\"\n}\n\nexport type UserAgentDeviceType = NonNullable<\n ReturnType<typeof detectDeviceType>\n>\n\nexport function detectOS(os: UserAgentOS) {\n if (!isBrowser) return false\n return getUserAgentOS(window.navigator) === os\n}\n\nexport function detectBrowser(browser: UserAgentBrowser) {\n if (!isBrowser) return false\n return getUserAgentBrowser(window.navigator) === browser\n}\n\nexport function detectTouch() {\n if (!isBrowser) return false\n return (\n window.ontouchstart === null &&\n window.ontouchmove === null &&\n window.ontouchend === null\n )\n}\n","/**\n * Credit goes to `framer-motion` of this useful utilities.\n * License can be found here: https://github.com/framer/motion\n */\n\nimport {\n EventListenerWithPointInfo,\n getPointerEventName,\n wrapPointerEventHandler,\n} from \"@chakra-ui/utils\"\nimport { EventListenerEnv, useEventListener } from \"./use-event-listener\"\n\n/**\n * @internal\n */\nexport function usePointerEvent(\n env: EventListenerEnv,\n eventName: string,\n handler: EventListenerWithPointInfo,\n options?: AddEventListenerOptions,\n) {\n return useEventListener(\n getPointerEventName(eventName),\n wrapPointerEventHandler(handler, eventName === \"pointerdown\"),\n env,\n options,\n )\n}\n","import {\n contains,\n focus,\n FocusableElement,\n getAllFocusable,\n isRefObject,\n} from \"@chakra-ui/utils\"\nimport React, { useCallback } from \"react\"\nimport { useEventListener } from \"./use-event-listener\"\nimport { useUpdateEffect } from \"./use-update-effect\"\n\nexport interface UseFocusOnShowOptions {\n visible?: boolean\n shouldFocus?: boolean\n preventScroll?: boolean\n focusRef?: React.RefObject<FocusableElement>\n}\n\nconst defaultOptions: UseFocusOnShowOptions = {\n preventScroll: true,\n shouldFocus: false,\n}\n\nexport function useFocusOnShow<T extends HTMLElement>(\n target: React.RefObject<T> | T,\n options = defaultOptions,\n) {\n const { focusRef, preventScroll, shouldFocus, visible } = options\n const element = isRefObject(target) ? target.current : target\n\n const autoFocus = shouldFocus && visible\n\n const onFocus = useCallback(() => {\n if (!element || !autoFocus) return\n\n if (contains(element, document.activeElement as HTMLElement)) return\n\n if (focusRef?.current) {\n focus(focusRef.current, { preventScroll, nextTick: true })\n } else {\n const tabbableEls = getAllFocusable(element)\n if (tabbableEls.length > 0) {\n focus(tabbableEls[0], { preventScroll, nextTick: true })\n }\n }\n }, [autoFocus, preventScroll, element, focusRef])\n\n useUpdateEffect(() => {\n onFocus()\n }, [onFocus])\n\n useEventListener(\"transitionend\", onFocus, element)\n}\n","import {\n useDisclosure,\n useFocusOnHide,\n useFocusOnPointerDown,\n useFocusOnShow,\n useIds,\n} from \"@chakra-ui/hooks\"\nimport { popperCSSVars, usePopper, UsePopperProps } from \"@chakra-ui/popper\"\nimport { HTMLProps, mergeRefs, PropGetter } from \"@chakra-ui/react-utils\"\nimport {\n callAllHandlers,\n contains,\n determineLazyBehavior,\n FocusableElement,\n getRelatedTarget,\n LazyBehavior,\n px,\n} from \"@chakra-ui/utils\"\nimport { RefObject, useCallback, useEffect, useRef, useState } from \"react\"\n\nconst TRIGGER = {\n click: \"click\",\n hover: \"hover\",\n} as const\n\nexport interface UsePopoverProps extends UsePopperProps {\n /**\n * The html `id` attribute of the popover.\n * If not provided, we generate a unique id.\n *\n * This `id` is also used to auto-generate the `aria-labelledby`\n * and `aria-decribedby` attributes that points to the `PopoverHeader` and `PopoverBody`\n */\n id?: string\n /**\n * If `true`, the popover will be opened in controlled mode.\n */\n isOpen?: boolean\n /**\n * If `true`, the popover will be initially opened.\n */\n defaultIsOpen?: boolean\n /**\n * The `ref` of the element that should receive focus when the popover opens.\n */\n initialFocusRef?: RefObject<FocusableElement>\n /**\n * If `true`, focus will be returned to the element that triggers the popover\n * when it closes\n */\n returnFocusOnClose?: boolean\n /**\n * If `true`, focus will be transferred to the first interactive element\n * when the popover opens\n */\n autoFocus?: boolean\n /**\n * If `true`, the popover will close when you blur out it by\n * clicking outside or tabbing out\n */\n closeOnBlur?: boolean\n /**\n * If `true`, the popover will close when you hit the `Esc` key\n */\n closeOnEsc?: boolean\n /**\n * Callback fired when the popover opens\n */\n onOpen?: () => void\n /**\n * Callback fired when the popover closes\n */\n onClose?: () => void\n /**\n * The size of the popover arrow\n */\n arrowSize?: number\n /**\n * The `box-shadow` of the popover arrow\n */\n arrowShadowColor?: string\n /**\n * The interaction that triggers the popover.\n *\n * `hover` - means the popover will open when you hover with mouse or\n * focus with keyboard on the popover trigger\n *\n * `click` - means the popover will open on click or\n * press `Enter` to `Space` on keyboard\n */\n trigger?: keyof typeof TRIGGER\n openDelay?: number\n closeDelay?: number\n /**\n * Performance 🚀:\n * If `true`, the PopoverContent rendering will be deferred\n * until the popover is open.\n */\n isLazy?: boolean\n /**\n * Performance 🚀:\n * The lazy behavior of popover's content when not visible.\n * Only works when `isLazy={true}`\n *\n * - \"unmount\": The popover's content is always unmounted when not open.\n * - \"keepMounted\": The popover's content initially unmounted,\n * but stays mounted when popover is open.\n *\n * @default \"unmount\"\n */\n lazyBehavior?: LazyBehavior\n /**\n * If `true`, the popover will be positioned when it mounts\n * (even if it's not open)\n *\n * Note 🚨: We don't recommend using this in a popover/menu intensive UI or page\n * as it might affect scrolling performance.\n */\n computePositionOnMount?: boolean\n}\n\n/**\n * @internal\n */\nexport function usePopover(props: UsePopoverProps = {}) {\n const {\n closeOnBlur = true,\n closeOnEsc = true,\n initialFocusRef,\n id,\n returnFocusOnClose = true,\n autoFocus = true,\n arrowSize,\n arrowShadowColor,\n trigger = TRIGGER.click,\n openDelay = 200,\n closeDelay = 200,\n isLazy,\n lazyBehavior = \"unmount\",\n computePositionOnMount,\n ...popperProps\n } = props\n\n const { isOpen, onClose, onOpen, onToggle } = useDisclosure(props)\n\n const triggerRef = useRef<HTMLElement>(null)\n const popoverRef = useRef<HTMLElement>(null)\n\n const isHoveringRef = useRef(false)\n\n const hasBeenOpened = useRef(false)\n if (isOpen) {\n hasBeenOpened.current = true\n }\n\n const [hasHeader, setHasHeader] = useState(false)\n const [hasBody, setHasBody] = useState(false)\n\n const [triggerId, popoverId, headerId, bodyId] = useIds(\n id,\n \"popover-trigger\",\n \"popover-content\",\n \"popover-header\",\n \"popover-body\",\n )\n\n const {\n referenceRef,\n getArrowProps,\n getPopperProps,\n getArrowInnerProps,\n forceUpdate,\n } = usePopper({\n ...popperProps,\n enabled: isOpen || !!computePositionOnMount,\n })\n\n useFocusOnPointerDown({\n enabled: isOpen,\n ref: triggerRef,\n })\n\n useFocusOnHide(popoverRef, {\n focusRef: triggerRef,\n visible: isOpen,\n shouldFocus: returnFocusOnClose && trigger === TRIGGER.click,\n })\n\n useFocusOnShow(popoverRef, {\n focusRef: initialFocusRef,\n visible: isOpen,\n shouldFocus: autoFocus && trigger === TRIGGER.click,\n })\n\n const shouldRenderChildren = determineLazyBehavior({\n hasBeenSelected: hasBeenOpened.current,\n isLazy,\n lazyBehavior,\n isSelected: isOpen,\n })\n\n const getPopoverProps: PropGetter = useCallback(\n (props = {}, _ref = null) => {\n const popoverProps: HTMLProps = {\n ...props,\n style: {\n ...props.style,\n transformOrigin: popperCSSVars.transformOrigin.varRef,\n [popperCSSVars.arrowSize.var]: arrowSize ? px(arrowSize) : undefined,\n [popperCSSVars.arrowShadowColor.var]: arrowShadowColor,\n },\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, (event) => {\n if (closeOnEsc && event.key === \"Escape\") {\n onClose()\n }\n }),\n onBlur: callAllHandlers(props.onBlur, (event) => {\n const relatedTarget = getRelatedTarget(event)\n const targetIsPopover = contains(popoverRef.current, relatedTarget)\n const targetIsTrigger = contains(triggerRef.current, relatedTarget)\n const 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, () => {\n isHoveringRef.current = true\n })\n popoverProps.onMouseLeave = callAllHandlers(props.onMouseLeave, () => {\n isHoveringRef.current = false\n setTimeout(onClose, closeDelay)\n })\n }\n\n return popoverProps\n },\n [\n shouldRenderChildren,\n popoverId,\n hasHeader,\n headerId,\n hasBody,\n bodyId,\n trigger,\n closeOnEsc,\n onClose,\n isOpen,\n closeOnBlur,\n closeDelay,\n arrowShadowColor,\n arrowSize,\n ],\n )\n\n const getPopoverPositionerProps: PropGetter = useCallback(\n (props = {}, forwardedRef = null) =>\n getPopperProps(\n {\n ...props,\n style: {\n visibility: isOpen ? \"visible\" : \"hidden\",\n ...props.style,\n },\n },\n forwardedRef,\n ),\n [isOpen, getPopperProps],\n )\n\n const openTimeout = useRef<number>()\n const closeTimeout = useRef<number>()\n\n const getTriggerProps: PropGetter = useCallback(\n (props = {}, _ref = null) => {\n const triggerProps: HTMLProps = {\n ...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 /**\n * Any content that shows on hover or focus must be dismissible.\n * This case pressing `Escape` will dismiss the popover\n */\n triggerProps.onKeyDown = callAllHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Escape\") {\n onClose()\n }\n })\n\n triggerProps.onMouseEnter = callAllHandlers(props.onMouseEnter, () => {\n isHoveringRef.current = true\n openTimeout.current = window.setTimeout(onOpen, openDelay)\n })\n\n triggerProps.onMouseLeave = callAllHandlers(props.onMouseLeave, () => {\n isHoveringRef.current = false\n\n if (openTimeout.current) {\n clearTimeout(openTimeout.current)\n openTimeout.current = undefined\n }\n\n closeTimeout.current = window.setTimeout(() => {\n if (isHoveringRef.current === false) {\n onClose()\n }\n }, closeDelay)\n })\n }\n\n return triggerProps\n },\n [\n triggerId,\n isOpen,\n popoverId,\n trigger,\n referenceRef,\n onToggle,\n onOpen,\n onClose,\n openDelay,\n closeDelay,\n ],\n )\n\n useEffect(() => {\n return () => {\n if (openTimeout.current) {\n clearTimeout(openTimeout.current)\n }\n if (closeTimeout.current) {\n clearTimeout(closeTimeout.current)\n }\n }\n }, [])\n\n const getHeaderProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n id: headerId,\n ref: mergeRefs(ref, (node: HTMLElement | null) => {\n setHasHeader(!!node)\n }),\n }),\n [headerId],\n )\n\n const getBodyProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n id: bodyId,\n ref: mergeRefs(ref, (node) => {\n setHasBody(!!node)\n }),\n }),\n [bodyId],\n )\n\n return {\n forceUpdate,\n isOpen,\n onClose,\n getArrowProps,\n getArrowInnerProps,\n getPopoverPositionerProps,\n getPopoverProps,\n getTriggerProps,\n getHeaderProps,\n getBodyProps,\n }\n}\n\nexport type UsePopoverReturn = ReturnType<typeof usePopover>\n","import { CloseButton, CloseButtonProps } from \"@chakra-ui/close-button\"\nimport { MaybeRenderProp } from \"@chakra-ui/react-utils\"\nimport {\n chakra,\n forwardRef,\n HTMLChakraProps,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n useTheme,\n} from \"@chakra-ui/system\"\nimport { cx, runIfFn, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\nimport { PopoverProvider, usePopoverContext } from \"./popover-context\"\nimport { PopoverTransition, PopoverTransitionProps } from \"./popover-transition\"\nimport { usePopover, UsePopoverProps } from \"./use-popover\"\n\nexport { usePopoverContext }\n\nexport interface PopoverProps extends UsePopoverProps, ThemingProps<\"Popover\"> {\n /**\n * The content of the popover. It is usually the `PopoverTrigger`,\n * and `PopoverContent`\n */\n children?: MaybeRenderProp<{\n isOpen: boolean\n onClose: () => void\n forceUpdate: (() => void) | undefined\n }>\n}\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 */\nexport const Popover: React.FC<PopoverProps> = (props) => {\n const styles = useMultiStyleConfig(\"Popover\", props)\n\n const { children, ...rest } = omitThemingProps(props)\n const theme = useTheme()\n const context = usePopover({ ...rest, direction: theme.direction })\n\n return (\n <PopoverProvider value={context}>\n <StylesProvider value={styles}>\n {runIfFn(children, {\n isOpen: context.isOpen,\n onClose: context.onClose,\n forceUpdate: context.forceUpdate,\n })}\n </StylesProvider>\n </PopoverProvider>\n )\n}\n\nif (__DEV__) {\n Popover.displayName = \"Popover\"\n}\n\n/**\n * PopoverTrigger opens the popover's content. It must be an interactive element\n * such as `button` or `a`.\n */\nexport const PopoverTrigger: React.FC = (props) => {\n // enforce a single child\n const child: any = React.Children.only(props.children)\n const { getTriggerProps } = usePopoverContext()\n return React.cloneElement(child, getTriggerProps(child.props, child.ref))\n}\n\nif (__DEV__) {\n PopoverTrigger.displayName = \"PopoverTrigger\"\n}\n\nexport interface PopoverContentProps extends PopoverTransitionProps {\n rootProps?: HTMLChakraProps<\"div\">\n}\n\nexport const PopoverContent = forwardRef<PopoverContentProps, \"section\">(\n (props, ref) => {\n const { rootProps, ...contentProps } = props\n\n const { getPopoverProps, getPopoverPositionerProps } = usePopoverContext()\n\n const styles = useStyles()\n const contentStyles: SystemStyleObject = {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n ...styles.content,\n }\n\n return (\n <chakra.div\n {...getPopoverPositionerProps(rootProps)}\n __css={styles.popper}\n className=\"chakra-popover__popper\"\n >\n <PopoverTransition\n {...getPopoverProps(contentProps, ref)}\n className={cx(\"chakra-popover__content\", props.className)}\n __css={contentStyles}\n />\n </chakra.div>\n )\n },\n)\n\nif (__DEV__) {\n PopoverContent.displayName = \"PopoverContent\"\n}\n\nexport interface PopoverHeaderProps extends HTMLChakraProps<\"header\"> {}\n\n/**\n * PopoverHeader is the accessible header or label\n * for the popover's content and it is first announced by screenreaders.\n */\nexport const PopoverHeader = forwardRef<PopoverHeaderProps, \"header\">(\n (props, ref) => {\n const { getHeaderProps } = usePopoverContext()\n\n const styles = useStyles()\n\n return (\n <chakra.header\n {...getHeaderProps(props, ref)}\n className={cx(\"chakra-popover__header\", props.className)}\n __css={styles.header}\n />\n )\n },\n)\n\nif (__DEV__) {\n PopoverHeader.displayName = \"PopoverHeader\"\n}\n\nexport interface PopoverBodyProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * PopoverBody is the main content area for the popover. Should contain\n * at least one interactive element.\n */\nexport const PopoverBody = forwardRef<PopoverBodyProps, \"div\">((props, ref) => {\n const { getBodyProps } = usePopoverContext()\n\n const styles = useStyles()\n\n return (\n <chakra.div\n {...getBodyProps(props, ref)}\n className={cx(\"chakra-popover__body\", props.className)}\n __css={styles.body}\n />\n )\n})\n\nif (__DEV__) {\n PopoverBody.displayName = \"PopoverBody\"\n}\nexport interface PopoverFooterProps extends HTMLChakraProps<\"footer\"> {}\n\nexport const PopoverFooter: React.FC<PopoverFooterProps> = (props) => {\n const styles = useStyles()\n return (\n <chakra.footer\n {...props}\n className={cx(\"chakra-popover__footer\", props.className)}\n __css={styles.footer}\n />\n )\n}\n\nif (__DEV__) {\n PopoverFooter.displayName = \"PopoverFooter\"\n}\n\nexport type PopoverCloseButtonProps = CloseButtonProps\n\nexport const PopoverCloseButton: React.FC<CloseButtonProps> = (props) => {\n const { onClose } = usePopoverContext()\n const styles = useStyles()\n return (\n <CloseButton\n size=\"sm\"\n onClick={onClose}\n className={cx(\"chakra-popover__close-btn\", props.className)}\n __css={styles.closeButton}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n PopoverCloseButton.displayName = \"PopoverCloseButton\"\n}\n\nexport interface PopoverArrowProps extends HTMLChakraProps<\"div\"> {}\n\nexport const PopoverArrow: React.FC<PopoverArrowProps> = (props) => {\n const { bg, bgColor, backgroundColor } = props\n const { getArrowProps, getArrowInnerProps } = usePopoverContext()\n const styles = useStyles()\n const arrowBg = bg ?? bgColor ?? backgroundColor\n return (\n <chakra.div\n {...getArrowProps()}\n className=\"chakra-popover__arrow-positioner\"\n >\n <chakra.div\n className={cx(\"chakra-popover__arrow\", props.className)}\n {...getArrowInnerProps(props)}\n __css={{\n ...styles.arrow,\n \"--popper-arrow-bg\": arrowBg\n ? `colors.${arrowBg}, ${arrowBg}`\n : undefined,\n }}\n />\n </chakra.div>\n )\n}\n\nif (__DEV__) {\n PopoverArrow.displayName = \"PopoverArrow\"\n}\n","import { useFormControlContext } from \"@chakra-ui/form-control\"\nimport { useBoolean, useControllableProp, useId } from \"@chakra-ui/hooks\"\nimport { mergeRefs, PropGetter } from \"@chakra-ui/react-utils\"\nimport { ariaAttr, callAllHandlers, dataAttr, warn } from \"@chakra-ui/utils\"\nimport { visuallyHiddenStyle } from \"@chakra-ui/visually-hidden\"\nimport {\n ChangeEvent,\n SyntheticEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\"\nimport { useRadioGroupContext } from \"./radio-group\"\n\n/**\n * @todo use the `useClickable` hook here\n * to manage the isFocusable & isDisabled props\n */\nexport interface UseRadioProps {\n /**\n * id assigned to input\n */\n id?: string\n /**\n * The name of the input field in a radio\n * (Useful for form submission).\n */\n name?: string\n /**\n * The value to be used in the radio button.\n * This is the value that will be returned on form submission.\n */\n value?: string | number\n /**\n * If `true`, the radio will be checked.\n * You'll need to pass `onChange` to update its value (since it is now controlled)\n */\n isChecked?: boolean\n /**\n * If `true`, the radio will be initially checked.\n *\n * @deprecated Please use `defaultChecked` which mirrors the default prop\n * name for radio elements.\n */\n defaultIsChecked?: boolean\n /**\n * If `true`, the radio will be initially checked.\n */\n defaultChecked?: boolean\n /**\n * If `true`, the radio will be disabled\n */\n isDisabled?: boolean\n /**\n * If `true` and `isDisabled` is true, the radio will remain\n * focusable but not interactive.\n */\n isFocusable?: boolean\n /**\n * If `true`, the radio will be read-only\n */\n isReadOnly?: boolean\n /**\n * If `true`, the radio button will be invalid. This also sets `aria-invalid` to `true`.\n */\n isInvalid?: boolean\n /**\n * If `true`, the radio button will be required. This also sets `aria-required` to `true`.\n */\n isRequired?: boolean\n /**\n * Function called when checked state of the `input` changes\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void\n /**\n * @internal\n */\n \"data-radiogroup\"?: any\n}\n\nexport function useRadio(props: UseRadioProps = {}) {\n const {\n defaultIsChecked,\n defaultChecked = defaultIsChecked,\n isChecked: isCheckedProp,\n isFocusable,\n isDisabled: isDisabledProp,\n isReadOnly: isReadOnlyProp,\n isRequired: isRequiredProp,\n onChange,\n isInvalid: isInvalidProp,\n name,\n value,\n id: idProp,\n \"data-radiogroup\": dataRadioGroup,\n ...htmlProps\n } = props\n\n const uuid = useId(undefined, \"radio\")\n\n const formControl = useFormControlContext()\n const group = useRadioGroupContext()\n\n const isWithinRadioGroup = !!group || !!dataRadioGroup\n const isWithinFormControl = !!formControl\n\n let id = isWithinFormControl && !isWithinRadioGroup ? formControl.id : uuid\n id = idProp ?? id\n\n const isDisabled = isDisabledProp ?? formControl?.isDisabled\n const isReadOnly = isReadOnlyProp ?? formControl?.isReadOnly\n const isRequired = isRequiredProp ?? formControl?.isRequired\n const isInvalid = isInvalidProp ?? formControl?.isInvalid\n\n const [isFocused, setFocused] = useBoolean()\n const [isHovered, setHovering] = useBoolean()\n const [isActive, setActive] = useBoolean()\n\n const ref = useRef<HTMLInputElement>(null)\n\n const [isCheckedState, setChecked] = useState(Boolean(defaultChecked))\n\n const [isControlled, isChecked] = useControllableProp(\n isCheckedProp,\n isCheckedState,\n )\n\n warn({\n condition: !!defaultIsChecked,\n message:\n 'The \"defaultIsChecked\" prop has been deprecated and will be removed in a future version. ' +\n 'Please use the \"defaultChecked\" prop instead, which mirrors default React checkbox behavior.',\n })\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (isReadOnly || isDisabled) {\n event.preventDefault()\n return\n }\n\n if (!isControlled) {\n setChecked(event.target.checked)\n }\n\n onChange?.(event)\n },\n [isControlled, isDisabled, isReadOnly, onChange],\n )\n\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \" \") {\n setActive.on()\n }\n },\n [setActive],\n )\n\n const onKeyUp = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \" \") {\n setActive.off()\n }\n },\n [setActive],\n )\n\n const getCheckboxProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n 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 [\n isActive,\n isHovered,\n isDisabled,\n isInvalid,\n isChecked,\n isFocused,\n isReadOnly,\n setActive.on,\n setActive.off,\n setHovering.on,\n setHovering.off,\n ],\n )\n\n const { onFocus, onBlur } = formControl ?? {}\n\n const getInputProps: PropGetter<HTMLInputElement> = useCallback(\n (props = {}, forwardedRef = null) => {\n const trulyDisabled = isDisabled && !isFocusable\n\n return {\n ...props,\n id,\n ref: mergeRefs(forwardedRef, ref),\n type: \"radio\",\n name,\n 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 },\n [\n isDisabled,\n isFocusable,\n id,\n name,\n value,\n handleChange,\n onBlur,\n setFocused,\n onFocus,\n onKeyDown,\n onKeyUp,\n isChecked,\n isReadOnly,\n isRequired,\n isInvalid,\n ],\n )\n\n const getLabelProps: PropGetter = (props = {}, ref = null) => ({\n ...props,\n 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 const getRootProps: PropGetter = (props, ref = null) => ({\n ...props,\n ref,\n \"data-disabled\": dataAttr(isDisabled),\n \"data-checked\": dataAttr(isChecked),\n \"data-invalid\": dataAttr(isInvalid),\n })\n\n return {\n state: {\n isInvalid,\n isFocused,\n isChecked,\n isActive,\n isHovered,\n isDisabled,\n isReadOnly,\n isRequired,\n },\n getCheckboxProps,\n getInputProps,\n getLabelProps,\n getRootProps,\n htmlProps,\n }\n}\n\n/**\n * Prevent `onBlur` being fired when the checkbox label is touched\n */\nfunction stop(event: SyntheticEvent) {\n event.preventDefault()\n event.stopPropagation()\n}\n\nexport type UseRadioReturn = ReturnType<typeof useRadio>\n","import {\n chakra,\n forwardRef,\n layoutPropNames,\n omitThemingProps,\n SystemProps,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { callAll, split, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\nimport { useRadioGroupContext } from \"./radio-group\"\nimport { useRadio, UseRadioProps } from \"./use-radio\"\n\ntype Omitted = \"onChange\" | \"defaultChecked\" | \"checked\"\ninterface BaseControlProps extends Omit<HTMLChakraProps<\"div\">, Omitted> {}\n\nexport interface RadioProps\n extends UseRadioProps,\n ThemingProps<\"Radio\">,\n BaseControlProps {\n /**\n * The spacing between the checkbox and its label text\n * @default 0.5rem\n * @type SystemProps[\"marginLeft\"]\n */\n spacing?: SystemProps[\"marginLeft\"]\n /**\n * If `true`, the radio will occupy the full width of its parent container\n *\n * @deprecated\n * This component defaults to 100% width,\n * please use the props `maxWidth` or `width` to configure\n */\n isFullWidth?: boolean\n}\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 */\nexport const Radio = forwardRef<RadioProps, \"input\">((props, ref) => {\n const group = useRadioGroupContext()\n const { onChange: onChangeProp, value: valueProp } = props\n\n const styles = useMultiStyleConfig(\"Radio\", { ...group, ...props })\n\n const ownProps = omitThemingProps(props)\n\n const {\n spacing = \"0.5rem\",\n children,\n isFullWidth,\n isDisabled = group?.isDisabled,\n isFocusable = group?.isFocusable,\n ...rest\n } = ownProps\n\n let isChecked = props.isChecked\n if (group?.value != null && valueProp != null) {\n isChecked = group.value === valueProp\n }\n\n let onChange = onChangeProp\n if (group?.onChange && valueProp != null) {\n onChange = callAll(group.onChange, onChangeProp)\n }\n\n const name = props?.name ?? group?.name\n\n const {\n getInputProps,\n getCheckboxProps,\n getLabelProps,\n getRootProps,\n htmlProps,\n } = useRadio({\n ...rest,\n isChecked,\n isFocusable,\n isDisabled,\n onChange,\n name,\n })\n\n const [layoutProps, otherProps] = split(htmlProps, layoutPropNames as any)\n\n const checkboxProps = getCheckboxProps(otherProps)\n const inputProps = getInputProps({}, ref)\n const labelProps = getLabelProps()\n const rootProps = Object.assign({}, layoutProps, getRootProps())\n\n const rootStyles = {\n width: isFullWidth ? \"full\" : undefined,\n display: \"inline-flex\",\n alignItems: \"center\",\n verticalAlign: \"top\",\n ...styles.container,\n }\n\n const checkboxStyles = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n ...styles.control,\n }\n\n const labelStyles: SystemStyleObject = {\n userSelect: \"none\",\n marginStart: spacing,\n ...styles.label,\n }\n\n return (\n <chakra.label className=\"chakra-radio\" {...rootProps} __css={rootStyles}>\n <input className=\"chakra-radio__input\" {...inputProps} />\n <chakra.span\n className=\"chakra-radio__control\"\n {...checkboxProps}\n __css={checkboxStyles}\n />\n {children && (\n <chakra.span\n className=\"chakra-radio__label\"\n {...labelProps}\n __css={labelStyles}\n >\n {children}\n </chakra.span>\n )}\n </chakra.label>\n )\n})\n\nif (__DEV__) {\n Radio.displayName = \"Radio\"\n}\n"],"sourceRoot":""}