construct-hub-webapp 0.1.1469 → 0.1.1470

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 (410) hide show
  1. package/build/asset-manifest.json +9 -9
  2. package/build/index.html +1 -1
  3. package/build/static/js/{294.61480951.chunk.js → 294.735eb9dd.chunk.js} +2 -2
  4. package/build/static/js/294.735eb9dd.chunk.js.map +1 -0
  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.06d969b9.chunk.js +2 -0
  9. package/build/static/js/421.06d969b9.chunk.js.map +1 -0
  10. package/build/static/js/451.916d6ace.chunk.js.map +1 -1
  11. package/build/static/js/453.13ac0f49.chunk.js.map +1 -1
  12. package/build/static/js/487.c94daaad.chunk.js +3 -0
  13. package/build/static/js/487.c94daaad.chunk.js.map +1 -0
  14. package/build/static/js/496.2a6b6f6f.chunk.js.map +1 -1
  15. package/build/static/js/516.87cad50a.chunk.js.map +1 -1
  16. package/build/static/js/591.6b31b86a.chunk.js.map +1 -1
  17. package/build/static/js/619.1a7deb33.chunk.js.map +1 -1
  18. package/build/static/js/773.279948f6.chunk.js.map +1 -1
  19. package/build/static/js/8.75aab01d.chunk.js.map +1 -1
  20. package/build/static/js/857.8e026699.chunk.js.map +1 -1
  21. package/build/static/js/959.abcce3a0.chunk.js.map +1 -1
  22. package/build/static/js/main.9e6b2567.js +3 -0
  23. package/build/static/js/main.9e6b2567.js.map +1 -0
  24. package/package.json +5 -8
  25. package/build/static/js/294.61480951.chunk.js.map +0 -1
  26. package/build/static/js/421.89f85fcb.chunk.js +0 -2
  27. package/build/static/js/421.89f85fcb.chunk.js.map +0 -1
  28. package/build/static/js/487.d7ec3dbe.chunk.js +0 -3
  29. package/build/static/js/487.d7ec3dbe.chunk.js.map +0 -1
  30. package/build/static/js/main.6b38d083.js +0 -3
  31. package/build/static/js/main.6b38d083.js.map +0 -1
  32. package/coverage/clover.xml +0 -3236
  33. package/coverage/coverage-final.json +0 -293
  34. package/coverage/lcov-report/base.css +0 -224
  35. package/coverage/lcov-report/block-navigation.js +0 -87
  36. package/coverage/lcov-report/favicon.png +0 -0
  37. package/coverage/lcov-report/index.html +0 -1211
  38. package/coverage/lcov-report/prettify.css +0 -1
  39. package/coverage/lcov-report/prettify.js +0 -2
  40. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  41. package/coverage/lcov-report/sorter.js +0 -210
  42. package/coverage/lcov-report/src/App.tsx.html +0 -214
  43. package/coverage/lcov-report/src/api/catalog-search/catalog-search.ts.html +0 -1300
  44. package/coverage/lcov-report/src/api/catalog-search/constants.ts.html +0 -112
  45. package/coverage/lcov-report/src/api/catalog-search/index.html +0 -161
  46. package/coverage/lcov-report/src/api/catalog-search/index.ts.html +0 -88
  47. package/coverage/lcov-report/src/api/catalog-search/util.ts.html +0 -688
  48. package/coverage/lcov-report/src/api/config/index.html +0 -116
  49. package/coverage/lcov-report/src/api/config/index.ts.html +0 -517
  50. package/coverage/lcov-report/src/api/package/assembly.ts.html +0 -178
  51. package/coverage/lcov-report/src/api/package/docs.ts.html +0 -334
  52. package/coverage/lcov-report/src/api/package/index.html +0 -176
  53. package/coverage/lcov-report/src/api/package/metadata.ts.html +0 -265
  54. package/coverage/lcov-report/src/api/package/packages.ts.html +0 -232
  55. package/coverage/lcov-report/src/api/package/util.ts.html +0 -214
  56. package/coverage/lcov-report/src/api/stats/index.html +0 -116
  57. package/coverage/lcov-report/src/api/stats/index.ts.html +0 -193
  58. package/coverage/lcov-report/src/api/versions/index.html +0 -116
  59. package/coverage/lcov-report/src/api/versions/index.ts.html +0 -172
  60. package/coverage/lcov-report/src/components/CDKType/CDKType.tsx.html +0 -400
  61. package/coverage/lcov-report/src/components/CDKType/index.html +0 -131
  62. package/coverage/lcov-report/src/components/CDKType/index.ts.html +0 -88
  63. package/coverage/lcov-report/src/components/Card/Card.tsx.html +0 -151
  64. package/coverage/lcov-report/src/components/Card/index.html +0 -131
  65. package/coverage/lcov-report/src/components/Card/index.ts.html +0 -88
  66. package/coverage/lcov-report/src/components/Code/Code.tsx.html +0 -223
  67. package/coverage/lcov-report/src/components/Code/MultiLineRenderer.tsx.html +0 -202
  68. package/coverage/lcov-report/src/components/Code/SingleLineRenderer.tsx.html +0 -163
  69. package/coverage/lcov-report/src/components/Code/index.html +0 -176
  70. package/coverage/lcov-report/src/components/Code/index.ts.html +0 -88
  71. package/coverage/lcov-report/src/components/Code/types.ts.html +0 -112
  72. package/coverage/lcov-report/src/components/CopyButton/CopyButton.tsx.html +0 -199
  73. package/coverage/lcov-report/src/components/CopyButton/index.html +0 -131
  74. package/coverage/lcov-report/src/components/CopyButton/index.ts.html +0 -88
  75. package/coverage/lcov-report/src/components/ExternalLink/ExternalLink.tsx.html +0 -286
  76. package/coverage/lcov-report/src/components/ExternalLink/index.html +0 -131
  77. package/coverage/lcov-report/src/components/ExternalLink/index.ts.html +0 -88
  78. package/coverage/lcov-report/src/components/FAQ/FAQ.tsx.html +0 -112
  79. package/coverage/lcov-report/src/components/FAQ/FAQHeading.tsx.html +0 -115
  80. package/coverage/lcov-report/src/components/FAQ/FAQItem.tsx.html +0 -202
  81. package/coverage/lcov-report/src/components/FAQ/FAQLink.tsx.html +0 -145
  82. package/coverage/lcov-report/src/components/FAQ/FAQSection.tsx.html +0 -193
  83. package/coverage/lcov-report/src/components/FAQ/FAQSections.tsx.html +0 -118
  84. package/coverage/lcov-report/src/components/FAQ/index.html +0 -206
  85. package/coverage/lcov-report/src/components/FAQ/index.ts.html +0 -103
  86. package/coverage/lcov-report/src/components/Footer/Footer.tsx.html +0 -406
  87. package/coverage/lcov-report/src/components/Footer/constants.ts.html +0 -202
  88. package/coverage/lcov-report/src/components/Footer/index.html +0 -161
  89. package/coverage/lcov-report/src/components/Footer/index.ts.html +0 -88
  90. package/coverage/lcov-report/src/components/Footer/testIds.ts.html +0 -121
  91. package/coverage/lcov-report/src/components/Form/Form.tsx.html +0 -112
  92. package/coverage/lcov-report/src/components/Form/index.html +0 -131
  93. package/coverage/lcov-report/src/components/Form/index.ts.html +0 -88
  94. package/coverage/lcov-report/src/components/Header/DocumentationDropdown.tsx.html +0 -160
  95. package/coverage/lcov-report/src/components/Header/GettingStartedDropdown.tsx.html +0 -160
  96. package/coverage/lcov-report/src/components/Header/Header.tsx.html +0 -349
  97. package/coverage/lcov-report/src/components/Header/HeaderSearch.tsx.html +0 -229
  98. package/coverage/lcov-report/src/components/Header/MobileNav.tsx.html +0 -319
  99. package/coverage/lcov-report/src/components/Header/MobileNavLinks.tsx.html +0 -487
  100. package/coverage/lcov-report/src/components/Header/NavButton.tsx.html +0 -184
  101. package/coverage/lcov-report/src/components/Header/Title.tsx.html +0 -133
  102. package/coverage/lcov-report/src/components/Header/constants.ts.html +0 -220
  103. package/coverage/lcov-report/src/components/Header/index.html +0 -266
  104. package/coverage/lcov-report/src/components/Header/index.ts.html +0 -88
  105. package/coverage/lcov-report/src/components/Header/testIds.ts.html +0 -136
  106. package/coverage/lcov-report/src/components/Highlight/Highlight.tsx.html +0 -157
  107. package/coverage/lcov-report/src/components/Highlight/index.html +0 -131
  108. package/coverage/lcov-report/src/components/Highlight/index.ts.html +0 -88
  109. package/coverage/lcov-report/src/components/LanguageSupportTooltip/LanguageSupportTooltip.tsx.html +0 -169
  110. package/coverage/lcov-report/src/components/LanguageSupportTooltip/index.html +0 -131
  111. package/coverage/lcov-report/src/components/LanguageSupportTooltip/index.ts.html +0 -88
  112. package/coverage/lcov-report/src/components/LazyRoute/LazyRoute.tsx.html +0 -181
  113. package/coverage/lcov-report/src/components/LazyRoute/index.html +0 -131
  114. package/coverage/lcov-report/src/components/LazyRoute/index.ts.html +0 -88
  115. package/coverage/lcov-report/src/components/LicenseLink/LicenseLink.tsx.html +0 -160
  116. package/coverage/lcov-report/src/components/LicenseLink/index.html +0 -131
  117. package/coverage/lcov-report/src/components/LicenseLink/index.ts.html +0 -88
  118. package/coverage/lcov-report/src/components/Markdown/Code.tsx.html +0 -190
  119. package/coverage/lcov-report/src/components/Markdown/Headings.tsx.html +0 -427
  120. package/coverage/lcov-report/src/components/Markdown/Hr.tsx.html +0 -118
  121. package/coverage/lcov-report/src/components/Markdown/Img.tsx.html +0 -103
  122. package/coverage/lcov-report/src/components/Markdown/List.tsx.html +0 -172
  123. package/coverage/lcov-report/src/components/Markdown/Markdown.tsx.html +0 -523
  124. package/coverage/lcov-report/src/components/Markdown/Table.tsx.html +0 -145
  125. package/coverage/lcov-report/src/components/Markdown/Text.tsx.html +0 -388
  126. package/coverage/lcov-report/src/components/Markdown/index.html +0 -251
  127. package/coverage/lcov-report/src/components/Markdown/index.ts.html +0 -88
  128. package/coverage/lcov-report/src/components/Markdown/testIds.ts.html +0 -94
  129. package/coverage/lcov-report/src/components/NavLink/NavLink.tsx.html +0 -112
  130. package/coverage/lcov-report/src/components/NavLink/index.html +0 -131
  131. package/coverage/lcov-report/src/components/NavLink/index.ts.html +0 -88
  132. package/coverage/lcov-report/src/components/NavPopover/NavPopover.tsx.html +0 -130
  133. package/coverage/lcov-report/src/components/NavPopover/NavPopoverContent.tsx.html +0 -322
  134. package/coverage/lcov-report/src/components/NavPopover/NavPopoverTrigger.tsx.html +0 -163
  135. package/coverage/lcov-report/src/components/NavPopover/index.html +0 -176
  136. package/coverage/lcov-report/src/components/NavPopover/index.ts.html +0 -97
  137. package/coverage/lcov-report/src/components/NavPopover/types.ts.html +0 -121
  138. package/coverage/lcov-report/src/components/NavTree/NavItem.tsx.html +0 -481
  139. package/coverage/lcov-report/src/components/NavTree/NavItemWrapper.tsx.html +0 -232
  140. package/coverage/lcov-report/src/components/NavTree/NavTree.tsx.html +0 -211
  141. package/coverage/lcov-report/src/components/NavTree/index.html +0 -176
  142. package/coverage/lcov-report/src/components/NavTree/index.ts.html +0 -94
  143. package/coverage/lcov-report/src/components/NavTree/types.ts.html +0 -154
  144. package/coverage/lcov-report/src/components/PackageCard/Details.tsx.html +0 -331
  145. package/coverage/lcov-report/src/components/PackageCard/EditorsNote.tsx.html +0 -148
  146. package/coverage/lcov-report/src/components/PackageCard/Heading.tsx.html +0 -307
  147. package/coverage/lcov-report/src/components/PackageCard/Highlight.tsx.html +0 -139
  148. package/coverage/lcov-report/src/components/PackageCard/Languages.tsx.html +0 -109
  149. package/coverage/lcov-report/src/components/PackageCard/PackageCard.tsx.html +0 -178
  150. package/coverage/lcov-report/src/components/PackageCard/Tags.tsx.html +0 -163
  151. package/coverage/lcov-report/src/components/PackageCard/WideCard.tsx.html +0 -304
  152. package/coverage/lcov-report/src/components/PackageCard/constants.ts.html +0 -94
  153. package/coverage/lcov-report/src/components/PackageCard/index.html +0 -266
  154. package/coverage/lcov-report/src/components/PackageCard/index.ts.html +0 -94
  155. package/coverage/lcov-report/src/components/PackageCard/testIds.ts.html +0 -130
  156. package/coverage/lcov-report/src/components/PackageLanguages/PackageLanguages.tsx.html +0 -340
  157. package/coverage/lcov-report/src/components/PackageLanguages/index.html +0 -131
  158. package/coverage/lcov-report/src/components/PackageLanguages/index.ts.html +0 -88
  159. package/coverage/lcov-report/src/components/PackageList/PackageList.tsx.html +0 -214
  160. package/coverage/lcov-report/src/components/PackageList/WideCardList.tsx.html +0 -151
  161. package/coverage/lcov-report/src/components/PackageList/index.html +0 -146
  162. package/coverage/lcov-report/src/components/PackageList/index.ts.html +0 -88
  163. package/coverage/lcov-report/src/components/PackageTag/PackageTag.tsx.html +0 -190
  164. package/coverage/lcov-report/src/components/PackageTag/index.html +0 -131
  165. package/coverage/lcov-report/src/components/PackageTag/index.ts.html +0 -88
  166. package/coverage/lcov-report/src/components/Page/Page.tsx.html +0 -289
  167. package/coverage/lcov-report/src/components/Page/index.html +0 -131
  168. package/coverage/lcov-report/src/components/Page/index.ts.html +0 -88
  169. package/coverage/lcov-report/src/components/PageLoader/PageLoader.tsx.html +0 -109
  170. package/coverage/lcov-report/src/components/PageLoader/index.html +0 -131
  171. package/coverage/lcov-report/src/components/PageLoader/index.ts.html +0 -88
  172. package/coverage/lcov-report/src/components/Picture/Picture.tsx.html +0 -154
  173. package/coverage/lcov-report/src/components/Picture/index.html +0 -131
  174. package/coverage/lcov-report/src/components/Picture/index.ts.html +0 -88
  175. package/coverage/lcov-report/src/components/SearchBar/SearchBar.tsx.html +0 -706
  176. package/coverage/lcov-report/src/components/SearchBar/SearchOverlay.tsx.html +0 -184
  177. package/coverage/lcov-report/src/components/SearchBar/SearchSuggestions.tsx.html +0 -394
  178. package/coverage/lcov-report/src/components/SearchBar/index.html +0 -176
  179. package/coverage/lcov-report/src/components/SearchBar/index.ts.html +0 -97
  180. package/coverage/lcov-report/src/components/SearchBar/testIds.ts.html +0 -115
  181. package/coverage/lcov-report/src/components/SearchItem/SearchItem.tsx.html +0 -217
  182. package/coverage/lcov-report/src/components/SearchItem/index.html +0 -131
  183. package/coverage/lcov-report/src/components/SearchItem/index.ts.html +0 -88
  184. package/coverage/lcov-report/src/components/SearchModal/SearchModal.tsx.html +0 -286
  185. package/coverage/lcov-report/src/components/SearchModal/index.html +0 -146
  186. package/coverage/lcov-report/src/components/SearchModal/index.ts.html +0 -88
  187. package/coverage/lcov-report/src/components/SearchModal/testIds.ts.html +0 -100
  188. package/coverage/lcov-report/src/components/Time/Time.tsx.html +0 -151
  189. package/coverage/lcov-report/src/components/Time/index.html +0 -131
  190. package/coverage/lcov-report/src/components/Time/index.ts.html +0 -88
  191. package/coverage/lcov-report/src/constants/constructs.ts.html +0 -163
  192. package/coverage/lcov-report/src/constants/dates.ts.html +0 -94
  193. package/coverage/lcov-report/src/constants/index.html +0 -206
  194. package/coverage/lcov-report/src/constants/keywords.ts.html +0 -124
  195. package/coverage/lcov-report/src/constants/languages.ts.html +0 -319
  196. package/coverage/lcov-report/src/constants/links.ts.html +0 -310
  197. package/coverage/lcov-report/src/constants/pageInfo.ts.html +0 -205
  198. package/coverage/lcov-report/src/constants/url.ts.html +0 -193
  199. package/coverage/lcov-report/src/contexts/Analytics/Analytics.tsx.html +0 -367
  200. package/coverage/lcov-report/src/contexts/Analytics/index.html +0 -176
  201. package/coverage/lcov-report/src/contexts/Analytics/index.ts.html +0 -97
  202. package/coverage/lcov-report/src/contexts/Analytics/types.ts.html +0 -181
  203. package/coverage/lcov-report/src/contexts/Analytics/usePageView.ts.html +0 -190
  204. package/coverage/lcov-report/src/contexts/Analytics/util.ts.html +0 -121
  205. package/coverage/lcov-report/src/contexts/Config/Config.tsx.html +0 -199
  206. package/coverage/lcov-report/src/contexts/Config/index.html +0 -131
  207. package/coverage/lcov-report/src/contexts/Config/index.ts.html +0 -88
  208. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/ExternalLinkWarning.tsx.html +0 -313
  209. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/ExternalLinkWarningModal.tsx.html +0 -445
  210. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/constants.ts.html +0 -127
  211. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/index.html +0 -161
  212. package/coverage/lcov-report/src/contexts/ExternalLinkWarning/index.ts.html +0 -88
  213. package/coverage/lcov-report/src/contexts/Search/Search.tsx.html +0 -181
  214. package/coverage/lcov-report/src/contexts/Search/index.html +0 -131
  215. package/coverage/lcov-report/src/contexts/Search/index.ts.html +0 -88
  216. package/coverage/lcov-report/src/contexts/Shortbread/Shortbread.tsx.html +0 -229
  217. package/coverage/lcov-report/src/contexts/Shortbread/index.html +0 -131
  218. package/coverage/lcov-report/src/contexts/Shortbread/index.ts.html +0 -88
  219. package/coverage/lcov-report/src/contexts/Theme.tsx.html +0 -148
  220. package/coverage/lcov-report/src/contexts/index.html +0 -116
  221. package/coverage/lcov-report/src/hooks/useCatalog/index.html +0 -131
  222. package/coverage/lcov-report/src/hooks/useCatalog/index.ts.html +0 -88
  223. package/coverage/lcov-report/src/hooks/useCatalog/useCatalog.ts.html +0 -127
  224. package/coverage/lcov-report/src/hooks/useCatalogResults/index.html +0 -131
  225. package/coverage/lcov-report/src/hooks/useCatalogResults/index.ts.html +0 -88
  226. package/coverage/lcov-report/src/hooks/useCatalogResults/useCatalogResults.ts.html +0 -277
  227. package/coverage/lcov-report/src/hooks/useCatalogSearch/index.html +0 -131
  228. package/coverage/lcov-report/src/hooks/useCatalogSearch/index.ts.html +0 -88
  229. package/coverage/lcov-report/src/hooks/useCatalogSearch/useCatalogSearch.ts.html +0 -673
  230. package/coverage/lcov-report/src/hooks/useConfigValue/index.html +0 -131
  231. package/coverage/lcov-report/src/hooks/useConfigValue/index.ts.html +0 -88
  232. package/coverage/lcov-report/src/hooks/useConfigValue/useConfigValue.ts.html +0 -106
  233. package/coverage/lcov-report/src/hooks/useDebounce/index.html +0 -131
  234. package/coverage/lcov-report/src/hooks/useDebounce/index.ts.html +0 -88
  235. package/coverage/lcov-report/src/hooks/useDebounce/useDebounce.ts.html +0 -172
  236. package/coverage/lcov-report/src/hooks/useHistoryState/index.html +0 -131
  237. package/coverage/lcov-report/src/hooks/useHistoryState/index.ts.html +0 -88
  238. package/coverage/lcov-report/src/hooks/useHistoryState/useHistoryState.ts.html +0 -157
  239. package/coverage/lcov-report/src/hooks/useLanguage/index.html +0 -131
  240. package/coverage/lcov-report/src/hooks/useLanguage/index.ts.html +0 -88
  241. package/coverage/lcov-report/src/hooks/useLanguage/useLanguage.ts.html +0 -352
  242. package/coverage/lcov-report/src/hooks/usePagination/index.html +0 -131
  243. package/coverage/lcov-report/src/hooks/usePagination/index.ts.html +0 -88
  244. package/coverage/lcov-report/src/hooks/usePagination/usePagination.ts.html +0 -190
  245. package/coverage/lcov-report/src/hooks/useQueryParams/index.html +0 -131
  246. package/coverage/lcov-report/src/hooks/useQueryParams/index.ts.html +0 -88
  247. package/coverage/lcov-report/src/hooks/useQueryParams/useQueryParams.ts.html +0 -109
  248. package/coverage/lcov-report/src/hooks/useSearch/index.html +0 -131
  249. package/coverage/lcov-report/src/hooks/useSearch/index.ts.html +0 -88
  250. package/coverage/lcov-report/src/hooks/useSearch/useSearch.ts.html +0 -196
  251. package/coverage/lcov-report/src/hooks/useStats/index.html +0 -131
  252. package/coverage/lcov-report/src/hooks/useStats/index.ts.html +0 -88
  253. package/coverage/lcov-report/src/hooks/useStats/useStats.ts.html +0 -112
  254. package/coverage/lcov-report/src/hooks/useVersions/index.html +0 -131
  255. package/coverage/lcov-report/src/hooks/useVersions/index.ts.html +0 -88
  256. package/coverage/lcov-report/src/hooks/useVersions/useVersions.ts.html +0 -112
  257. package/coverage/lcov-report/src/icons/AWSIcon.tsx.html +0 -295
  258. package/coverage/lcov-report/src/icons/DatadogIcon.tsx.html +0 -412
  259. package/coverage/lcov-report/src/icons/DotNetIcon.tsx.html +0 -148
  260. package/coverage/lcov-report/src/icons/DukeIcon.tsx.html +0 -214
  261. package/coverage/lcov-report/src/icons/GithubIcon.tsx.html +0 -133
  262. package/coverage/lcov-report/src/icons/GoIcon.tsx.html +0 -139
  263. package/coverage/lcov-report/src/icons/MongoDBIcon.tsx.html +0 -139
  264. package/coverage/lcov-report/src/icons/PythonIcon.tsx.html +0 -244
  265. package/coverage/lcov-report/src/icons/TSIcon.tsx.html +0 -142
  266. package/coverage/lcov-report/src/icons/index.html +0 -236
  267. package/coverage/lcov-report/src/index.html +0 -191
  268. package/coverage/lcov-report/src/index.tsx.html +0 -250
  269. package/coverage/lcov-report/src/lib/shortbread/getLocalStoreWriter.ts.html +0 -148
  270. package/coverage/lcov-report/src/lib/shortbread/index.html +0 -161
  271. package/coverage/lcov-report/src/lib/shortbread/index.ts.html +0 -88
  272. package/coverage/lcov-report/src/lib/shortbread/shortbread.ts.html +0 -343
  273. package/coverage/lcov-report/src/lib/shortbread/source.js.html +0 -91
  274. package/coverage/lcov-report/src/no-op-sw.js.html +0 -109
  275. package/coverage/lcov-report/src/register-service-worker.ts.html +0 -520
  276. package/coverage/lcov-report/src/reportWebVitals.ts.html +0 -133
  277. package/coverage/lcov-report/src/service-worker.ts.html +0 -493
  278. package/coverage/lcov-report/src/theme/components/Checkbox.ts.html +0 -412
  279. package/coverage/lcov-report/src/theme/components/Code.ts.html +0 -136
  280. package/coverage/lcov-report/src/theme/components/Divider.ts.html +0 -103
  281. package/coverage/lcov-report/src/theme/components/Radio.ts.html +0 -289
  282. package/coverage/lcov-report/src/theme/components/Tabs.ts.html +0 -238
  283. package/coverage/lcov-report/src/theme/components/Tag.ts.html +0 -262
  284. package/coverage/lcov-report/src/theme/components/index.html +0 -206
  285. package/coverage/lcov-report/src/theme/components/index.ts.html +0 -157
  286. package/coverage/lcov-report/src/theme/foundations/borders.ts.html +0 -94
  287. package/coverage/lcov-report/src/theme/foundations/colors.ts.html +0 -196
  288. package/coverage/lcov-report/src/theme/foundations/index.html +0 -191
  289. package/coverage/lcov-report/src/theme/foundations/index.ts.html +0 -124
  290. package/coverage/lcov-report/src/theme/foundations/radius.ts.html +0 -94
  291. package/coverage/lcov-report/src/theme/foundations/shadows.ts.html +0 -94
  292. package/coverage/lcov-report/src/theme/foundations/sizes.ts.html +0 -106
  293. package/coverage/lcov-report/src/theme/index.html +0 -116
  294. package/coverage/lcov-report/src/theme/index.ts.html +0 -142
  295. package/coverage/lcov-report/src/types/config.ts.html +0 -142
  296. package/coverage/lcov-report/src/types/index.html +0 -116
  297. package/coverage/lcov-report/src/util/createTestIds.ts.html +0 -133
  298. package/coverage/lcov-report/src/util/css.ts.html +0 -154
  299. package/coverage/lcov-report/src/util/index.html +0 -176
  300. package/coverage/lcov-report/src/util/package.ts.html +0 -328
  301. package/coverage/lcov-report/src/util/sanitize-anchor.ts.html +0 -103
  302. package/coverage/lcov-report/src/util/url.ts.html +0 -439
  303. package/coverage/lcov-report/src/views/Contribute/Contribute.tsx.html +0 -1012
  304. package/coverage/lcov-report/src/views/Contribute/index.html +0 -131
  305. package/coverage/lcov-report/src/views/Contribute/index.ts.html +0 -88
  306. package/coverage/lcov-report/src/views/FAQ/FAQ.tsx.html +0 -1048
  307. package/coverage/lcov-report/src/views/FAQ/index.html +0 -131
  308. package/coverage/lcov-report/src/views/FAQ/index.ts.html +0 -88
  309. package/coverage/lcov-report/src/views/Home/CDKTypeTabs.tsx.html +0 -619
  310. package/coverage/lcov-report/src/views/Home/Categories.tsx.html +0 -376
  311. package/coverage/lcov-report/src/views/Home/Featured.tsx.html +0 -304
  312. package/coverage/lcov-report/src/views/Home/GradientContainer.tsx.html +0 -160
  313. package/coverage/lcov-report/src/views/Home/Hero.tsx.html +0 -217
  314. package/coverage/lcov-report/src/views/Home/Home.tsx.html +0 -223
  315. package/coverage/lcov-report/src/views/Home/Info.tsx.html +0 -631
  316. package/coverage/lcov-report/src/views/Home/InfoSection.tsx.html +0 -202
  317. package/coverage/lcov-report/src/views/Home/PackageGrid.tsx.html +0 -166
  318. package/coverage/lcov-report/src/views/Home/constants.ts.html +0 -163
  319. package/coverage/lcov-report/src/views/Home/index.html +0 -296
  320. package/coverage/lcov-report/src/views/Home/index.ts.html +0 -88
  321. package/coverage/lcov-report/src/views/Home/testIds.ts.html +0 -172
  322. package/coverage/lcov-report/src/views/Home/useSection.ts.html +0 -247
  323. package/coverage/lcov-report/src/views/NotFound/NotFound.tsx.html +0 -226
  324. package/coverage/lcov-report/src/views/NotFound/index.html +0 -131
  325. package/coverage/lcov-report/src/views/NotFound/index.ts.html +0 -91
  326. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/ChooseSubmodule.tsx.html +0 -430
  327. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/SearchInput.tsx.html +0 -217
  328. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/SearchModal.tsx.html +0 -397
  329. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/index.html +0 -161
  330. package/coverage/lcov-report/src/views/Package/ChooseSubmodule/index.ts.html +0 -88
  331. package/coverage/lcov-report/src/views/Package/DependenciesList.tsx.html +0 -229
  332. package/coverage/lcov-report/src/views/Package/DocsError.tsx.html +0 -127
  333. package/coverage/lcov-report/src/views/Package/FeedbackLinks.tsx.html +0 -409
  334. package/coverage/lcov-report/src/views/Package/LanguageBar.tsx.html +0 -334
  335. package/coverage/lcov-report/src/views/Package/LanguageSelection.tsx.html +0 -217
  336. package/coverage/lcov-report/src/views/Package/NavDrawer.tsx.html +0 -310
  337. package/coverage/lcov-report/src/views/Package/Package.tsx.html +0 -118
  338. package/coverage/lcov-report/src/views/Package/PackageDocs.tsx.html +0 -478
  339. package/coverage/lcov-report/src/views/Package/PackageDocsError.tsx.html +0 -151
  340. package/coverage/lcov-report/src/views/Package/PackageDocsUnsupported.tsx.html +0 -133
  341. package/coverage/lcov-report/src/views/Package/PackageHeader/Details.tsx.html +0 -730
  342. package/coverage/lcov-report/src/views/Package/PackageHeader/HeaderContainer.tsx.html +0 -196
  343. package/coverage/lcov-report/src/views/Package/PackageHeader/Heading.tsx.html +0 -388
  344. package/coverage/lcov-report/src/views/Package/PackageHeader/Install.tsx.html +0 -448
  345. package/coverage/lcov-report/src/views/Package/PackageHeader/PackageHeader.tsx.html +0 -220
  346. package/coverage/lcov-report/src/views/Package/PackageHeader/SelectVersion.tsx.html +0 -340
  347. package/coverage/lcov-report/src/views/Package/PackageHeader/ToggleButton.tsx.html +0 -163
  348. package/coverage/lcov-report/src/views/Package/PackageHeader/index.html +0 -221
  349. package/coverage/lcov-report/src/views/Package/PackageHeader/index.ts.html +0 -88
  350. package/coverage/lcov-report/src/views/Package/PackageLayout.tsx.html +0 -325
  351. package/coverage/lcov-report/src/views/Package/PackageReadme.tsx.html +0 -157
  352. package/coverage/lcov-report/src/views/Package/PackageState.tsx.html +0 -589
  353. package/coverage/lcov-report/src/views/Package/PackageTypeDocs.tsx.html +0 -220
  354. package/coverage/lcov-report/src/views/Package/PrimaryDocNavigation.tsx.html +0 -244
  355. package/coverage/lcov-report/src/views/Package/SecondaryDocNavigation.tsx.html +0 -295
  356. package/coverage/lcov-report/src/views/Package/ShareInfo.tsx.html +0 -316
  357. package/coverage/lcov-report/src/views/Package/StickyNavContainer.tsx.html +0 -151
  358. package/coverage/lcov-report/src/views/Package/constants.ts.html +0 -217
  359. package/coverage/lcov-report/src/views/Package/index.html +0 -431
  360. package/coverage/lcov-report/src/views/Package/index.ts.html +0 -88
  361. package/coverage/lcov-report/src/views/Package/testIds.ts.html +0 -139
  362. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/index.html +0 -146
  363. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/index.ts.html +0 -91
  364. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/useIntersectingHeader.ts.html +0 -424
  365. package/coverage/lcov-report/src/views/Package/useIntersectingHeader/util.ts.html +0 -148
  366. package/coverage/lcov-report/src/views/Package/useSectionItems/index.html +0 -146
  367. package/coverage/lcov-report/src/views/Package/useSectionItems/index.ts.html +0 -88
  368. package/coverage/lcov-report/src/views/Package/useSectionItems/useSectionItems.ts.html +0 -256
  369. package/coverage/lcov-report/src/views/Package/useSectionItems/util.ts.html +0 -463
  370. package/coverage/lcov-report/src/views/Package/util.ts.html +0 -820
  371. package/coverage/lcov-report/src/views/PackageLatest/PackageLatest.tsx.html +0 -214
  372. package/coverage/lcov-report/src/views/PackageLatest/index.html +0 -131
  373. package/coverage/lcov-report/src/views/PackageLatest/index.ts.html +0 -88
  374. package/coverage/lcov-report/src/views/Packages/Packages.tsx.html +0 -178
  375. package/coverage/lcov-report/src/views/Packages/index.html +0 -131
  376. package/coverage/lcov-report/src/views/Packages/index.ts.html +0 -88
  377. package/coverage/lcov-report/src/views/Random/Random.tsx.html +0 -181
  378. package/coverage/lcov-report/src/views/Random/index.html +0 -131
  379. package/coverage/lcov-report/src/views/Random/index.ts.html +0 -88
  380. package/coverage/lcov-report/src/views/Search/ArrowButton.tsx.html +0 -187
  381. package/coverage/lcov-report/src/views/Search/CDKFilter.tsx.html +0 -409
  382. package/coverage/lcov-report/src/views/Search/CheckboxFilter.tsx.html +0 -577
  383. package/coverage/lcov-report/src/views/Search/FilterHeading.tsx.html +0 -283
  384. package/coverage/lcov-report/src/views/Search/FilterPanel.tsx.html +0 -229
  385. package/coverage/lcov-report/src/views/Search/GoToPage.tsx.html +0 -295
  386. package/coverage/lcov-report/src/views/Search/KeywordsFilter.tsx.html +0 -247
  387. package/coverage/lcov-report/src/views/Search/LanguageFilter.tsx.html +0 -250
  388. package/coverage/lcov-report/src/views/Search/PageControls.tsx.html +0 -259
  389. package/coverage/lcov-report/src/views/Search/RadioFilter.tsx.html +0 -253
  390. package/coverage/lcov-report/src/views/Search/Search.tsx.html +0 -190
  391. package/coverage/lcov-report/src/views/Search/SearchBar.tsx.html +0 -172
  392. package/coverage/lcov-report/src/views/Search/SearchDetails.tsx.html +0 -301
  393. package/coverage/lcov-report/src/views/Search/SearchResults.tsx.html +0 -421
  394. package/coverage/lcov-report/src/views/Search/SortAndFilterDrawer.tsx.html +0 -268
  395. package/coverage/lcov-report/src/views/Search/SortFilter.tsx.html +0 -184
  396. package/coverage/lcov-report/src/views/Search/SortedBy.tsx.html +0 -289
  397. package/coverage/lcov-report/src/views/Search/TagFilter.tsx.html +0 -523
  398. package/coverage/lcov-report/src/views/Search/constants.ts.html +0 -163
  399. package/coverage/lcov-report/src/views/Search/index.html +0 -461
  400. package/coverage/lcov-report/src/views/Search/index.ts.html +0 -88
  401. package/coverage/lcov-report/src/views/Search/testIds.ts.html +0 -145
  402. package/coverage/lcov-report/src/views/Search/useSearchParam.ts.html +0 -313
  403. package/coverage/lcov-report/src/views/Search/useUpdateSearchParam.ts.html +0 -154
  404. package/coverage/lcov-report/src/views/Search/util.ts.html +0 -226
  405. package/coverage/lcov-report/src/views/SiteTerms/SiteTerms.tsx.html +0 -301
  406. package/coverage/lcov-report/src/views/SiteTerms/index.html +0 -131
  407. package/coverage/lcov-report/src/views/SiteTerms/index.ts.html +0 -88
  408. package/coverage/lcov.info +0 -8098
  409. /package/build/static/js/{487.d7ec3dbe.chunk.js.LICENSE.txt → 487.c94daaad.chunk.js.LICENSE.txt} +0 -0
  410. /package/build/static/js/{main.6b38d083.js.LICENSE.txt → main.9e6b2567.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
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":""}
1
+ {"version":3,"file":"static/js/773.028ffdf6.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":""}