construct-hub-webapp 0.1.1465 → 0.1.1467

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 (397) hide show
  1. package/build/asset-manifest.json +5 -5
  2. package/build/index.html +1 -1
  3. package/build/static/css/main.efe592a7.css.map +1 -1
  4. package/build/static/js/294.61480951.chunk.js.map +1 -1
  5. package/build/static/js/323.87521e0e.chunk.js.map +1 -1
  6. package/build/static/js/332.b740638d.chunk.js.map +1 -1
  7. package/build/static/js/375.6faf5557.chunk.js.map +1 -1
  8. package/build/static/js/421.89f85fcb.chunk.js.map +1 -1
  9. package/build/static/js/451.916d6ace.chunk.js.map +1 -1
  10. package/build/static/js/453.13ac0f49.chunk.js.map +1 -1
  11. package/build/static/js/487.e1807da5.chunk.js +3 -0
  12. package/build/static/js/487.e1807da5.chunk.js.map +1 -0
  13. package/build/static/js/496.2a6b6f6f.chunk.js.map +1 -1
  14. package/build/static/js/516.87cad50a.chunk.js.map +1 -1
  15. package/build/static/js/591.6b31b86a.chunk.js.map +1 -1
  16. package/build/static/js/619.1a7deb33.chunk.js.map +1 -1
  17. package/build/static/js/773.279948f6.chunk.js.map +1 -1
  18. package/build/static/js/8.75aab01d.chunk.js.map +1 -1
  19. package/build/static/js/857.8e026699.chunk.js.map +1 -1
  20. package/build/static/js/959.abcce3a0.chunk.js.map +1 -1
  21. package/build/static/js/main.6eca6827.js +3 -0
  22. package/build/static/js/main.6eca6827.js.map +1 -0
  23. package/coverage/clover.xml +2 -2
  24. package/coverage/lcov-report/index.html +1 -1
  25. package/coverage/lcov-report/src/App.tsx.html +1 -1
  26. package/coverage/lcov-report/src/api/catalog-search/catalog-search.ts.html +1 -1
  27. package/coverage/lcov-report/src/api/catalog-search/constants.ts.html +1 -1
  28. package/coverage/lcov-report/src/api/catalog-search/index.html +1 -1
  29. package/coverage/lcov-report/src/api/catalog-search/index.ts.html +1 -1
  30. package/coverage/lcov-report/src/api/catalog-search/util.ts.html +1 -1
  31. package/coverage/lcov-report/src/api/config/index.html +1 -1
  32. package/coverage/lcov-report/src/api/config/index.ts.html +1 -1
  33. package/coverage/lcov-report/src/api/package/assembly.ts.html +1 -1
  34. package/coverage/lcov-report/src/api/package/docs.ts.html +1 -1
  35. package/coverage/lcov-report/src/api/package/index.html +1 -1
  36. package/coverage/lcov-report/src/api/package/metadata.ts.html +1 -1
  37. package/coverage/lcov-report/src/api/package/packages.ts.html +1 -1
  38. package/coverage/lcov-report/src/api/package/util.ts.html +1 -1
  39. package/coverage/lcov-report/src/api/stats/index.html +1 -1
  40. package/coverage/lcov-report/src/api/stats/index.ts.html +1 -1
  41. package/coverage/lcov-report/src/api/versions/index.html +1 -1
  42. package/coverage/lcov-report/src/api/versions/index.ts.html +1 -1
  43. package/coverage/lcov-report/src/components/CDKType/CDKType.tsx.html +1 -1
  44. package/coverage/lcov-report/src/components/CDKType/index.html +1 -1
  45. package/coverage/lcov-report/src/components/CDKType/index.ts.html +1 -1
  46. package/coverage/lcov-report/src/components/Card/Card.tsx.html +1 -1
  47. package/coverage/lcov-report/src/components/Card/index.html +1 -1
  48. package/coverage/lcov-report/src/components/Card/index.ts.html +1 -1
  49. package/coverage/lcov-report/src/components/Code/Code.tsx.html +1 -1
  50. package/coverage/lcov-report/src/components/Code/MultiLineRenderer.tsx.html +1 -1
  51. package/coverage/lcov-report/src/components/Code/SingleLineRenderer.tsx.html +1 -1
  52. package/coverage/lcov-report/src/components/Code/index.html +1 -1
  53. package/coverage/lcov-report/src/components/Code/index.ts.html +1 -1
  54. package/coverage/lcov-report/src/components/Code/types.ts.html +1 -1
  55. package/coverage/lcov-report/src/components/CopyButton/CopyButton.tsx.html +1 -1
  56. package/coverage/lcov-report/src/components/CopyButton/index.html +1 -1
  57. package/coverage/lcov-report/src/components/CopyButton/index.ts.html +1 -1
  58. package/coverage/lcov-report/src/components/ExternalLink/ExternalLink.tsx.html +1 -1
  59. package/coverage/lcov-report/src/components/ExternalLink/index.html +1 -1
  60. package/coverage/lcov-report/src/components/ExternalLink/index.ts.html +1 -1
  61. package/coverage/lcov-report/src/components/FAQ/FAQ.tsx.html +1 -1
  62. package/coverage/lcov-report/src/components/FAQ/FAQHeading.tsx.html +1 -1
  63. package/coverage/lcov-report/src/components/FAQ/FAQItem.tsx.html +1 -1
  64. package/coverage/lcov-report/src/components/FAQ/FAQLink.tsx.html +1 -1
  65. package/coverage/lcov-report/src/components/FAQ/FAQSection.tsx.html +1 -1
  66. package/coverage/lcov-report/src/components/FAQ/FAQSections.tsx.html +1 -1
  67. package/coverage/lcov-report/src/components/FAQ/index.html +1 -1
  68. package/coverage/lcov-report/src/components/FAQ/index.ts.html +1 -1
  69. package/coverage/lcov-report/src/components/Footer/Footer.tsx.html +1 -1
  70. package/coverage/lcov-report/src/components/Footer/constants.ts.html +1 -1
  71. package/coverage/lcov-report/src/components/Footer/index.html +1 -1
  72. package/coverage/lcov-report/src/components/Footer/index.ts.html +1 -1
  73. package/coverage/lcov-report/src/components/Footer/testIds.ts.html +1 -1
  74. package/coverage/lcov-report/src/components/Form/Form.tsx.html +1 -1
  75. package/coverage/lcov-report/src/components/Form/index.html +1 -1
  76. package/coverage/lcov-report/src/components/Form/index.ts.html +1 -1
  77. package/coverage/lcov-report/src/components/Header/DocumentationDropdown.tsx.html +1 -1
  78. package/coverage/lcov-report/src/components/Header/GettingStartedDropdown.tsx.html +1 -1
  79. package/coverage/lcov-report/src/components/Header/Header.tsx.html +1 -1
  80. package/coverage/lcov-report/src/components/Header/HeaderSearch.tsx.html +1 -1
  81. package/coverage/lcov-report/src/components/Header/MobileNav.tsx.html +1 -1
  82. package/coverage/lcov-report/src/components/Header/MobileNavLinks.tsx.html +1 -1
  83. package/coverage/lcov-report/src/components/Header/NavButton.tsx.html +1 -1
  84. package/coverage/lcov-report/src/components/Header/Title.tsx.html +1 -1
  85. package/coverage/lcov-report/src/components/Header/constants.ts.html +1 -1
  86. package/coverage/lcov-report/src/components/Header/index.html +1 -1
  87. package/coverage/lcov-report/src/components/Header/index.ts.html +1 -1
  88. package/coverage/lcov-report/src/components/Header/testIds.ts.html +1 -1
  89. package/coverage/lcov-report/src/components/Highlight/Highlight.tsx.html +1 -1
  90. package/coverage/lcov-report/src/components/Highlight/index.html +1 -1
  91. package/coverage/lcov-report/src/components/Highlight/index.ts.html +1 -1
  92. package/coverage/lcov-report/src/components/LanguageSupportTooltip/LanguageSupportTooltip.tsx.html +1 -1
  93. package/coverage/lcov-report/src/components/LanguageSupportTooltip/index.html +1 -1
  94. package/coverage/lcov-report/src/components/LanguageSupportTooltip/index.ts.html +1 -1
  95. package/coverage/lcov-report/src/components/LazyRoute/LazyRoute.tsx.html +1 -1
  96. package/coverage/lcov-report/src/components/LazyRoute/index.html +1 -1
  97. package/coverage/lcov-report/src/components/LazyRoute/index.ts.html +1 -1
  98. package/coverage/lcov-report/src/components/LicenseLink/LicenseLink.tsx.html +1 -1
  99. package/coverage/lcov-report/src/components/LicenseLink/index.html +1 -1
  100. package/coverage/lcov-report/src/components/LicenseLink/index.ts.html +1 -1
  101. package/coverage/lcov-report/src/components/Markdown/Code.tsx.html +1 -1
  102. package/coverage/lcov-report/src/components/Markdown/Headings.tsx.html +1 -1
  103. package/coverage/lcov-report/src/components/Markdown/Hr.tsx.html +1 -1
  104. package/coverage/lcov-report/src/components/Markdown/Img.tsx.html +1 -1
  105. package/coverage/lcov-report/src/components/Markdown/List.tsx.html +1 -1
  106. package/coverage/lcov-report/src/components/Markdown/Markdown.tsx.html +1 -1
  107. package/coverage/lcov-report/src/components/Markdown/Table.tsx.html +1 -1
  108. package/coverage/lcov-report/src/components/Markdown/Text.tsx.html +1 -1
  109. package/coverage/lcov-report/src/components/Markdown/index.html +1 -1
  110. package/coverage/lcov-report/src/components/Markdown/index.ts.html +1 -1
  111. package/coverage/lcov-report/src/components/Markdown/testIds.ts.html +1 -1
  112. package/coverage/lcov-report/src/components/NavLink/NavLink.tsx.html +1 -1
  113. package/coverage/lcov-report/src/components/NavLink/index.html +1 -1
  114. package/coverage/lcov-report/src/components/NavLink/index.ts.html +1 -1
  115. package/coverage/lcov-report/src/components/NavPopover/NavPopover.tsx.html +1 -1
  116. package/coverage/lcov-report/src/components/NavPopover/NavPopoverContent.tsx.html +1 -1
  117. package/coverage/lcov-report/src/components/NavPopover/NavPopoverTrigger.tsx.html +1 -1
  118. package/coverage/lcov-report/src/components/NavPopover/index.html +1 -1
  119. package/coverage/lcov-report/src/components/NavPopover/index.ts.html +1 -1
  120. package/coverage/lcov-report/src/components/NavPopover/types.ts.html +1 -1
  121. package/coverage/lcov-report/src/components/NavTree/NavItem.tsx.html +1 -1
  122. package/coverage/lcov-report/src/components/NavTree/NavItemWrapper.tsx.html +1 -1
  123. package/coverage/lcov-report/src/components/NavTree/NavTree.tsx.html +1 -1
  124. package/coverage/lcov-report/src/components/NavTree/index.html +1 -1
  125. package/coverage/lcov-report/src/components/NavTree/index.ts.html +1 -1
  126. package/coverage/lcov-report/src/components/NavTree/types.ts.html +1 -1
  127. package/coverage/lcov-report/src/components/PackageCard/Details.tsx.html +1 -1
  128. package/coverage/lcov-report/src/components/PackageCard/EditorsNote.tsx.html +1 -1
  129. package/coverage/lcov-report/src/components/PackageCard/Heading.tsx.html +1 -1
  130. package/coverage/lcov-report/src/components/PackageCard/Highlight.tsx.html +1 -1
  131. package/coverage/lcov-report/src/components/PackageCard/Languages.tsx.html +1 -1
  132. package/coverage/lcov-report/src/components/PackageCard/PackageCard.tsx.html +1 -1
  133. package/coverage/lcov-report/src/components/PackageCard/Tags.tsx.html +1 -1
  134. package/coverage/lcov-report/src/components/PackageCard/WideCard.tsx.html +1 -1
  135. package/coverage/lcov-report/src/components/PackageCard/constants.ts.html +1 -1
  136. package/coverage/lcov-report/src/components/PackageCard/index.html +1 -1
  137. package/coverage/lcov-report/src/components/PackageCard/index.ts.html +1 -1
  138. package/coverage/lcov-report/src/components/PackageCard/testIds.ts.html +1 -1
  139. package/coverage/lcov-report/src/components/PackageLanguages/PackageLanguages.tsx.html +1 -1
  140. package/coverage/lcov-report/src/components/PackageLanguages/index.html +1 -1
  141. package/coverage/lcov-report/src/components/PackageLanguages/index.ts.html +1 -1
  142. package/coverage/lcov-report/src/components/PackageList/PackageList.tsx.html +1 -1
  143. package/coverage/lcov-report/src/components/PackageList/WideCardList.tsx.html +1 -1
  144. package/coverage/lcov-report/src/components/PackageList/index.html +1 -1
  145. package/coverage/lcov-report/src/components/PackageList/index.ts.html +1 -1
  146. package/coverage/lcov-report/src/components/PackageTag/PackageTag.tsx.html +1 -1
  147. package/coverage/lcov-report/src/components/PackageTag/index.html +1 -1
  148. package/coverage/lcov-report/src/components/PackageTag/index.ts.html +1 -1
  149. package/coverage/lcov-report/src/components/Page/Page.tsx.html +1 -1
  150. package/coverage/lcov-report/src/components/Page/index.html +1 -1
  151. package/coverage/lcov-report/src/components/Page/index.ts.html +1 -1
  152. package/coverage/lcov-report/src/components/PageLoader/PageLoader.tsx.html +1 -1
  153. package/coverage/lcov-report/src/components/PageLoader/index.html +1 -1
  154. package/coverage/lcov-report/src/components/PageLoader/index.ts.html +1 -1
  155. package/coverage/lcov-report/src/components/Picture/Picture.tsx.html +1 -1
  156. package/coverage/lcov-report/src/components/Picture/index.html +1 -1
  157. package/coverage/lcov-report/src/components/Picture/index.ts.html +1 -1
  158. package/coverage/lcov-report/src/components/SearchBar/SearchBar.tsx.html +1 -1
  159. package/coverage/lcov-report/src/components/SearchBar/SearchOverlay.tsx.html +1 -1
  160. package/coverage/lcov-report/src/components/SearchBar/SearchSuggestions.tsx.html +1 -1
  161. package/coverage/lcov-report/src/components/SearchBar/index.html +1 -1
  162. package/coverage/lcov-report/src/components/SearchBar/index.ts.html +1 -1
  163. package/coverage/lcov-report/src/components/SearchBar/testIds.ts.html +1 -1
  164. package/coverage/lcov-report/src/components/SearchItem/SearchItem.tsx.html +1 -1
  165. package/coverage/lcov-report/src/components/SearchItem/index.html +1 -1
  166. package/coverage/lcov-report/src/components/SearchItem/index.ts.html +1 -1
  167. package/coverage/lcov-report/src/components/SearchModal/SearchModal.tsx.html +1 -1
  168. package/coverage/lcov-report/src/components/SearchModal/index.html +1 -1
  169. package/coverage/lcov-report/src/components/SearchModal/index.ts.html +1 -1
  170. package/coverage/lcov-report/src/components/SearchModal/testIds.ts.html +1 -1
  171. package/coverage/lcov-report/src/components/Time/Time.tsx.html +1 -1
  172. package/coverage/lcov-report/src/components/Time/index.html +1 -1
  173. package/coverage/lcov-report/src/components/Time/index.ts.html +1 -1
  174. package/coverage/lcov-report/src/constants/constructs.ts.html +1 -1
  175. package/coverage/lcov-report/src/constants/dates.ts.html +1 -1
  176. package/coverage/lcov-report/src/constants/index.html +1 -1
  177. package/coverage/lcov-report/src/constants/keywords.ts.html +1 -1
  178. package/coverage/lcov-report/src/constants/languages.ts.html +1 -1
  179. package/coverage/lcov-report/src/constants/links.ts.html +1 -1
  180. package/coverage/lcov-report/src/constants/pageInfo.ts.html +1 -1
  181. package/coverage/lcov-report/src/constants/url.ts.html +1 -1
  182. package/coverage/lcov-report/src/contexts/Analytics/Analytics.tsx.html +1 -1
  183. package/coverage/lcov-report/src/contexts/Analytics/index.html +1 -1
  184. package/coverage/lcov-report/src/contexts/Analytics/index.ts.html +1 -1
  185. package/coverage/lcov-report/src/contexts/Analytics/types.ts.html +1 -1
  186. package/coverage/lcov-report/src/contexts/Analytics/usePageView.ts.html +1 -1
  187. package/coverage/lcov-report/src/contexts/Analytics/util.ts.html +1 -1
  188. package/coverage/lcov-report/src/contexts/Config/Config.tsx.html +1 -1
  189. package/coverage/lcov-report/src/contexts/Config/index.html +1 -1
  190. package/coverage/lcov-report/src/contexts/Config/index.ts.html +1 -1
  191. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/ExternalLinkWarning.tsx.html +1 -1
  192. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/ExternalLinkWarningModal.tsx.html +1 -1
  193. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/constants.ts.html +1 -1
  194. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/index.html +1 -1
  195. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/index.ts.html +1 -1
  196. package/coverage/lcov-report/src/contexts/Search/Search.tsx.html +1 -1
  197. package/coverage/lcov-report/src/contexts/Search/index.html +1 -1
  198. package/coverage/lcov-report/src/contexts/Search/index.ts.html +1 -1
  199. package/coverage/lcov-report/src/contexts/Shortbread/Shortbread.tsx.html +1 -1
  200. package/coverage/lcov-report/src/contexts/Shortbread/index.html +1 -1
  201. package/coverage/lcov-report/src/contexts/Shortbread/index.ts.html +1 -1
  202. package/coverage/lcov-report/src/contexts/Theme.tsx.html +1 -1
  203. package/coverage/lcov-report/src/contexts/index.html +1 -1
  204. package/coverage/lcov-report/src/hooks/useCatalog/index.html +1 -1
  205. package/coverage/lcov-report/src/hooks/useCatalog/index.ts.html +1 -1
  206. package/coverage/lcov-report/src/hooks/useCatalog/useCatalog.ts.html +1 -1
  207. package/coverage/lcov-report/src/hooks/useCatalogResults/index.html +1 -1
  208. package/coverage/lcov-report/src/hooks/useCatalogResults/index.ts.html +1 -1
  209. package/coverage/lcov-report/src/hooks/useCatalogResults/useCatalogResults.ts.html +1 -1
  210. package/coverage/lcov-report/src/hooks/useCatalogSearch/index.html +1 -1
  211. package/coverage/lcov-report/src/hooks/useCatalogSearch/index.ts.html +1 -1
  212. package/coverage/lcov-report/src/hooks/useCatalogSearch/useCatalogSearch.ts.html +1 -1
  213. package/coverage/lcov-report/src/hooks/useConfigValue/index.html +1 -1
  214. package/coverage/lcov-report/src/hooks/useConfigValue/index.ts.html +1 -1
  215. package/coverage/lcov-report/src/hooks/useConfigValue/useConfigValue.ts.html +1 -1
  216. package/coverage/lcov-report/src/hooks/useDebounce/index.html +1 -1
  217. package/coverage/lcov-report/src/hooks/useDebounce/index.ts.html +1 -1
  218. package/coverage/lcov-report/src/hooks/useDebounce/useDebounce.ts.html +1 -1
  219. package/coverage/lcov-report/src/hooks/useHistoryState/index.html +1 -1
  220. package/coverage/lcov-report/src/hooks/useHistoryState/index.ts.html +1 -1
  221. package/coverage/lcov-report/src/hooks/useHistoryState/useHistoryState.ts.html +1 -1
  222. package/coverage/lcov-report/src/hooks/useLanguage/index.html +1 -1
  223. package/coverage/lcov-report/src/hooks/useLanguage/index.ts.html +1 -1
  224. package/coverage/lcov-report/src/hooks/useLanguage/useLanguage.ts.html +1 -1
  225. package/coverage/lcov-report/src/hooks/usePagination/index.html +1 -1
  226. package/coverage/lcov-report/src/hooks/usePagination/index.ts.html +1 -1
  227. package/coverage/lcov-report/src/hooks/usePagination/usePagination.ts.html +1 -1
  228. package/coverage/lcov-report/src/hooks/useQueryParams/index.html +1 -1
  229. package/coverage/lcov-report/src/hooks/useQueryParams/index.ts.html +1 -1
  230. package/coverage/lcov-report/src/hooks/useQueryParams/useQueryParams.ts.html +1 -1
  231. package/coverage/lcov-report/src/hooks/useSearch/index.html +1 -1
  232. package/coverage/lcov-report/src/hooks/useSearch/index.ts.html +1 -1
  233. package/coverage/lcov-report/src/hooks/useSearch/useSearch.ts.html +1 -1
  234. package/coverage/lcov-report/src/hooks/useStats/index.html +1 -1
  235. package/coverage/lcov-report/src/hooks/useStats/index.ts.html +1 -1
  236. package/coverage/lcov-report/src/hooks/useStats/useStats.ts.html +1 -1
  237. package/coverage/lcov-report/src/hooks/useVersions/index.html +1 -1
  238. package/coverage/lcov-report/src/hooks/useVersions/index.ts.html +1 -1
  239. package/coverage/lcov-report/src/hooks/useVersions/useVersions.ts.html +1 -1
  240. package/coverage/lcov-report/src/icons/AWSIcon.tsx.html +1 -1
  241. package/coverage/lcov-report/src/icons/DatadogIcon.tsx.html +1 -1
  242. package/coverage/lcov-report/src/icons/DotNetIcon.tsx.html +1 -1
  243. package/coverage/lcov-report/src/icons/DukeIcon.tsx.html +1 -1
  244. package/coverage/lcov-report/src/icons/GithubIcon.tsx.html +1 -1
  245. package/coverage/lcov-report/src/icons/GoIcon.tsx.html +1 -1
  246. package/coverage/lcov-report/src/icons/MongoDBIcon.tsx.html +1 -1
  247. package/coverage/lcov-report/src/icons/PythonIcon.tsx.html +1 -1
  248. package/coverage/lcov-report/src/icons/TSIcon.tsx.html +1 -1
  249. package/coverage/lcov-report/src/icons/index.html +1 -1
  250. package/coverage/lcov-report/src/index.html +1 -1
  251. package/coverage/lcov-report/src/index.tsx.html +1 -1
  252. package/coverage/lcov-report/src/lib/shortbread/getLocalStoreWriter.ts.html +1 -1
  253. package/coverage/lcov-report/src/lib/shortbread/index.html +1 -1
  254. package/coverage/lcov-report/src/lib/shortbread/index.ts.html +1 -1
  255. package/coverage/lcov-report/src/lib/shortbread/shortbread.ts.html +1 -1
  256. package/coverage/lcov-report/src/lib/shortbread/source.js.html +1 -1
  257. package/coverage/lcov-report/src/no-op-sw.js.html +1 -1
  258. package/coverage/lcov-report/src/register-service-worker.ts.html +1 -1
  259. package/coverage/lcov-report/src/reportWebVitals.ts.html +1 -1
  260. package/coverage/lcov-report/src/service-worker.ts.html +1 -1
  261. package/coverage/lcov-report/src/theme/components/Checkbox.ts.html +1 -1
  262. package/coverage/lcov-report/src/theme/components/Code.ts.html +1 -1
  263. package/coverage/lcov-report/src/theme/components/Divider.ts.html +1 -1
  264. package/coverage/lcov-report/src/theme/components/Radio.ts.html +1 -1
  265. package/coverage/lcov-report/src/theme/components/Tabs.ts.html +1 -1
  266. package/coverage/lcov-report/src/theme/components/Tag.ts.html +1 -1
  267. package/coverage/lcov-report/src/theme/components/index.html +1 -1
  268. package/coverage/lcov-report/src/theme/components/index.ts.html +1 -1
  269. package/coverage/lcov-report/src/theme/foundations/borders.ts.html +1 -1
  270. package/coverage/lcov-report/src/theme/foundations/colors.ts.html +1 -1
  271. package/coverage/lcov-report/src/theme/foundations/index.html +1 -1
  272. package/coverage/lcov-report/src/theme/foundations/index.ts.html +1 -1
  273. package/coverage/lcov-report/src/theme/foundations/radius.ts.html +1 -1
  274. package/coverage/lcov-report/src/theme/foundations/shadows.ts.html +1 -1
  275. package/coverage/lcov-report/src/theme/foundations/sizes.ts.html +1 -1
  276. package/coverage/lcov-report/src/theme/index.html +1 -1
  277. package/coverage/lcov-report/src/theme/index.ts.html +1 -1
  278. package/coverage/lcov-report/src/types/config.ts.html +1 -1
  279. package/coverage/lcov-report/src/types/index.html +1 -1
  280. package/coverage/lcov-report/src/util/createTestIds.ts.html +1 -1
  281. package/coverage/lcov-report/src/util/css.ts.html +1 -1
  282. package/coverage/lcov-report/src/util/index.html +1 -1
  283. package/coverage/lcov-report/src/util/package.ts.html +1 -1
  284. package/coverage/lcov-report/src/util/sanitize-anchor.ts.html +1 -1
  285. package/coverage/lcov-report/src/util/url.ts.html +1 -1
  286. package/coverage/lcov-report/src/views/Contribute/Contribute.tsx.html +1 -1
  287. package/coverage/lcov-report/src/views/Contribute/index.html +1 -1
  288. package/coverage/lcov-report/src/views/Contribute/index.ts.html +1 -1
  289. package/coverage/lcov-report/src/views/FAQ/FAQ.tsx.html +1 -1
  290. package/coverage/lcov-report/src/views/FAQ/index.html +1 -1
  291. package/coverage/lcov-report/src/views/FAQ/index.ts.html +1 -1
  292. package/coverage/lcov-report/src/views/Home/CDKTypeTabs.tsx.html +1 -1
  293. package/coverage/lcov-report/src/views/Home/Categories.tsx.html +1 -1
  294. package/coverage/lcov-report/src/views/Home/Featured.tsx.html +1 -1
  295. package/coverage/lcov-report/src/views/Home/GradientContainer.tsx.html +1 -1
  296. package/coverage/lcov-report/src/views/Home/Hero.tsx.html +1 -1
  297. package/coverage/lcov-report/src/views/Home/Home.tsx.html +1 -1
  298. package/coverage/lcov-report/src/views/Home/Info.tsx.html +1 -1
  299. package/coverage/lcov-report/src/views/Home/InfoSection.tsx.html +1 -1
  300. package/coverage/lcov-report/src/views/Home/PackageGrid.tsx.html +1 -1
  301. package/coverage/lcov-report/src/views/Home/constants.ts.html +1 -1
  302. package/coverage/lcov-report/src/views/Home/index.html +1 -1
  303. package/coverage/lcov-report/src/views/Home/index.ts.html +1 -1
  304. package/coverage/lcov-report/src/views/Home/testIds.ts.html +1 -1
  305. package/coverage/lcov-report/src/views/Home/useSection.ts.html +1 -1
  306. package/coverage/lcov-report/src/views/NotFound/NotFound.tsx.html +1 -1
  307. package/coverage/lcov-report/src/views/NotFound/index.html +1 -1
  308. package/coverage/lcov-report/src/views/NotFound/index.ts.html +1 -1
  309. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/ChooseSubmodule.tsx.html +1 -1
  310. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/SearchInput.tsx.html +1 -1
  311. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/SearchModal.tsx.html +1 -1
  312. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/index.html +1 -1
  313. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/index.ts.html +1 -1
  314. package/coverage/lcov-report/src/views/Package/DependenciesList.tsx.html +1 -1
  315. package/coverage/lcov-report/src/views/Package/DocsError.tsx.html +1 -1
  316. package/coverage/lcov-report/src/views/Package/FeedbackLinks.tsx.html +1 -1
  317. package/coverage/lcov-report/src/views/Package/LanguageBar.tsx.html +1 -1
  318. package/coverage/lcov-report/src/views/Package/LanguageSelection.tsx.html +1 -1
  319. package/coverage/lcov-report/src/views/Package/NavDrawer.tsx.html +1 -1
  320. package/coverage/lcov-report/src/views/Package/Package.tsx.html +1 -1
  321. package/coverage/lcov-report/src/views/Package/PackageDocs.tsx.html +1 -1
  322. package/coverage/lcov-report/src/views/Package/PackageDocsError.tsx.html +1 -1
  323. package/coverage/lcov-report/src/views/Package/PackageDocsUnsupported.tsx.html +1 -1
  324. package/coverage/lcov-report/src/views/Package/PackageHeader/Details.tsx.html +1 -1
  325. package/coverage/lcov-report/src/views/Package/PackageHeader/HeaderContainer.tsx.html +1 -1
  326. package/coverage/lcov-report/src/views/Package/PackageHeader/Heading.tsx.html +1 -1
  327. package/coverage/lcov-report/src/views/Package/PackageHeader/Install.tsx.html +1 -1
  328. package/coverage/lcov-report/src/views/Package/PackageHeader/PackageHeader.tsx.html +1 -1
  329. package/coverage/lcov-report/src/views/Package/PackageHeader/SelectVersion.tsx.html +1 -1
  330. package/coverage/lcov-report/src/views/Package/PackageHeader/ToggleButton.tsx.html +1 -1
  331. package/coverage/lcov-report/src/views/Package/PackageHeader/index.html +1 -1
  332. package/coverage/lcov-report/src/views/Package/PackageHeader/index.ts.html +1 -1
  333. package/coverage/lcov-report/src/views/Package/PackageLayout.tsx.html +1 -1
  334. package/coverage/lcov-report/src/views/Package/PackageReadme.tsx.html +1 -1
  335. package/coverage/lcov-report/src/views/Package/PackageState.tsx.html +1 -1
  336. package/coverage/lcov-report/src/views/Package/PackageTypeDocs.tsx.html +1 -1
  337. package/coverage/lcov-report/src/views/Package/PrimaryDocNavigation.tsx.html +1 -1
  338. package/coverage/lcov-report/src/views/Package/SecondaryDocNavigation.tsx.html +1 -1
  339. package/coverage/lcov-report/src/views/Package/ShareInfo.tsx.html +1 -1
  340. package/coverage/lcov-report/src/views/Package/StickyNavContainer.tsx.html +1 -1
  341. package/coverage/lcov-report/src/views/Package/constants.ts.html +1 -1
  342. package/coverage/lcov-report/src/views/Package/index.html +1 -1
  343. package/coverage/lcov-report/src/views/Package/index.ts.html +1 -1
  344. package/coverage/lcov-report/src/views/Package/testIds.ts.html +1 -1
  345. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/index.html +1 -1
  346. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/index.ts.html +1 -1
  347. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/useIntersectingHeader.ts.html +1 -1
  348. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/util.ts.html +1 -1
  349. package/coverage/lcov-report/src/views/Package/useSectionItems/index.html +1 -1
  350. package/coverage/lcov-report/src/views/Package/useSectionItems/index.ts.html +1 -1
  351. package/coverage/lcov-report/src/views/Package/useSectionItems/useSectionItems.ts.html +1 -1
  352. package/coverage/lcov-report/src/views/Package/useSectionItems/util.ts.html +1 -1
  353. package/coverage/lcov-report/src/views/Package/util.ts.html +1 -1
  354. package/coverage/lcov-report/src/views/PackageLatest/PackageLatest.tsx.html +1 -1
  355. package/coverage/lcov-report/src/views/PackageLatest/index.html +1 -1
  356. package/coverage/lcov-report/src/views/PackageLatest/index.ts.html +1 -1
  357. package/coverage/lcov-report/src/views/Packages/Packages.tsx.html +1 -1
  358. package/coverage/lcov-report/src/views/Packages/index.html +1 -1
  359. package/coverage/lcov-report/src/views/Packages/index.ts.html +1 -1
  360. package/coverage/lcov-report/src/views/Random/Random.tsx.html +1 -1
  361. package/coverage/lcov-report/src/views/Random/index.html +1 -1
  362. package/coverage/lcov-report/src/views/Random/index.ts.html +1 -1
  363. package/coverage/lcov-report/src/views/Search/ArrowButton.tsx.html +1 -1
  364. package/coverage/lcov-report/src/views/Search/CDKFilter.tsx.html +1 -1
  365. package/coverage/lcov-report/src/views/Search/CheckboxFilter.tsx.html +1 -1
  366. package/coverage/lcov-report/src/views/Search/FilterHeading.tsx.html +1 -1
  367. package/coverage/lcov-report/src/views/Search/FilterPanel.tsx.html +1 -1
  368. package/coverage/lcov-report/src/views/Search/GoToPage.tsx.html +1 -1
  369. package/coverage/lcov-report/src/views/Search/KeywordsFilter.tsx.html +1 -1
  370. package/coverage/lcov-report/src/views/Search/LanguageFilter.tsx.html +1 -1
  371. package/coverage/lcov-report/src/views/Search/PageControls.tsx.html +1 -1
  372. package/coverage/lcov-report/src/views/Search/RadioFilter.tsx.html +1 -1
  373. package/coverage/lcov-report/src/views/Search/Search.tsx.html +1 -1
  374. package/coverage/lcov-report/src/views/Search/SearchBar.tsx.html +1 -1
  375. package/coverage/lcov-report/src/views/Search/SearchDetails.tsx.html +1 -1
  376. package/coverage/lcov-report/src/views/Search/SearchResults.tsx.html +1 -1
  377. package/coverage/lcov-report/src/views/Search/SortAndFilterDrawer.tsx.html +1 -1
  378. package/coverage/lcov-report/src/views/Search/SortFilter.tsx.html +1 -1
  379. package/coverage/lcov-report/src/views/Search/SortedBy.tsx.html +1 -1
  380. package/coverage/lcov-report/src/views/Search/TagFilter.tsx.html +1 -1
  381. package/coverage/lcov-report/src/views/Search/constants.ts.html +1 -1
  382. package/coverage/lcov-report/src/views/Search/index.html +1 -1
  383. package/coverage/lcov-report/src/views/Search/index.ts.html +1 -1
  384. package/coverage/lcov-report/src/views/Search/testIds.ts.html +1 -1
  385. package/coverage/lcov-report/src/views/Search/useSearchParam.ts.html +1 -1
  386. package/coverage/lcov-report/src/views/Search/useUpdateSearchParam.ts.html +1 -1
  387. package/coverage/lcov-report/src/views/Search/util.ts.html +1 -1
  388. package/coverage/lcov-report/src/views/SiteTerms/SiteTerms.tsx.html +1 -1
  389. package/coverage/lcov-report/src/views/SiteTerms/index.html +1 -1
  390. package/coverage/lcov-report/src/views/SiteTerms/index.ts.html +1 -1
  391. package/package.json +7 -7
  392. package/build/static/js/487.043142d5.chunk.js +0 -3
  393. package/build/static/js/487.043142d5.chunk.js.map +0 -1
  394. package/build/static/js/main.177d8f14.js +0 -3
  395. package/build/static/js/main.177d8f14.js.map +0 -1
  396. /package/build/static/js/{487.043142d5.chunk.js.LICENSE.txt → 487.e1807da5.chunk.js.LICENSE.txt} +0 -0
  397. /package/build/static/js/{main.177d8f14.js.LICENSE.txt → main.6eca6827.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"static/js/773.279948f6.chunk.js","mappings":"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","sources":["views/Search/constants.ts","views/Search/FilterHeading.tsx","views/Search/testIds.ts","views/Search/RadioFilter.tsx","views/Search/util.ts","views/Search/useSearchParam.ts","views/Search/useUpdateSearchParam.ts","views/Search/CDKFilter.tsx","views/Search/CheckboxFilter.tsx","views/Search/KeywordsFilter.tsx","views/Search/LanguageFilter.tsx","views/Search/TagFilter.tsx","views/Search/FilterPanel.tsx","views/Search/ArrowButton.tsx","views/Search/GoToPage.tsx","views/Search/PageControls.tsx","views/Search/SearchBar.tsx","views/Search/SearchDetails.tsx","views/Search/SortFilter.tsx","views/Search/SortAndFilterDrawer.tsx","views/Search/SortedBy.tsx","components/PackageList/WideCardList.tsx","components/PackageList/PackageList.tsx","views/Search/SearchResults.tsx","views/Search/Search.tsx"],"sourcesContent":["import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport type { QueryParamKey } from \"../../constants/url\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nconst LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n\nexport const SORT_RENDER_MAP = {\n [CatalogSearchSort.NameAsc]: \"A-Z\",\n [CatalogSearchSort.NameDesc]: \"Z-A\",\n [CatalogSearchSort.PublishDateAsc]: \"Oldest\",\n [CatalogSearchSort.PublishDateDesc]: \"Recently updated\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n\nconst searchEvent: typeof eventName = (...e) => eventName(\"Search\", ...e);\n\nexport const SEARCH_ANALYTICS = {\n FILTERS: searchEvent(\"Filters\"),\n RESULTS: searchEvent(\"Results\"),\n SEARCH: searchEvent(\"Search\"),\n SORT: searchEvent(\"Sort\"),\n};\n","import { QuestionIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Heading,\n Text,\n Popover,\n PopoverTrigger,\n PopoverBody,\n PopoverArrow,\n PopoverContent,\n useBreakpointValue,\n PlacementWithLogical,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface FilterHeadingProps {\n name: string;\n hint?: string;\n}\n\nexport const FilterHeading: FunctionComponent<FilterHeadingProps> = ({\n name,\n hint,\n}) => {\n const placement = useBreakpointValue<PlacementWithLogical>({\n base: \"auto\",\n md: \"right\",\n });\n\n return (\n <Flex align=\"center\" mb={1}>\n <Heading as=\"h3\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement={placement} strategy=\"fixed\">\n <PopoverTrigger>\n <Flex\n aria-label={`Hint: ${name}`}\n as=\"button\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Popover\")}\n ml={2}\n >\n <QuestionIcon h={3.5} w={3.5} />\n </Flex>\n </PopoverTrigger>\n <PopoverContent\n bg=\"gray.700\"\n borderRadius=\"base\"\n color=\"white\"\n fontSize=\"sm\"\n mx={{ base: \"1rem\", md: \"initial\" }}\n shadow=\"whiteAlpha.300\"\n >\n <PopoverArrow bg=\"gray.700\" />\n <PopoverBody>\n <Text>{hint}</Text>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n ) : null}\n </Flex>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nexport default createTestIds(\"searchRedesign\", [\n \"page\",\n // Results\n \"searchDetails\",\n \"nextPage\",\n \"prevPage\",\n \"goToPage\",\n // Sorting\n \"sortButton\",\n \"sortDropdown\",\n \"sortItem\",\n // Filters Panel\n \"filtersPanel\",\n \"cdkTypeFilter\",\n \"cdkVersionFilter\",\n \"filterItem\",\n \"languagesFilter\",\n] as const);\n","import { Radio, RadioGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface RadioFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n value?: string;\n onValueChange: (value: string) => void;\n options: {\n display: string;\n value: string;\n }[];\n}\n\nexport const RadioFilter: FunctionComponent<RadioFilterProps> = ({\n \"data-testid\": dataTestid,\n value: checkedValue,\n onValueChange,\n options,\n name,\n hint,\n}) => {\n return (\n <Stack data-testid={dataTestid} spacing={1}>\n <FilterHeading hint={hint} name={name} />\n <RadioGroup onChange={onValueChange} value={checkedValue}>\n <Stack spacing={1}>\n {options.map(({ display, value }) => {\n const dataEvent = eventName(\n SEARCH_ANALYTICS.FILTERS,\n name,\n \"Filter\",\n display\n );\n return (\n <Radio data-event={dataEvent} key={value} value={value}>\n <Text\n color=\"textTertiary\"\n data-event={dataEvent}\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n );\n })}\n </Stack>\n </RadioGroup>\n </Stack>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\n\nexport const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseQueryArray = <T extends string>(\n queryString: string | null\n) => {\n if (!queryString) return [];\n\n return decodeURIComponent(queryString).split(\",\") as T[];\n};\n\nconst getParamFromUrl = (key: string) => {\n if (typeof window === \"undefined\") return null;\n const queryParams = new URL(window.location.href).searchParams;\n return queryParams.get(key);\n};\n\nexport const getSearchUrlParams = () => {\n return {\n query: getParamFromUrl(QUERY_PARAMS.SEARCH_QUERY) ?? \"\",\n keywords: parseQueryArray(getParamFromUrl(QUERY_PARAMS.KEYWORDS)),\n cdkType: (getParamFromUrl(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined,\n cdkMajor: (() => {\n const cdkMajorParam = getParamFromUrl(QUERY_PARAMS.CDK_MAJOR);\n return cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n })(),\n languages: parseQueryArray(\n getParamFromUrl(QUERY_PARAMS.LANGUAGES)\n ) as Language[],\n offset: toNum(getParamFromUrl(QUERY_PARAMS.OFFSET) ?? \"\"),\n sort:\n (getParamFromUrl(QUERY_PARAMS.SORT) as CatalogSearchSort) ?? undefined,\n tags: parseQueryArray(getParamFromUrl(QUERY_PARAMS.TAGS)),\n };\n};\n","import { useMemo } from \"react\";\nimport { parseQueryArray, toNum } from \"./util\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\nconst useSearchParam = <T = string | null>(\n key: string,\n transform?: (param: string | null) => T\n): T => {\n const queryParams = useQueryParams();\n const qp = queryParams.get(key);\n\n return useMemo(\n () => (transform ? transform(qp) : (qp as unknown as T)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [qp]\n );\n};\n\nexport const useCdkType = () => {\n const cdkType: CDKType | undefined =\n useSearchParam(QUERY_PARAMS.CDK_TYPE) ?? undefined;\n\n return cdkType;\n};\n\nexport const useCdkMajor = () => {\n const cdkMajor: number | undefined = useSearchParam(\n QUERY_PARAMS.CDK_MAJOR,\n (p) => (p ? toNum(p) : undefined)\n );\n\n return cdkMajor;\n};\n\nexport const useKeywords = () => {\n const keywords: string[] = useSearchParam(\n QUERY_PARAMS.KEYWORDS,\n parseQueryArray\n );\n\n return keywords;\n};\n\nexport const useLanguages = () => {\n const languages: Language[] = useSearchParam(\n QUERY_PARAMS.LANGUAGES,\n parseQueryArray\n ) as Language[];\n\n return languages;\n};\n\nexport const useOffset = () => {\n const offset = useSearchParam(QUERY_PARAMS.OFFSET, (o) => toNum(o ?? \"\"));\n return offset;\n};\n\nexport const useSearchQuery = () => {\n const query: string = useSearchParam(QUERY_PARAMS.SEARCH_QUERY) ?? \"\";\n return query;\n};\n\nexport const useSort = () => {\n const sort: CatalogSearchSort | undefined =\n useSearchParam(QUERY_PARAMS.SORT) ?? undefined;\n return sort;\n};\n\nexport const useTags = () => {\n const tags: string[] = useSearchParam(QUERY_PARAMS.TAGS, parseQueryArray);\n return tags;\n};\n","import { useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { getSearchUrlParams } from \"./util\";\nimport { getSearchPath } from \"../../util/url\";\n\nexport const useUpdateSearchParam = () => {\n const { push } = useHistory();\n\n return useCallback(\n (p?: Partial<Parameters<typeof getSearchPath>[0]>) => {\n const { offset, ...params } = p ?? {};\n\n push(\n getSearchPath({\n ...getSearchUrlParams(),\n ...params,\n offset: offset ?? 0,\n })\n );\n },\n [push]\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport testIds from \"./testIds\";\nimport { useCdkMajor, useCdkType } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogConstructFrameworkMeta } from \"../../api/catalog-search\";\nimport { CDKType, CDKTYPE_NAME_MAP } from \"../../constants/constructs\";\nimport { useSearchContext } from \"../../contexts/Search\";\n\ntype CDKOptions = Partial<{\n [key in CDKType]: CatalogConstructFrameworkMeta & {\n display: string;\n value: key;\n };\n}>;\n\nexport const CDKFilter: FunctionComponent = () => {\n const cdkType = useCdkType();\n const cdkMajor = useCdkMajor();\n\n const updateSearch = useUpdateSearchParam();\n\n const searchAPI = useSearchContext()!;\n\n // Options with less than one package will be omitted\n const cdkOptions = useMemo(() => {\n const cdkTypes = searchAPI.constructFrameworks;\n const options = Object.entries(cdkTypes).reduce((opts, [name, meta]) => {\n if (meta.pkgCount < 1) {\n return opts;\n }\n\n return {\n ...opts,\n [name]: {\n display: CDKTYPE_NAME_MAP[name as CDKType],\n value: name,\n ...meta,\n },\n };\n }, {});\n\n return Object.keys(options).length ? (options as CDKOptions) : undefined;\n }, [searchAPI]);\n\n const majorsOptions = useMemo(() => {\n if (!cdkOptions || !cdkType) return undefined;\n const majorVersions = cdkOptions[cdkType]?.majorVersions;\n\n if (!majorVersions) return undefined;\n\n return [...majorVersions]\n .sort((a, b) => a - b)\n .map((value) => ({\n value: value.toString(),\n display: `${CDKTYPE_NAME_MAP[cdkType]} v${value}`,\n }));\n }, [cdkOptions, cdkType]);\n\n if (!cdkOptions) {\n return null;\n }\n\n const onCdkTypeChange = (type: string) => {\n const cdk = type as CDKType;\n updateSearch({ cdkType: type ? cdk : undefined, cdkMajor: undefined });\n };\n\n const onCdkMajorChange = (major: string) => {\n let majorNum: number | undefined = undefined;\n\n if (major) {\n majorNum = parseInt(major, 10);\n }\n\n updateSearch({ cdkMajor: majorNum });\n };\n\n return (\n <>\n <RadioFilter\n data-testid={testIds.cdkTypeFilter}\n hint=\"Choose the right CDK for your IaC technology: AWS CDK for AWS CloudFormation, CDKTF for Terraform, or CDK8s for Kubernetes.\"\n name=\"CDK Type\"\n onValueChange={onCdkTypeChange}\n options={[\n { display: \"Any CDK Type\", value: \"\" },\n ...Object.values(cdkOptions),\n ]}\n value={cdkType ?? \"\"}\n />\n {/* No point in showing major versions if only a single one is available */}\n {!!(majorsOptions && majorsOptions.length > 1) && (\n <RadioFilter\n data-testid={testIds.cdkVersionFilter}\n hint=\"Choose the major version of the CDK you're using to see only constructs that will work with that version.\"\n name=\"CDK Major Version\"\n onValueChange={onCdkMajorChange}\n options={[\n { display: \"Any Major Version\", value: \"\" },\n ...majorsOptions,\n ]}\n value={cdkMajor?.toString() ?? \"\"}\n />\n )}\n </>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Button,\n Collapse,\n Checkbox,\n Stack,\n Text,\n Tooltip,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\nimport { clickEvent, eventName, useAnalytics } from \"../../contexts/Analytics\";\n\ninterface CheckboxOption {\n display: string;\n value: string;\n isDisabled?: boolean;\n disabledHint?: string;\n}\n\ninterface CheckboxItemProps extends CheckboxOption {\n onChange: () => void;\n isChecked: boolean;\n}\n\nexport interface CheckboxFilterProps extends FilterHeadingProps {\n /**\n * Test ID to select checkbox in tests\n */\n \"data-testid\"?: string;\n /**\n * Number of items that can be initially shown\n */\n initialItemCount?: number;\n /**\n * Defines checkbox items\n */\n options: CheckboxOption[];\n /**\n * Selected values\n */\n values: string[];\n /**\n * Callback triggered when an item is clicked\n */\n onValueChange: (value: string) => void;\n}\n\nconst CheckboxItem: FunctionComponent<CheckboxItemProps> = ({\n display,\n value,\n isDisabled,\n disabledHint,\n isChecked,\n onChange,\n}) => (\n <Checkbox\n isChecked={isChecked}\n isDisabled={isDisabled}\n key={value}\n onChange={onChange}\n >\n <Tooltip\n hasArrow\n isDisabled={!isDisabled && !disabledHint}\n label={disabledHint}\n placement=\"right\"\n >\n <Text\n color=\"textTertiary\"\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Tooltip>\n </Checkbox>\n);\n\nexport const CheckboxFilter: FunctionComponent<CheckboxFilterProps> = ({\n \"data-testid\": dataTestid,\n initialItemCount,\n hint,\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const collapse = useDisclosure();\n const { trackCustomEvent } = useAnalytics();\n\n const getOnChange = (item: CheckboxOption) => () => {\n trackCustomEvent(\n clickEvent({\n name: eventName(SEARCH_ANALYTICS.FILTERS, name, \"Filter\", item.display),\n })\n );\n onValueChange(item.value);\n };\n\n let alwaysShow: typeof options = options;\n let showWhenExpanded: typeof options = [];\n\n if (initialItemCount) {\n alwaysShow = options.slice(0, initialItemCount);\n showWhenExpanded = options.slice(initialItemCount, options.length);\n }\n\n const isExpandible = showWhenExpanded.length > 0;\n\n return (\n <Flex data-testid={dataTestid} direction=\"column\">\n <FilterHeading hint={hint} name={name} />\n <Stack mt={1} spacing={1}>\n {alwaysShow.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n {isExpandible && (\n <Collapse animateOpacity in={collapse.isOpen} unmountOnExit>\n <Stack spacing={1}>\n {showWhenExpanded.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n </Stack>\n </Collapse>\n )}\n </Stack>\n {isExpandible && (\n <Flex align=\"start\" mt={1}>\n <Button\n color=\"textTertiary\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Show More\")}\n fontWeight=\"normal\"\n leftIcon={collapse.isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n onClick={collapse.onToggle}\n size=\"sm\"\n textAlign=\"left\"\n variant=\"link\"\n w=\"auto\"\n >\n {collapse.isOpen\n ? `Show fewer options (${alwaysShow.length})`\n : `Show more options (${showWhenExpanded.length})`}\n </Button>\n </Flex>\n )}\n </Flex>\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport testIds from \"./testIds\";\nimport { useKeywords } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { useSearchContext } from \"../../contexts/Search\";\n\nexport const KeywordsFilter: FunctionComponent = () => {\n const keywords = useKeywords();\n const keywordMap = useSearchContext()!.keywords;\n const updateSearch = useUpdateSearchParam();\n\n const onKeywordChange = (keyword: string) => {\n updateSearch({\n keywords: keywords.includes(keyword)\n ? keywords.filter((k) => k !== keyword)\n : [...keywords, keyword],\n });\n };\n\n const keywordOptions = useMemo(() => {\n const baseOptions = [...keywordMap.entries()]\n .sort(([, count1], [, count2]) => {\n return count1 < count2 ? 1 : -1;\n })\n .filter(([keyword]) => !keywords.includes(keyword))\n .map(([keyword]) => ({\n display: keyword,\n value: keyword,\n }))\n .slice(0, 25);\n\n const keywordsNotInOptions = keywords.filter(\n (k) => !baseOptions.some((opt) => opt.value === k)\n );\n\n return [\n ...keywordsNotInOptions.map((k) => ({ display: k, value: k })),\n ...baseOptions,\n ];\n }, [keywordMap, keywords]);\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Focus the results by choosing one or more keywords reflecting the kind of construct you're looking for. Keywords are provided by construct authors.\"\n initialItemCount={5}\n name=\"Keywords\"\n onValueChange={onKeywordChange}\n options={keywordOptions}\n values={keywords}\n />\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport testIds from \"./testIds\";\nimport { useLanguages } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nconst languageOptions = Object.entries(LANGUAGE_NAME_MAP)\n .map(([key, value]) => ({\n display: value,\n value: key,\n ...(TEMP_SUPPORTED_LANGUAGES.has(key as Language)\n ? { isDisabled: false }\n : {\n isDisabled: true,\n disabledHint: `${\n LANGUAGE_NAME_MAP[key as Language]\n } support is coming soon!`,\n }),\n }))\n .sort((l1, l2) => {\n // Push disabled languages to back of list\n return l1.isDisabled > l2.isDisabled ? 1 : -1;\n });\n\nexport const LanguageFilter: FunctionComponent = () => {\n const languages = useLanguages();\n\n const updateSearch = useUpdateSearchParam();\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n updateSearch({\n languages: languages.includes(language)\n ? languages.filter((l) => l !== language)\n : [...languages, language],\n });\n };\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Choose one or more languages. Results include constructs for use with at least one of the selected languages.\"\n name=\"Programming Language\"\n onValueChange={onLanguagesChange}\n options={languageOptions}\n values={languages}\n />\n );\n};\n","import { FunctionComponent, useCallback, useMemo } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useTags } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { PackageTagConfig, TagGroupConfig } from \"../../api/config\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\n\ninterface FilterGroup extends Partial<TagGroupConfig> {\n id: string;\n tags: PackageTagConfig[];\n}\ninterface FilterGroups {\n [group: string]: FilterGroup;\n}\n\n/**\n * Creates a plain object map of FilterGroups keyed by group id\n */\nexport const mapTagsToFilterGroups = (\n packageTags: PackageTagConfig[],\n tagGroupsMap: Map<string, TagGroupConfig>\n): FilterGroups => {\n return packageTags.reduce(\n (accum: FilterGroups, tag: PackageTagConfig): FilterGroups => {\n const groupIdOrName = tag.searchFilter?.groupBy;\n const customGroup = groupIdOrName\n ? tagGroupsMap.get(groupIdOrName)\n : undefined;\n\n if (groupIdOrName && customGroup) {\n const entry = accum[groupIdOrName];\n if (entry) {\n entry.tags = [...entry.tags, tag];\n return accum;\n }\n\n return {\n ...accum,\n [groupIdOrName]: {\n ...customGroup,\n tags: [tag],\n },\n };\n }\n\n if (groupIdOrName) {\n return {\n ...accum,\n [groupIdOrName]: {\n id: groupIdOrName,\n tags: [...(accum?.[groupIdOrName]?.tags ?? []), tag],\n },\n };\n }\n return accum;\n },\n {}\n );\n};\n\nexport const TagFilter: FunctionComponent = () => {\n const packageTags = useConfigValue(\"packageTags\");\n const packageTagGroups = useConfigValue(\"packageTagGroups\");\n\n const tagFilterGroups: FilterGroups = useMemo(() => {\n const tagGroupsMap = new Map<string, TagGroupConfig>();\n packageTagGroups?.forEach((group) => {\n tagGroupsMap.set(group.id, group);\n });\n\n const filterableTags =\n packageTags?.filter((tag) => Boolean(tag.searchFilter)) ?? [];\n\n return mapTagsToFilterGroups(filterableTags, tagGroupsMap);\n }, [packageTags, packageTagGroups]);\n\n const tags = useTags();\n const updateSearch = useUpdateSearchParam();\n\n const onTagsChange = (tag: string) => {\n updateSearch({\n tags: tags.includes(tag) ? tags.filter((t) => t !== tag) : [...tags, tag],\n });\n };\n\n const getOnRadioTagChange = useCallback(\n (groupName: string) => {\n const groupTags = new Set(\n (tagFilterGroups[groupName]?.tags ?? []).map(({ id }) => id)\n );\n\n return (tag: string) => {\n const filteredTags = tags.filter((t) => !groupTags.has(t));\n\n updateSearch({\n tags: tag ? [...filteredTags, tag] : filteredTags,\n });\n };\n },\n [tagFilterGroups, tags, updateSearch]\n );\n\n return (\n <>\n {Object.values(tagFilterGroups).map(\n ({ filterType, id, label, tooltip, tags: tagItems }) => {\n const sharedProps = {\n hint: tooltip,\n name: label ?? id,\n options: tagItems.map((tag) => {\n return {\n display: tag.searchFilter!.display,\n value: tag.id,\n };\n }),\n };\n\n if (filterType === \"radio\") {\n return (\n <RadioFilter\n {...sharedProps}\n key={id}\n onValueChange={getOnRadioTagChange(id)}\n options={[\n { display: `Any ${sharedProps.name}`, value: \"\" },\n ...sharedProps.options,\n ]}\n value={tagItems.find((t) => tags.includes(t.id))?.id ?? \"\"}\n />\n );\n }\n\n return (\n <CheckboxFilter\n {...sharedProps}\n key={id}\n onValueChange={onTagsChange}\n values={tags}\n />\n );\n }\n )}\n </>\n );\n};\n","import { Heading, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { TagFilter } from \"./TagFilter\";\nimport testIds from \"./testIds\";\nimport { Card } from \"../../components/Card\";\n\nexport interface FilterPanelProps {}\n\n// Header height + section padding\nconst TOP_OFFSET = \"5.75rem\";\n\n/**\n * The desktop Resolution Filter Panel\n */\nexport const FilterPanel: FunctionComponent<FilterPanelProps> = () => {\n return (\n <Card\n borderRadius=\"sm\"\n data-testid={testIds.filtersPanel}\n display={{ base: \"none\", md: \"flex\" }}\n maxH={`calc(100vh - ${TOP_OFFSET} - 1.25rem)`}\n maxW=\"23rem\"\n minW=\"100%\"\n overflow=\"hidden auto\"\n p={4}\n pos=\"sticky\"\n top={TOP_OFFSET}\n zIndex=\"docked\"\n >\n <Stack color=\"textPrimary\" h=\"max-content\" spacing={4} top={4}>\n <Heading as=\"h2\" size=\"sm\">\n Filters\n </Heading>\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </Card>\n );\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface ArrowButtonProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n label: string;\n onClick?: () => void;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: Icon,\n label,\n onClick,\n}) => {\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n return <IconButton {...props} disabled={!onClick} onClick={onClick} />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { clickEvent, useAnalytics } from \"../../contexts/Analytics\";\n\nexport interface GoToPageProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n pageLimit,\n offset,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const { trackCustomEvent } = useAnalytics();\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n updateSearch({ offset: parseInt(inputValue) - 1 });\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n aria-label=\"Jump to page\"\n colorScheme=\"brand\"\n data-testid={dataTestid}\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n onFocus={() => {\n if (dataEvent) {\n trackCustomEvent(clickEvent({ name: dataEvent }));\n }\n }}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { GoToPage } from \"./GoToPage\";\nimport testIds from \"./testIds\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const goForward =\n offset < pageLimit ? () => updateSearch({ offset: offset + 1 }) : undefined;\n const goBack =\n offset > 0 ? () => updateSearch({ offset: offset - 1 }) : undefined;\n\n return (\n <Stack\n align=\"center\"\n direction=\"row\"\n justify=\"space-between\"\n maxW=\"18rem\"\n mx=\"auto\"\n spacing={4}\n w=\"full\"\n >\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Previous Page\")}\n data-testid={testIds.prevPage}\n icon={ChevronLeftIcon}\n label=\"Previous page button\"\n onClick={goBack}\n />\n <GoToPage\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Go to Page\")}\n data-testid={testIds.goToPage}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Next Page\")}\n data-testid={testIds.nextPage}\n icon={ChevronRightIcon}\n label=\"Next page button\"\n onClick={goForward}\n />\n </Stack>\n );\n};\n","import { FunctionComponent, useState } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { useSearchQuery } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { SearchBar as SearchBarComponent } from \"../../components/SearchBar\";\n\nexport const SearchBar: FunctionComponent = () => {\n const query = useSearchQuery();\n const updateSearch = useUpdateSearchParam();\n\n const [value, setValue] = useState(query ?? \"\");\n\n return (\n <SearchBarComponent\n bg=\"bgSecondary\"\n data-event={SEARCH_ANALYTICS.SEARCH}\n onChange={(e) => setValue(e.target.value)}\n onSubmit={(e) => {\n e.preventDefault();\n\n updateSearch({\n query: value,\n sort: undefined,\n });\n }}\n value={value}\n />\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport interface SearchDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n query?: string;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"strong\" color=\"textSecondary\">\n {children}\n </Text>\n);\n\nconst Count: FunctionComponent<{\n first: number;\n count: number;\n last: number;\n}> = ({ first, count, last }) => {\n if (!first && last >= count) {\n return (\n <>\n <Em>{count}</Em> of <Em>{count}</Em>\n </>\n );\n }\n\n return (\n <>\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em>\n </>\n );\n};\n\nexport const SearchDetails: FunctionComponent<SearchDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n query,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n const hasResults = count > 0;\n\n return (\n <Text data-testid={testIds.searchDetails}>\n {hasResults ? (\n <>\n Displaying <Count count={count} first={first} last={last} />{\" \"}\n {filtered ? \"search results\" : \"constructs\"}\n </>\n ) : (\n <>{filtered ? \"There were no search results\" : \"No constructs found\"}</>\n )}\n {query && (\n <>\n {\" for \"}\n <Em>{query}</Em>\n </>\n )}\n .{!hasResults && filtered && <> Try a different term.</>}\n </Text>\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\n\nexport const SortFilter: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const onSortChange = (newSort: string) => {\n updateSearch({\n sort: newSort ? (newSort as CatalogSearchSort) : undefined,\n });\n };\n\n return (\n <RadioFilter\n hint=\"Sets the order of search results\"\n name=\"Sorted By\"\n onValueChange={onSortChange}\n options={[\n { display: \"Relevance\", value: \"\" },\n ...Object.entries(SORT_RENDER_MAP).map(([value, display]) => ({\n display,\n value,\n })),\n ]}\n value={sort ?? \"\"}\n />\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Drawer,\n Stack,\n DrawerBody,\n DrawerHeader,\n DrawerOverlay,\n DrawerContent,\n DrawerCloseButton,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { SortFilter } from \"./SortFilter\";\nimport { TagFilter } from \"./TagFilter\";\n\n/**\n * The mobile filter Drawer (Bottomsheet in iOS terminology)\n */\nexport const SortAndFilterDrawer: FunctionComponent = () => {\n const drawer = useDisclosure();\n return (\n <>\n <Button\n colorScheme=\"brand\"\n display={{ md: \"none\" }}\n onClick={drawer.onOpen}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n Sorting and Filters\n </Button>\n <Drawer {...drawer} placement=\"bottom\">\n <DrawerOverlay />\n\n <DrawerContent color=\"textPrimary\" maxH=\"full\">\n <DrawerHeader borderBottom=\"base\">Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"textPrimary\" pb={4} spacing={4}>\n <SortFilter />\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Text,\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n Button,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS, SORT_RENDER_MAP } from \"./constants\";\nimport testIds from \"./testIds\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport const SortedBy: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const selected = sort ? SORT_RENDER_MAP[sort] : \"Relevance\";\n\n return (\n <Flex align=\"center\">\n <Text>Sorted by</Text>\n <Menu>\n <MenuButton\n as={Button}\n color=\"link\"\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Menu\")}\n data-testid={testIds.sortButton}\n ml={2}\n pl={2} // For some reason, the px shorthand doesn't work on this Button\n pr={2}\n py={1}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n {selected}\n </MenuButton>\n <MenuList data-testid={testIds.sortDropdown} minW=\"180\" zIndex=\"sticky\">\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", \"Relevance\")}\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => updateSearch({ sort: undefined })}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", display)}\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => updateSearch({ sort: value as CatalogSearchSort })}\n >\n {display}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n </Flex>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageListViewProps } from \"./PackageList\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n \"data-event\": dataEvent,\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n data-event={dataEvent}\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { WideCardList } from \"./WideCardList\";\nimport { ExtendedCatalogPackage } from \"../../api/catalog-search\";\nimport { PackageCardType } from \"../PackageCard\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n \"data-event\"?: string;\n items: ExtendedCatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n \"data-event\": dataEvent,\n cardView = PackageCardType.Wide,\n items,\n loading,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View data-event={dataEvent} items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { LIMIT, SEARCH_ANALYTICS } from \"./constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchBar } from \"./SearchBar\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\nimport {\n useCdkType,\n useCdkMajor,\n useKeywords,\n useLanguages,\n useOffset,\n useSearchQuery,\n useSort,\n useTags,\n} from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\n\nexport const SearchResults: FunctionComponent = () => {\n const updateSearch = useUpdateSearchParam();\n\n const offset = useOffset();\n const query = useSearchQuery();\n const keywords = useKeywords();\n const languages = useLanguages();\n const cdkMajor = useCdkMajor();\n const cdkType = useCdkType();\n const sort = useSort();\n const tags = useTags();\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit: LIMIT,\n query,\n keywords,\n languages,\n cdkMajor,\n cdkType,\n sort,\n tags,\n });\n\n // Resets the page number to 1 if query param offset is below 0, or to the last page if offset is higher than page count\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n updateSearch({ offset: 0 });\n } else {\n // Offset is too large, just take last page\n updateSearch({ offset: pageLimit });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\n\n // Scroll to top on page change\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [page]);\n\n return (\n <Page\n meta={{\n title: query || \"Search\",\n description: query\n ? `${results.length} results for ${query} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Stack direction=\"column\" maxW=\"100vw\" pb={4} px={4} spacing={4}>\n <SearchBar />\n\n <Stack\n align={{ base: \"start\", lg: \"center\" }}\n direction={{ base: \"column-reverse\", lg: \"row\" }}\n justify={{ base: \"initial\", lg: \"space-between\" }}\n spacing={4}\n >\n <SearchDetails\n count={results.length}\n filtered={!!query}\n limit={LIMIT}\n offset={offset}\n query={query}\n />\n\n <Box display={{ base: \"none\", md: \"initial\" }}>\n <SortedBy />\n </Box>\n\n <Box display={{ md: \"none\" }}>\n <SortAndFilterDrawer />\n </Box>\n </Stack>\n\n <PackageList data-event={SEARCH_ANALYTICS.RESULTS} items={page} />\n\n <Box w=\"full\">\n <PageControls offset={offset} pageLimit={pageLimit} />\n </Box>\n </Stack>\n </Page>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { FilterPanel } from \"./FilterPanel\";\nimport { SearchResults } from \"./SearchResults\";\nimport testIds from \"./testIds\";\nimport { Page } from \"../../components/Page\";\n\nexport const Search: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description: \"Search Construct Libraries for AWS CDK, CDK8s, and CDKTF\",\n }}\n pageName=\"search\"\n >\n <Grid\n data-testid={testIds.page}\n gap={4}\n h=\"full\"\n maxW=\"100%\"\n px={{ base: 0, md: 6 }}\n py={6}\n templateColumns={{ base: \"1fr\", md: \"auto 1fr\" }}\n templateRows=\"1fr\"\n >\n {/* Filter Panel Desktop */}\n <FilterPanel />\n\n {/* Results, Info, and Controls */}\n <SearchResults />\n </Grid>\n </Page>\n );\n};\n"],"names":["SORT_RENDER_MAP","CatalogSearchSort","NameAsc","NameDesc","PublishDateAsc","PublishDateDesc","DownloadsDesc","DownloadsAsc","searchEvent","_len","arguments","length","e","Array","_key","eventName","SEARCH_ANALYTICS","FILTERS","RESULTS","SEARCH","SORT","FilterHeading","_ref","name","hint","placement","useBreakpointValue","base","md","_jsxs","Flex","align","mb","children","_jsx","Heading","as","size","w","Popover","colorScheme","strategy","PopoverTrigger","concat","ml","QuestionIcon","h","PopoverContent","bg","borderRadius","color","fontSize","mx","shadow","PopoverArrow","PopoverBody","Text","testIds","createTestIds","RadioFilter","dataTestid","checkedValue","value","onValueChange","options","Stack","spacing","RadioGroup","onChange","map","_ref2","display","dataEvent","Radio","filterItem","isTruncated","toNum","val","result","parseInt","parseQueryArray","queryString","decodeURIComponent","split","getParamFromUrl","key","window","URL","location","href","searchParams","get","useSearchParam","transform","qp","useQueryParams","useMemo","useCdkType","_useSearchParam","QUERY_PARAMS","CDK_TYPE","undefined","useCdkMajor","CDK_MAJOR","p","useKeywords","KEYWORDS","useLanguages","LANGUAGES","useSearchQuery","_useSearchParam2","SEARCH_QUERY","useSort","_useSearchParam3","useTags","TAGS","useUpdateSearchParam","push","useHistory","useCallback","offset","params","_objectWithoutProperties","_excluded","getSearchPath","_objectSpread","getSearchUrlParams","_getParamFromUrl","_getParamFromUrl2","query","keywords","cdkType","cdkMajor","cdkMajorParam","languages","OFFSET","sort","tags","CDKFilter","_cdkMajor$toString","updateSearch","searchAPI","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","Object","entries","reduce","opts","_slicedToArray","meta","pkgCount","CDKTYPE_NAME_MAP","keys","majorsOptions","_cdkOptions$cdkType","majorVersions","a","b","toString","_Fragment","cdkTypeFilter","type","values","cdkVersionFilter","major","majorNum","CheckboxItem","isDisabled","disabledHint","isChecked","Checkbox","Tooltip","hasArrow","label","CheckboxFilter","initialItemCount","checkedValues","collapse","useDisclosure","trackCustomEvent","useAnalytics","getOnChange","item","clickEvent","alwaysShow","showWhenExpanded","slice","isExpandible","direction","mt","_createElement","includes","Collapse","animateOpacity","in","isOpen","unmountOnExit","Button","fontWeight","leftIcon","ChevronUpIcon","ChevronDownIcon","onClick","onToggle","textAlign","variant","KeywordsFilter","keywordMap","keywordOptions","baseOptions","filter","_ref5","keyword","_ref7","k","some","opt","languagesFilter","languageOptions","LANGUAGE_NAME_MAP","TEMP_SUPPORTED_LANGUAGES","has","l1","l2","LanguageFilter","lang","language","l","TagFilter","packageTags","useConfigValue","packageTagGroups","tagFilterGroups","_packageTags$filter","tagGroupsMap","Map","forEach","group","set","id","mapTagsToFilterGroups","accum","tag","_tag$searchFilter","groupIdOrName","searchFilter","groupBy","customGroup","entry","_accum$groupIdOrName$","_accum$groupIdOrName","Boolean","onTagsChange","t","getOnRadioTagChange","groupName","_tagFilterGroups$grou","_tagFilterGroups$grou2","groupTags","Set","filteredTags","filterType","tooltip","tagItems","sharedProps","_tagItems$find$id","_tagItems$find","find","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxH","maxW","minW","overflow","pos","top","zIndex","ArrowButton","Icon","icon","props","borderColor","IconButton","disabled","GoToPage","pageLimit","_useState","useState","_useState2","inputValue","setInputValue","useEffect","onSubmit","preventDefault","Input","max","min","target","onFocus","PageControls","goForward","goBack","justify","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","SearchBar","setValue","SearchBarComponent","Em","Count","first","count","last","SearchDetails","_ref3","limit","filtered","hasResults","searchDetails","SortFilter","newSort","SortAndFilterDrawer","drawer","onOpen","rightIcon","Drawer","DrawerOverlay","DrawerContent","DrawerHeader","borderBottom","DrawerCloseButton","DrawerBody","pb","SortedBy","selected","Menu","MenuButton","sortButton","pl","pr","py","MenuList","sortDropdown","MenuItem","sortItem","listViews","PackageCardType","Wide","items","pkg","PackageCard","version","PackageList","memo","_ref$cardView","cardView","loading","Center","Spinner","View","displayName","SearchResults","o","_useCatalogResults","useCatalogResults","page","results","scrollTo","Page","title","description","pageName","px","lg","Box","Search","Grid","gap","templateColumns","templateRows"],"sourceRoot":""}
1
+ {"version":3,"file":"static/js/773.d06e20f9.chunk.js","mappings":"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","sources":["views/Search/constants.ts","views/Search/FilterHeading.tsx","views/Search/testIds.ts","views/Search/RadioFilter.tsx","views/Search/util.ts","views/Search/useSearchParam.ts","views/Search/useUpdateSearchParam.ts","views/Search/CDKFilter.tsx","views/Search/CheckboxFilter.tsx","views/Search/KeywordsFilter.tsx","views/Search/LanguageFilter.tsx","views/Search/TagFilter.tsx","views/Search/FilterPanel.tsx","views/Search/ArrowButton.tsx","views/Search/GoToPage.tsx","views/Search/PageControls.tsx","views/Search/SearchBar.tsx","views/Search/SearchDetails.tsx","views/Search/SortFilter.tsx","views/Search/SortAndFilterDrawer.tsx","views/Search/SortedBy.tsx","components/PackageList/WideCardList.tsx","components/PackageList/PackageList.tsx","views/Search/SearchResults.tsx","views/Search/Search.tsx"],"sourcesContent":["import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport type { QueryParamKey } from \"../../constants/url\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nconst LIMITS = [25, 50, 75, 100];\nexport const LIMIT = LIMITS[0];\n\nexport type SearchQueryParam = Extract<QueryParamKey, \"offset\" | \"q\">;\n\nexport const SORT_RENDER_MAP = {\n [CatalogSearchSort.NameAsc]: \"A-Z\",\n [CatalogSearchSort.NameDesc]: \"Z-A\",\n [CatalogSearchSort.PublishDateAsc]: \"Oldest\",\n [CatalogSearchSort.PublishDateDesc]: \"Recently updated\",\n [CatalogSearchSort.DownloadsDesc]: \"Most downloads\",\n [CatalogSearchSort.DownloadsAsc]: \"Least downloads\",\n};\n\nconst searchEvent: typeof eventName = (...e) => eventName(\"Search\", ...e);\n\nexport const SEARCH_ANALYTICS = {\n FILTERS: searchEvent(\"Filters\"),\n RESULTS: searchEvent(\"Results\"),\n SEARCH: searchEvent(\"Search\"),\n SORT: searchEvent(\"Sort\"),\n};\n","import { QuestionIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Heading,\n Text,\n Popover,\n PopoverTrigger,\n PopoverBody,\n PopoverArrow,\n PopoverContent,\n useBreakpointValue,\n PlacementWithLogical,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface FilterHeadingProps {\n name: string;\n hint?: string;\n}\n\nexport const FilterHeading: FunctionComponent<FilterHeadingProps> = ({\n name,\n hint,\n}) => {\n const placement = useBreakpointValue<PlacementWithLogical>({\n base: \"auto\",\n md: \"right\",\n });\n\n return (\n <Flex align=\"center\" mb={1}>\n <Heading as=\"h3\" size=\"sm\" w=\"max-content\">\n {name}\n </Heading>\n {hint ? (\n <Popover colorScheme=\"dark\" placement={placement} strategy=\"fixed\">\n <PopoverTrigger>\n <Flex\n aria-label={`Hint: ${name}`}\n as=\"button\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Popover\")}\n ml={2}\n >\n <QuestionIcon h={3.5} w={3.5} />\n </Flex>\n </PopoverTrigger>\n <PopoverContent\n bg=\"gray.700\"\n borderRadius=\"base\"\n color=\"white\"\n fontSize=\"sm\"\n mx={{ base: \"1rem\", md: \"initial\" }}\n shadow=\"whiteAlpha.300\"\n >\n <PopoverArrow bg=\"gray.700\" />\n <PopoverBody>\n <Text>{hint}</Text>\n </PopoverBody>\n </PopoverContent>\n </Popover>\n ) : null}\n </Flex>\n );\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nexport default createTestIds(\"searchRedesign\", [\n \"page\",\n // Results\n \"searchDetails\",\n \"nextPage\",\n \"prevPage\",\n \"goToPage\",\n // Sorting\n \"sortButton\",\n \"sortDropdown\",\n \"sortItem\",\n // Filters Panel\n \"filtersPanel\",\n \"cdkTypeFilter\",\n \"cdkVersionFilter\",\n \"filterItem\",\n \"languagesFilter\",\n] as const);\n","import { Radio, RadioGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface RadioFilterProps extends FilterHeadingProps {\n \"data-testid\"?: string;\n value?: string;\n onValueChange: (value: string) => void;\n options: {\n display: string;\n value: string;\n }[];\n}\n\nexport const RadioFilter: FunctionComponent<RadioFilterProps> = ({\n \"data-testid\": dataTestid,\n value: checkedValue,\n onValueChange,\n options,\n name,\n hint,\n}) => {\n return (\n <Stack data-testid={dataTestid} spacing={1}>\n <FilterHeading hint={hint} name={name} />\n <RadioGroup onChange={onValueChange} value={checkedValue}>\n <Stack spacing={1}>\n {options.map(({ display, value }) => {\n const dataEvent = eventName(\n SEARCH_ANALYTICS.FILTERS,\n name,\n \"Filter\",\n display\n );\n return (\n <Radio data-event={dataEvent} key={value} value={value}>\n <Text\n color=\"textTertiary\"\n data-event={dataEvent}\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Radio>\n );\n })}\n </Stack>\n </RadioGroup>\n </Stack>\n );\n};\n","import { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\n\nexport const toNum = (val: string) => {\n const result = parseInt(val);\n\n if (`${result}` === \"NaN\") {\n return 0;\n }\n\n return result;\n};\n\nexport const parseQueryArray = <T extends string>(\n queryString: string | null\n) => {\n if (!queryString) return [];\n\n return decodeURIComponent(queryString).split(\",\") as T[];\n};\n\nconst getParamFromUrl = (key: string) => {\n if (typeof window === \"undefined\") return null;\n const queryParams = new URL(window.location.href).searchParams;\n return queryParams.get(key);\n};\n\nexport const getSearchUrlParams = () => {\n return {\n query: getParamFromUrl(QUERY_PARAMS.SEARCH_QUERY) ?? \"\",\n keywords: parseQueryArray(getParamFromUrl(QUERY_PARAMS.KEYWORDS)),\n cdkType: (getParamFromUrl(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined,\n cdkMajor: (() => {\n const cdkMajorParam = getParamFromUrl(QUERY_PARAMS.CDK_MAJOR);\n return cdkMajorParam ? toNum(cdkMajorParam) : undefined;\n })(),\n languages: parseQueryArray(\n getParamFromUrl(QUERY_PARAMS.LANGUAGES)\n ) as Language[],\n offset: toNum(getParamFromUrl(QUERY_PARAMS.OFFSET) ?? \"\"),\n sort:\n (getParamFromUrl(QUERY_PARAMS.SORT) as CatalogSearchSort) ?? undefined,\n tags: parseQueryArray(getParamFromUrl(QUERY_PARAMS.TAGS)),\n };\n};\n","import { useMemo } from \"react\";\nimport { parseQueryArray, toNum } from \"./util\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { CDKType } from \"../../constants/constructs\";\nimport { Language } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\nconst useSearchParam = <T = string | null>(\n key: string,\n transform?: (param: string | null) => T\n): T => {\n const queryParams = useQueryParams();\n const qp = queryParams.get(key);\n\n return useMemo(\n () => (transform ? transform(qp) : (qp as unknown as T)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [qp]\n );\n};\n\nexport const useCdkType = () => {\n const cdkType: CDKType | undefined =\n useSearchParam(QUERY_PARAMS.CDK_TYPE) ?? undefined;\n\n return cdkType;\n};\n\nexport const useCdkMajor = () => {\n const cdkMajor: number | undefined = useSearchParam(\n QUERY_PARAMS.CDK_MAJOR,\n (p) => (p ? toNum(p) : undefined)\n );\n\n return cdkMajor;\n};\n\nexport const useKeywords = () => {\n const keywords: string[] = useSearchParam(\n QUERY_PARAMS.KEYWORDS,\n parseQueryArray\n );\n\n return keywords;\n};\n\nexport const useLanguages = () => {\n const languages: Language[] = useSearchParam(\n QUERY_PARAMS.LANGUAGES,\n parseQueryArray\n ) as Language[];\n\n return languages;\n};\n\nexport const useOffset = () => {\n const offset = useSearchParam(QUERY_PARAMS.OFFSET, (o) => toNum(o ?? \"\"));\n return offset;\n};\n\nexport const useSearchQuery = () => {\n const query: string = useSearchParam(QUERY_PARAMS.SEARCH_QUERY) ?? \"\";\n return query;\n};\n\nexport const useSort = () => {\n const sort: CatalogSearchSort | undefined =\n useSearchParam(QUERY_PARAMS.SORT) ?? undefined;\n return sort;\n};\n\nexport const useTags = () => {\n const tags: string[] = useSearchParam(QUERY_PARAMS.TAGS, parseQueryArray);\n return tags;\n};\n","import { useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { getSearchUrlParams } from \"./util\";\nimport { getSearchPath } from \"../../util/url\";\n\nexport const useUpdateSearchParam = () => {\n const { push } = useHistory();\n\n return useCallback(\n (p?: Partial<Parameters<typeof getSearchPath>[0]>) => {\n const { offset, ...params } = p ?? {};\n\n push(\n getSearchPath({\n ...getSearchUrlParams(),\n ...params,\n offset: offset ?? 0,\n })\n );\n },\n [push]\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport testIds from \"./testIds\";\nimport { useCdkMajor, useCdkType } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogConstructFrameworkMeta } from \"../../api/catalog-search\";\nimport { CDKType, CDKTYPE_NAME_MAP } from \"../../constants/constructs\";\nimport { useSearchContext } from \"../../contexts/Search\";\n\ntype CDKOptions = Partial<{\n [key in CDKType]: CatalogConstructFrameworkMeta & {\n display: string;\n value: key;\n };\n}>;\n\nexport const CDKFilter: FunctionComponent = () => {\n const cdkType = useCdkType();\n const cdkMajor = useCdkMajor();\n\n const updateSearch = useUpdateSearchParam();\n\n const searchAPI = useSearchContext()!;\n\n // Options with less than one package will be omitted\n const cdkOptions = useMemo(() => {\n const cdkTypes = searchAPI.constructFrameworks;\n const options = Object.entries(cdkTypes).reduce((opts, [name, meta]) => {\n if (meta.pkgCount < 1) {\n return opts;\n }\n\n return {\n ...opts,\n [name]: {\n display: CDKTYPE_NAME_MAP[name as CDKType],\n value: name,\n ...meta,\n },\n };\n }, {});\n\n return Object.keys(options).length ? (options as CDKOptions) : undefined;\n }, [searchAPI]);\n\n const majorsOptions = useMemo(() => {\n if (!cdkOptions || !cdkType) return undefined;\n const majorVersions = cdkOptions[cdkType]?.majorVersions;\n\n if (!majorVersions) return undefined;\n\n return [...majorVersions]\n .sort((a, b) => a - b)\n .map((value) => ({\n value: value.toString(),\n display: `${CDKTYPE_NAME_MAP[cdkType]} v${value}`,\n }));\n }, [cdkOptions, cdkType]);\n\n if (!cdkOptions) {\n return null;\n }\n\n const onCdkTypeChange = (type: string) => {\n const cdk = type as CDKType;\n updateSearch({ cdkType: type ? cdk : undefined, cdkMajor: undefined });\n };\n\n const onCdkMajorChange = (major: string) => {\n let majorNum: number | undefined = undefined;\n\n if (major) {\n majorNum = parseInt(major, 10);\n }\n\n updateSearch({ cdkMajor: majorNum });\n };\n\n return (\n <>\n <RadioFilter\n data-testid={testIds.cdkTypeFilter}\n hint=\"Choose the right CDK for your IaC technology: AWS CDK for AWS CloudFormation, CDKTF for Terraform, or CDK8s for Kubernetes.\"\n name=\"CDK Type\"\n onValueChange={onCdkTypeChange}\n options={[\n { display: \"Any CDK Type\", value: \"\" },\n ...Object.values(cdkOptions),\n ]}\n value={cdkType ?? \"\"}\n />\n {/* No point in showing major versions if only a single one is available */}\n {!!(majorsOptions && majorsOptions.length > 1) && (\n <RadioFilter\n data-testid={testIds.cdkVersionFilter}\n hint=\"Choose the major version of the CDK you're using to see only constructs that will work with that version.\"\n name=\"CDK Major Version\"\n onValueChange={onCdkMajorChange}\n options={[\n { display: \"Any Major Version\", value: \"\" },\n ...majorsOptions,\n ]}\n value={cdkMajor?.toString() ?? \"\"}\n />\n )}\n </>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Button,\n Collapse,\n Checkbox,\n Stack,\n Text,\n Tooltip,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { FilterHeading, FilterHeadingProps } from \"./FilterHeading\";\nimport testIds from \"./testIds\";\nimport { clickEvent, eventName, useAnalytics } from \"../../contexts/Analytics\";\n\ninterface CheckboxOption {\n display: string;\n value: string;\n isDisabled?: boolean;\n disabledHint?: string;\n}\n\ninterface CheckboxItemProps extends CheckboxOption {\n onChange: () => void;\n isChecked: boolean;\n}\n\nexport interface CheckboxFilterProps extends FilterHeadingProps {\n /**\n * Test ID to select checkbox in tests\n */\n \"data-testid\"?: string;\n /**\n * Number of items that can be initially shown\n */\n initialItemCount?: number;\n /**\n * Defines checkbox items\n */\n options: CheckboxOption[];\n /**\n * Selected values\n */\n values: string[];\n /**\n * Callback triggered when an item is clicked\n */\n onValueChange: (value: string) => void;\n}\n\nconst CheckboxItem: FunctionComponent<CheckboxItemProps> = ({\n display,\n value,\n isDisabled,\n disabledHint,\n isChecked,\n onChange,\n}) => (\n <Checkbox\n isChecked={isChecked}\n isDisabled={isDisabled}\n key={value}\n onChange={onChange}\n >\n <Tooltip\n hasArrow\n isDisabled={!isDisabled && !disabledHint}\n label={disabledHint}\n placement=\"right\"\n >\n <Text\n color=\"textTertiary\"\n data-testid={testIds.filterItem}\n data-value={value}\n isTruncated\n >\n {display}\n </Text>\n </Tooltip>\n </Checkbox>\n);\n\nexport const CheckboxFilter: FunctionComponent<CheckboxFilterProps> = ({\n \"data-testid\": dataTestid,\n initialItemCount,\n hint,\n name,\n options,\n values: checkedValues,\n onValueChange,\n}) => {\n const collapse = useDisclosure();\n const { trackCustomEvent } = useAnalytics();\n\n const getOnChange = (item: CheckboxOption) => () => {\n trackCustomEvent(\n clickEvent({\n name: eventName(SEARCH_ANALYTICS.FILTERS, name, \"Filter\", item.display),\n })\n );\n onValueChange(item.value);\n };\n\n let alwaysShow: typeof options = options;\n let showWhenExpanded: typeof options = [];\n\n if (initialItemCount) {\n alwaysShow = options.slice(0, initialItemCount);\n showWhenExpanded = options.slice(initialItemCount, options.length);\n }\n\n const isExpandible = showWhenExpanded.length > 0;\n\n return (\n <Flex data-testid={dataTestid} direction=\"column\">\n <FilterHeading hint={hint} name={name} />\n <Stack mt={1} spacing={1}>\n {alwaysShow.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n {isExpandible && (\n <Collapse animateOpacity in={collapse.isOpen} unmountOnExit>\n <Stack spacing={1}>\n {showWhenExpanded.map((item) => (\n <CheckboxItem\n {...item}\n isChecked={checkedValues.includes(item.value)}\n key={item.value}\n onChange={getOnChange(item)}\n />\n ))}\n </Stack>\n </Collapse>\n )}\n </Stack>\n {isExpandible && (\n <Flex align=\"start\" mt={1}>\n <Button\n color=\"textTertiary\"\n data-event={eventName(SEARCH_ANALYTICS.FILTERS, name, \"Show More\")}\n fontWeight=\"normal\"\n leftIcon={collapse.isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n onClick={collapse.onToggle}\n size=\"sm\"\n textAlign=\"left\"\n variant=\"link\"\n w=\"auto\"\n >\n {collapse.isOpen\n ? `Show fewer options (${alwaysShow.length})`\n : `Show more options (${showWhenExpanded.length})`}\n </Button>\n </Flex>\n )}\n </Flex>\n );\n};\n","import { FunctionComponent, useMemo } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport testIds from \"./testIds\";\nimport { useKeywords } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { useSearchContext } from \"../../contexts/Search\";\n\nexport const KeywordsFilter: FunctionComponent = () => {\n const keywords = useKeywords();\n const keywordMap = useSearchContext()!.keywords;\n const updateSearch = useUpdateSearchParam();\n\n const onKeywordChange = (keyword: string) => {\n updateSearch({\n keywords: keywords.includes(keyword)\n ? keywords.filter((k) => k !== keyword)\n : [...keywords, keyword],\n });\n };\n\n const keywordOptions = useMemo(() => {\n const baseOptions = [...keywordMap.entries()]\n .sort(([, count1], [, count2]) => {\n return count1 < count2 ? 1 : -1;\n })\n .filter(([keyword]) => !keywords.includes(keyword))\n .map(([keyword]) => ({\n display: keyword,\n value: keyword,\n }))\n .slice(0, 25);\n\n const keywordsNotInOptions = keywords.filter(\n (k) => !baseOptions.some((opt) => opt.value === k)\n );\n\n return [\n ...keywordsNotInOptions.map((k) => ({ display: k, value: k })),\n ...baseOptions,\n ];\n }, [keywordMap, keywords]);\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Focus the results by choosing one or more keywords reflecting the kind of construct you're looking for. Keywords are provided by construct authors.\"\n initialItemCount={5}\n name=\"Keywords\"\n onValueChange={onKeywordChange}\n options={keywordOptions}\n values={keywords}\n />\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport testIds from \"./testIds\";\nimport { useLanguages } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nconst languageOptions = Object.entries(LANGUAGE_NAME_MAP)\n .map(([key, value]) => ({\n display: value,\n value: key,\n ...(TEMP_SUPPORTED_LANGUAGES.has(key as Language)\n ? { isDisabled: false }\n : {\n isDisabled: true,\n disabledHint: `${\n LANGUAGE_NAME_MAP[key as Language]\n } support is coming soon!`,\n }),\n }))\n .sort((l1, l2) => {\n // Push disabled languages to back of list\n return l1.isDisabled > l2.isDisabled ? 1 : -1;\n });\n\nexport const LanguageFilter: FunctionComponent = () => {\n const languages = useLanguages();\n\n const updateSearch = useUpdateSearchParam();\n\n const onLanguagesChange = (lang: string) => {\n const language = lang as Language;\n\n updateSearch({\n languages: languages.includes(language)\n ? languages.filter((l) => l !== language)\n : [...languages, language],\n });\n };\n\n return (\n <CheckboxFilter\n data-testid={testIds.languagesFilter}\n hint=\"Choose one or more languages. Results include constructs for use with at least one of the selected languages.\"\n name=\"Programming Language\"\n onValueChange={onLanguagesChange}\n options={languageOptions}\n values={languages}\n />\n );\n};\n","import { FunctionComponent, useCallback, useMemo } from \"react\";\nimport { CheckboxFilter } from \"./CheckboxFilter\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useTags } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { PackageTagConfig, TagGroupConfig } from \"../../api/config\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\n\ninterface FilterGroup extends Partial<TagGroupConfig> {\n id: string;\n tags: PackageTagConfig[];\n}\ninterface FilterGroups {\n [group: string]: FilterGroup;\n}\n\n/**\n * Creates a plain object map of FilterGroups keyed by group id\n */\nexport const mapTagsToFilterGroups = (\n packageTags: PackageTagConfig[],\n tagGroupsMap: Map<string, TagGroupConfig>\n): FilterGroups => {\n return packageTags.reduce(\n (accum: FilterGroups, tag: PackageTagConfig): FilterGroups => {\n const groupIdOrName = tag.searchFilter?.groupBy;\n const customGroup = groupIdOrName\n ? tagGroupsMap.get(groupIdOrName)\n : undefined;\n\n if (groupIdOrName && customGroup) {\n const entry = accum[groupIdOrName];\n if (entry) {\n entry.tags = [...entry.tags, tag];\n return accum;\n }\n\n return {\n ...accum,\n [groupIdOrName]: {\n ...customGroup,\n tags: [tag],\n },\n };\n }\n\n if (groupIdOrName) {\n return {\n ...accum,\n [groupIdOrName]: {\n id: groupIdOrName,\n tags: [...(accum?.[groupIdOrName]?.tags ?? []), tag],\n },\n };\n }\n return accum;\n },\n {}\n );\n};\n\nexport const TagFilter: FunctionComponent = () => {\n const packageTags = useConfigValue(\"packageTags\");\n const packageTagGroups = useConfigValue(\"packageTagGroups\");\n\n const tagFilterGroups: FilterGroups = useMemo(() => {\n const tagGroupsMap = new Map<string, TagGroupConfig>();\n packageTagGroups?.forEach((group) => {\n tagGroupsMap.set(group.id, group);\n });\n\n const filterableTags =\n packageTags?.filter((tag) => Boolean(tag.searchFilter)) ?? [];\n\n return mapTagsToFilterGroups(filterableTags, tagGroupsMap);\n }, [packageTags, packageTagGroups]);\n\n const tags = useTags();\n const updateSearch = useUpdateSearchParam();\n\n const onTagsChange = (tag: string) => {\n updateSearch({\n tags: tags.includes(tag) ? tags.filter((t) => t !== tag) : [...tags, tag],\n });\n };\n\n const getOnRadioTagChange = useCallback(\n (groupName: string) => {\n const groupTags = new Set(\n (tagFilterGroups[groupName]?.tags ?? []).map(({ id }) => id)\n );\n\n return (tag: string) => {\n const filteredTags = tags.filter((t) => !groupTags.has(t));\n\n updateSearch({\n tags: tag ? [...filteredTags, tag] : filteredTags,\n });\n };\n },\n [tagFilterGroups, tags, updateSearch]\n );\n\n return (\n <>\n {Object.values(tagFilterGroups).map(\n ({ filterType, id, label, tooltip, tags: tagItems }) => {\n const sharedProps = {\n hint: tooltip,\n name: label ?? id,\n options: tagItems.map((tag) => {\n return {\n display: tag.searchFilter!.display,\n value: tag.id,\n };\n }),\n };\n\n if (filterType === \"radio\") {\n return (\n <RadioFilter\n {...sharedProps}\n key={id}\n onValueChange={getOnRadioTagChange(id)}\n options={[\n { display: `Any ${sharedProps.name}`, value: \"\" },\n ...sharedProps.options,\n ]}\n value={tagItems.find((t) => tags.includes(t.id))?.id ?? \"\"}\n />\n );\n }\n\n return (\n <CheckboxFilter\n {...sharedProps}\n key={id}\n onValueChange={onTagsChange}\n values={tags}\n />\n );\n }\n )}\n </>\n );\n};\n","import { Heading, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { TagFilter } from \"./TagFilter\";\nimport testIds from \"./testIds\";\nimport { Card } from \"../../components/Card\";\n\nexport interface FilterPanelProps {}\n\n// Header height + section padding\nconst TOP_OFFSET = \"5.75rem\";\n\n/**\n * The desktop Resolution Filter Panel\n */\nexport const FilterPanel: FunctionComponent<FilterPanelProps> = () => {\n return (\n <Card\n borderRadius=\"sm\"\n data-testid={testIds.filtersPanel}\n display={{ base: \"none\", md: \"flex\" }}\n maxH={`calc(100vh - ${TOP_OFFSET} - 1.25rem)`}\n maxW=\"23rem\"\n minW=\"100%\"\n overflow=\"hidden auto\"\n p={4}\n pos=\"sticky\"\n top={TOP_OFFSET}\n zIndex=\"docked\"\n >\n <Stack color=\"textPrimary\" h=\"max-content\" spacing={4} top={4}>\n <Heading as=\"h2\" size=\"sm\">\n Filters\n </Heading>\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </Card>\n );\n};\n","import { IconButton, IconProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport interface ArrowButtonProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n icon: FunctionComponent<IconProps>;\n label: string;\n onClick?: () => void;\n}\n\nexport const ArrowButton: FunctionComponent<ArrowButtonProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: Icon,\n label,\n onClick,\n}) => {\n const props = {\n \"aria-label\": label,\n borderRadius: \"md\",\n borderColor: \"blue.500\",\n colorScheme: \"blue\",\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n icon: <Icon color=\"blue.500\" h={5} w={5} />,\n mx: 2,\n h: 10,\n w: 10,\n variant: \"outline\",\n };\n\n return <IconButton {...props} disabled={!onClick} onClick={onClick} />;\n};\n","import { Flex, Input, Text } from \"@chakra-ui/react\";\nimport {\n FormEventHandler,\n FunctionComponent,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { clickEvent, useAnalytics } from \"../../contexts/Analytics\";\n\nexport interface GoToPageProps {\n \"data-event\"?: string;\n \"data-testid\"?: string;\n pageLimit: number;\n offset: number;\n}\n\nexport const GoToPage: FunctionComponent<GoToPageProps> = ({\n \"data-event\": dataEvent,\n \"data-testid\": dataTestid,\n pageLimit,\n offset,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const { trackCustomEvent } = useAnalytics();\n const [inputValue, setInputValue] = useState((offset + 1).toString());\n\n useEffect(() => {\n setInputValue((offset + 1).toString());\n }, [offset]);\n\n const onInputChange = (e: SyntheticEvent<HTMLInputElement>) => {\n e.preventDefault();\n setInputValue((e.target as HTMLInputElement).value);\n };\n\n const onSubmit: FormEventHandler<HTMLInputElement> = (e) => {\n e.preventDefault();\n updateSearch({ offset: parseInt(inputValue) - 1 });\n };\n\n return (\n <Flex align=\"center\" as=\"form\" mx={2} onSubmit={onSubmit}>\n <Input\n aria-label=\"Jump to page\"\n colorScheme=\"brand\"\n data-testid={dataTestid}\n h={10}\n max={pageLimit + 1}\n min={1}\n name=\"page\"\n onChange={onInputChange}\n onFocus={() => {\n if (dataEvent) {\n trackCustomEvent(clickEvent({ name: dataEvent }));\n }\n }}\n p={0}\n textAlign=\"center\"\n type=\"number\"\n value={inputValue}\n w={10}\n />\n <Text ml={2} w=\"max-content\">\n of {pageLimit + 1}\n </Text>\n </Flex>\n );\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@chakra-ui/icons\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { ArrowButton } from \"./ArrowButton\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { GoToPage } from \"./GoToPage\";\nimport testIds from \"./testIds\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport interface PageControlsProps {\n offset: number;\n pageLimit: number;\n}\n\nexport const PageControls: FunctionComponent<PageControlsProps> = ({\n offset,\n pageLimit,\n}) => {\n const updateSearch = useUpdateSearchParam();\n const goForward =\n offset < pageLimit ? () => updateSearch({ offset: offset + 1 }) : undefined;\n const goBack =\n offset > 0 ? () => updateSearch({ offset: offset - 1 }) : undefined;\n\n return (\n <Stack\n align=\"center\"\n direction=\"row\"\n justify=\"space-between\"\n maxW=\"18rem\"\n mx=\"auto\"\n spacing={4}\n w=\"full\"\n >\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Previous Page\")}\n data-testid={testIds.prevPage}\n icon={ChevronLeftIcon}\n label=\"Previous page button\"\n onClick={goBack}\n />\n <GoToPage\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Go to Page\")}\n data-testid={testIds.goToPage}\n offset={offset}\n pageLimit={pageLimit}\n />\n <ArrowButton\n data-event={eventName(SEARCH_ANALYTICS.RESULTS, \"Next Page\")}\n data-testid={testIds.nextPage}\n icon={ChevronRightIcon}\n label=\"Next page button\"\n onClick={goForward}\n />\n </Stack>\n );\n};\n","import { FunctionComponent, useState } from \"react\";\nimport { SEARCH_ANALYTICS } from \"./constants\";\nimport { useSearchQuery } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { SearchBar as SearchBarComponent } from \"../../components/SearchBar\";\n\nexport const SearchBar: FunctionComponent = () => {\n const query = useSearchQuery();\n const updateSearch = useUpdateSearchParam();\n\n const [value, setValue] = useState(query ?? \"\");\n\n return (\n <SearchBarComponent\n bg=\"bgSecondary\"\n data-event={SEARCH_ANALYTICS.SEARCH}\n onChange={(e) => setValue(e.target.value)}\n onSubmit={(e) => {\n e.preventDefault();\n\n updateSearch({\n query: value,\n sort: undefined,\n });\n }}\n value={value}\n />\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport interface SearchDetailsProps {\n limit: number;\n offset: number;\n count: number;\n filtered: boolean;\n query?: string;\n}\n\nconst Em: FunctionComponent = ({ children }) => (\n <Text as=\"strong\" color=\"textSecondary\">\n {children}\n </Text>\n);\n\nconst Count: FunctionComponent<{\n first: number;\n count: number;\n last: number;\n}> = ({ first, count, last }) => {\n if (!first && last >= count) {\n return (\n <>\n <Em>{count}</Em> of <Em>{count}</Em>\n </>\n );\n }\n\n return (\n <>\n <Em>\n {count ? first + 1 : count} - {last > count ? count : last}\n </Em>{\" \"}\n of <Em>{count}</Em>\n </>\n );\n};\n\nexport const SearchDetails: FunctionComponent<SearchDetailsProps> = ({\n limit,\n offset,\n count,\n filtered,\n query,\n}) => {\n const first = limit * offset;\n const last = first + limit;\n const hasResults = count > 0;\n\n return (\n <Text data-testid={testIds.searchDetails}>\n {hasResults ? (\n <>\n Displaying <Count count={count} first={first} last={last} />{\" \"}\n {filtered ? \"search results\" : \"constructs\"}\n </>\n ) : (\n <>{filtered ? \"There were no search results\" : \"No constructs found\"}</>\n )}\n {query && (\n <>\n {\" for \"}\n <Em>{query}</Em>\n </>\n )}\n .{!hasResults && filtered && <> Try a different term.</>}\n </Text>\n );\n};\n","import { FunctionComponent } from \"react\";\nimport { SORT_RENDER_MAP } from \"./constants\";\nimport { RadioFilter } from \"./RadioFilter\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\n\nexport const SortFilter: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const onSortChange = (newSort: string) => {\n updateSearch({\n sort: newSort ? (newSort as CatalogSearchSort) : undefined,\n });\n };\n\n return (\n <RadioFilter\n hint=\"Sets the order of search results\"\n name=\"Sorted By\"\n onValueChange={onSortChange}\n options={[\n { display: \"Relevance\", value: \"\" },\n ...Object.entries(SORT_RENDER_MAP).map(([value, display]) => ({\n display,\n value,\n })),\n ]}\n value={sort ?? \"\"}\n />\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Button,\n Drawer,\n Stack,\n DrawerBody,\n DrawerHeader,\n DrawerOverlay,\n DrawerContent,\n DrawerCloseButton,\n useDisclosure,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CDKFilter } from \"./CDKFilter\";\nimport { KeywordsFilter } from \"./KeywordsFilter\";\nimport { LanguageFilter } from \"./LanguageFilter\";\nimport { SortFilter } from \"./SortFilter\";\nimport { TagFilter } from \"./TagFilter\";\n\n/**\n * The mobile filter Drawer (Bottomsheet in iOS terminology)\n */\nexport const SortAndFilterDrawer: FunctionComponent = () => {\n const drawer = useDisclosure();\n return (\n <>\n <Button\n colorScheme=\"brand\"\n display={{ md: \"none\" }}\n onClick={drawer.onOpen}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n Sorting and Filters\n </Button>\n <Drawer {...drawer} placement=\"bottom\">\n <DrawerOverlay />\n\n <DrawerContent color=\"textPrimary\" maxH=\"full\">\n <DrawerHeader borderBottom=\"base\">Sorting and Filters</DrawerHeader>\n\n <DrawerCloseButton />\n\n <DrawerBody>\n <Stack color=\"textPrimary\" pb={4} spacing={4}>\n <SortFilter />\n\n <CDKFilter />\n\n <LanguageFilter />\n\n <TagFilter />\n\n <KeywordsFilter />\n </Stack>\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n </>\n );\n};\n","import { ChevronDownIcon } from \"@chakra-ui/icons\";\nimport {\n Flex,\n Text,\n Menu,\n MenuButton,\n MenuList,\n MenuItem,\n Button,\n} from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { SEARCH_ANALYTICS, SORT_RENDER_MAP } from \"./constants\";\nimport testIds from \"./testIds\";\nimport { useSort } from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { eventName } from \"../../contexts/Analytics\";\n\nexport const SortedBy: FunctionComponent = () => {\n const sort = useSort();\n const updateSearch = useUpdateSearchParam();\n\n const selected = sort ? SORT_RENDER_MAP[sort] : \"Relevance\";\n\n return (\n <Flex align=\"center\">\n <Text>Sorted by</Text>\n <Menu>\n <MenuButton\n as={Button}\n color=\"link\"\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Menu\")}\n data-testid={testIds.sortButton}\n ml={2}\n pl={2} // For some reason, the px shorthand doesn't work on this Button\n pr={2}\n py={1}\n rightIcon={<ChevronDownIcon />}\n variant=\"link\"\n >\n {selected}\n </MenuButton>\n <MenuList data-testid={testIds.sortDropdown} minW=\"180\" zIndex=\"sticky\">\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", \"Relevance\")}\n data-testid={testIds.sortItem}\n data-value=\"\"\n key=\"Relevance\"\n onClick={() => updateSearch({ sort: undefined })}\n >\n Relevance\n </MenuItem>\n {Object.entries(SORT_RENDER_MAP).map(([value, display]) => (\n <MenuItem\n data-event={eventName(SEARCH_ANALYTICS.SORT, \"Option\", display)}\n data-testid={testIds.sortItem}\n data-value={value}\n key={value}\n onClick={() => updateSearch({ sort: value as CatalogSearchSort })}\n >\n {display}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n </Flex>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { PackageListViewProps } from \"./PackageList\";\nimport { PackageCard, PackageCardType } from \"../PackageCard\";\n\nexport const WideCardList: FunctionComponent<PackageListViewProps> = ({\n \"data-event\": dataEvent,\n items,\n}) => {\n return (\n <Stack spacing={4}>\n {items.map((pkg) => (\n <PackageCard\n data-event={dataEvent}\n key={`${pkg.name}-${pkg.version}`}\n pkg={pkg}\n variant={PackageCardType.Wide}\n />\n ))}\n </Stack>\n );\n};\n","import { Center, Spinner } from \"@chakra-ui/react\";\nimport { FunctionComponent, memo } from \"react\";\nimport { WideCardList } from \"./WideCardList\";\nimport { ExtendedCatalogPackage } from \"../../api/catalog-search\";\nimport { PackageCardType } from \"../PackageCard\";\n\nconst listViews = {\n [PackageCardType.Wide]: WideCardList,\n};\n\nexport interface PackageListViewProps {\n \"data-event\"?: string;\n items: ExtendedCatalogPackage[];\n}\n\nexport interface PackageListProps extends Partial<PackageListViewProps> {\n cardView?: PackageCardType;\n loading?: boolean;\n title?: string;\n}\n\nexport const PackageList: FunctionComponent<PackageListProps> = memo(\n ({\n \"data-event\": dataEvent,\n cardView = PackageCardType.Wide,\n items,\n loading,\n }) => {\n if (loading || !items) {\n return (\n <Center>\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const View = listViews[cardView];\n\n return <View data-event={dataEvent} items={items} />;\n }\n);\n\nPackageList.displayName = \"PackageList\";\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { FunctionComponent, useEffect } from \"react\";\nimport { LIMIT, SEARCH_ANALYTICS } from \"./constants\";\nimport { PageControls } from \"./PageControls\";\nimport { SearchBar } from \"./SearchBar\";\nimport { SearchDetails } from \"./SearchDetails\";\nimport { SortAndFilterDrawer } from \"./SortAndFilterDrawer\";\nimport { SortedBy } from \"./SortedBy\";\nimport {\n useCdkType,\n useCdkMajor,\n useKeywords,\n useLanguages,\n useOffset,\n useSearchQuery,\n useSort,\n useTags,\n} from \"./useSearchParam\";\nimport { useUpdateSearchParam } from \"./useUpdateSearchParam\";\nimport { PackageList } from \"../../components/PackageList\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\n\nexport const SearchResults: FunctionComponent = () => {\n const updateSearch = useUpdateSearchParam();\n\n const offset = useOffset();\n const query = useSearchQuery();\n const keywords = useKeywords();\n const languages = useLanguages();\n const cdkMajor = useCdkMajor();\n const cdkType = useCdkType();\n const sort = useSort();\n const tags = useTags();\n\n const { page, pageLimit, results } = useCatalogResults({\n offset,\n limit: LIMIT,\n query,\n keywords,\n languages,\n cdkMajor,\n cdkType,\n sort,\n tags,\n });\n\n // Resets the page number to 1 if query param offset is below 0, or to the last page if offset is higher than page count\n useEffect(() => {\n // If the query has results but the page has nothing to show...\n if (results.length && (offset < 0 || offset > pageLimit)) {\n // Handle an out of bounds offset\n if (offset < 0) {\n updateSearch({ offset: 0 });\n } else {\n // Offset is too large, just take last page\n updateSearch({ offset: pageLimit });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [results, offset, pageLimit]);\n\n // Scroll to top on page change\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [page]);\n\n return (\n <Page\n meta={{\n title: query || \"Search\",\n description: query\n ? `${results.length} results for ${query} at Construct Hub`\n : \"Search reusable components for your cloud application\",\n }}\n pageName=\"search\"\n >\n <Stack direction=\"column\" maxW=\"100vw\" pb={4} px={4} spacing={4}>\n <SearchBar />\n\n <Stack\n align={{ base: \"start\", lg: \"center\" }}\n direction={{ base: \"column-reverse\", lg: \"row\" }}\n justify={{ base: \"initial\", lg: \"space-between\" }}\n spacing={4}\n >\n <SearchDetails\n count={results.length}\n filtered={!!query}\n limit={LIMIT}\n offset={offset}\n query={query}\n />\n\n <Box display={{ base: \"none\", md: \"initial\" }}>\n <SortedBy />\n </Box>\n\n <Box display={{ md: \"none\" }}>\n <SortAndFilterDrawer />\n </Box>\n </Stack>\n\n <PackageList data-event={SEARCH_ANALYTICS.RESULTS} items={page} />\n\n <Box w=\"full\">\n <PageControls offset={offset} pageLimit={pageLimit} />\n </Box>\n </Stack>\n </Page>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { FilterPanel } from \"./FilterPanel\";\nimport { SearchResults } from \"./SearchResults\";\nimport testIds from \"./testIds\";\nimport { Page } from \"../../components/Page\";\n\nexport const Search: FunctionComponent = () => {\n return (\n <Page\n meta={{\n title: \"Search - Construct Hub\",\n description: \"Search Construct Libraries for AWS CDK, CDK8s, and CDKTF\",\n }}\n pageName=\"search\"\n >\n <Grid\n data-testid={testIds.page}\n gap={4}\n h=\"full\"\n maxW=\"100%\"\n px={{ base: 0, md: 6 }}\n py={6}\n templateColumns={{ base: \"1fr\", md: \"auto 1fr\" }}\n templateRows=\"1fr\"\n >\n {/* Filter Panel Desktop */}\n <FilterPanel />\n\n {/* Results, Info, and Controls */}\n <SearchResults />\n </Grid>\n </Page>\n );\n};\n"],"names":["SORT_RENDER_MAP","CatalogSearchSort","NameAsc","NameDesc","PublishDateAsc","PublishDateDesc","DownloadsDesc","DownloadsAsc","searchEvent","_len","arguments","length","e","Array","_key","eventName","SEARCH_ANALYTICS","FILTERS","RESULTS","SEARCH","SORT","FilterHeading","_ref","name","hint","placement","useBreakpointValue","base","md","_jsxs","Flex","align","mb","children","_jsx","Heading","as","size","w","Popover","colorScheme","strategy","PopoverTrigger","concat","ml","QuestionIcon","h","PopoverContent","bg","borderRadius","color","fontSize","mx","shadow","PopoverArrow","PopoverBody","Text","testIds","createTestIds","RadioFilter","dataTestid","checkedValue","value","onValueChange","options","Stack","spacing","RadioGroup","onChange","map","_ref2","display","dataEvent","Radio","filterItem","isTruncated","toNum","val","result","parseInt","parseQueryArray","queryString","decodeURIComponent","split","getParamFromUrl","key","window","URL","location","href","searchParams","get","useSearchParam","transform","qp","useQueryParams","useMemo","useCdkType","_useSearchParam","QUERY_PARAMS","CDK_TYPE","undefined","useCdkMajor","CDK_MAJOR","p","useKeywords","KEYWORDS","useLanguages","LANGUAGES","useSearchQuery","_useSearchParam2","SEARCH_QUERY","useSort","_useSearchParam3","useTags","TAGS","useUpdateSearchParam","push","useHistory","useCallback","offset","params","_objectWithoutProperties","_excluded","getSearchPath","_objectSpread","getSearchUrlParams","_getParamFromUrl","_getParamFromUrl2","query","keywords","cdkType","cdkMajor","cdkMajorParam","languages","OFFSET","sort","tags","CDKFilter","_cdkMajor$toString","updateSearch","searchAPI","useSearchContext","cdkOptions","cdkTypes","constructFrameworks","Object","entries","reduce","opts","_slicedToArray","meta","pkgCount","CDKTYPE_NAME_MAP","keys","majorsOptions","_cdkOptions$cdkType","majorVersions","a","b","toString","_Fragment","cdkTypeFilter","type","values","cdkVersionFilter","major","majorNum","CheckboxItem","isDisabled","disabledHint","isChecked","Checkbox","Tooltip","hasArrow","label","CheckboxFilter","initialItemCount","checkedValues","collapse","useDisclosure","trackCustomEvent","useAnalytics","getOnChange","item","clickEvent","alwaysShow","showWhenExpanded","slice","isExpandible","direction","mt","_createElement","includes","Collapse","animateOpacity","in","isOpen","unmountOnExit","Button","fontWeight","leftIcon","ChevronUpIcon","ChevronDownIcon","onClick","onToggle","textAlign","variant","KeywordsFilter","keywordMap","keywordOptions","baseOptions","filter","_ref5","keyword","_ref7","k","some","opt","languagesFilter","languageOptions","LANGUAGE_NAME_MAP","TEMP_SUPPORTED_LANGUAGES","has","l1","l2","LanguageFilter","lang","language","l","TagFilter","packageTags","useConfigValue","packageTagGroups","tagFilterGroups","_packageTags$filter","tagGroupsMap","Map","forEach","group","set","id","mapTagsToFilterGroups","accum","tag","_tag$searchFilter","groupIdOrName","searchFilter","groupBy","customGroup","entry","_accum$groupIdOrName$","_accum$groupIdOrName","Boolean","onTagsChange","t","getOnRadioTagChange","groupName","_tagFilterGroups$grou","_tagFilterGroups$grou2","groupTags","Set","filteredTags","filterType","tooltip","tagItems","sharedProps","_tagItems$find$id","_tagItems$find","find","TOP_OFFSET","FilterPanel","Card","filtersPanel","maxH","maxW","minW","overflow","pos","top","zIndex","ArrowButton","Icon","icon","props","borderColor","IconButton","disabled","GoToPage","pageLimit","_useState","useState","_useState2","inputValue","setInputValue","useEffect","onSubmit","preventDefault","Input","max","min","target","onFocus","PageControls","goForward","goBack","justify","prevPage","ChevronLeftIcon","goToPage","nextPage","ChevronRightIcon","SearchBar","setValue","SearchBarComponent","Em","Count","first","count","last","SearchDetails","_ref3","limit","filtered","hasResults","searchDetails","SortFilter","newSort","SortAndFilterDrawer","drawer","onOpen","rightIcon","Drawer","DrawerOverlay","DrawerContent","DrawerHeader","borderBottom","DrawerCloseButton","DrawerBody","pb","SortedBy","selected","Menu","MenuButton","sortButton","pl","pr","py","MenuList","sortDropdown","MenuItem","sortItem","listViews","PackageCardType","Wide","items","pkg","PackageCard","version","PackageList","memo","_ref$cardView","cardView","loading","Center","Spinner","View","displayName","SearchResults","o","_useCatalogResults","useCatalogResults","page","results","scrollTo","Page","title","description","pageName","px","lg","Box","Search","Grid","gap","templateColumns","templateRows"],"sourceRoot":""}