construct-hub 0.3.56 → 0.3.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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":""}