@internetarchive/collection-browser 2.7.12-alpha-webdev7322.5 → 2.7.12-alpha-webdev7262.0

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 (320) hide show
  1. package/.editorconfig +29 -29
  2. package/.husky/pre-commit +4 -4
  3. package/LICENSE +661 -661
  4. package/README.md +83 -83
  5. package/dist/index.d.ts +13 -13
  6. package/dist/index.js +13 -13
  7. package/dist/src/app-root.d.ts +107 -107
  8. package/dist/src/app-root.js +531 -531
  9. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  10. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  11. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  12. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  13. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  14. package/dist/src/assets/img/icons/chevron.js +2 -2
  15. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  16. package/dist/src/assets/img/icons/contract.js +2 -2
  17. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  18. package/dist/src/assets/img/icons/empty-query.js +2 -2
  19. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  20. package/dist/src/assets/img/icons/expand.js +2 -2
  21. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  23. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye.js +2 -2
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  26. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  27. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  28. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  29. package/dist/src/assets/img/icons/filter.d.ts +2 -2
  30. package/dist/src/assets/img/icons/filter.js +2 -2
  31. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  32. package/dist/src/assets/img/icons/login-required.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  59. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  60. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  61. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  62. package/dist/src/assets/img/icons/null-result.js +2 -2
  63. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  64. package/dist/src/assets/img/icons/restricted.js +2 -2
  65. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  66. package/dist/src/assets/img/icons/reviews.js +2 -2
  67. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  68. package/dist/src/assets/img/icons/upload.js +2 -2
  69. package/dist/src/assets/img/icons/views.d.ts +1 -1
  70. package/dist/src/assets/img/icons/views.js +2 -2
  71. package/dist/src/circular-activity-indicator.d.ts +5 -5
  72. package/dist/src/circular-activity-indicator.js +17 -17
  73. package/dist/src/collection-browser.d.ts +606 -606
  74. package/dist/src/collection-browser.js +1679 -1677
  75. package/dist/src/collection-browser.js.map +1 -1
  76. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  77. package/dist/src/collection-facets/facet-row.js +118 -118
  78. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  79. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  80. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  81. package/dist/src/collection-facets/facets-template.js +44 -44
  82. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  83. package/dist/src/collection-facets/more-facets-content.js +407 -407
  84. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  85. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  86. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
  87. package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
  88. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
  89. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
  90. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
  91. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
  92. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
  93. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
  94. package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
  95. package/dist/src/collection-facets/smart-facets/models.js +1 -1
  96. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
  97. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +240 -240
  98. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
  99. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
  100. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
  101. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
  102. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
  103. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
  104. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
  105. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
  106. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  107. package/dist/src/collection-facets/toggle-switch.js +94 -94
  108. package/dist/src/collection-facets.d.ts +103 -103
  109. package/dist/src/collection-facets.js +522 -522
  110. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +245 -245
  111. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  112. package/dist/src/data-source/collection-browser-data-source.d.ts +377 -377
  113. package/dist/src/data-source/collection-browser-data-source.js +1011 -1001
  114. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  115. package/dist/src/data-source/collection-browser-query-state.d.ts +44 -44
  116. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  117. package/dist/src/data-source/models.d.ts +28 -28
  118. package/dist/src/data-source/models.js +8 -8
  119. package/dist/src/empty-placeholder.d.ts +23 -23
  120. package/dist/src/empty-placeholder.js +79 -79
  121. package/dist/src/expanded-date-picker.d.ts +43 -43
  122. package/dist/src/expanded-date-picker.js +109 -109
  123. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  124. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  125. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  126. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  127. package/dist/src/manage/manage-bar.d.ts +58 -58
  128. package/dist/src/manage/manage-bar.js +159 -159
  129. package/dist/src/manage/remove-items-modal-content.d.ts +9 -9
  130. package/dist/src/manage/remove-items-modal-content.js +34 -34
  131. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  132. package/dist/src/mediatype/mediatype-config.js +91 -91
  133. package/dist/src/models.d.ts +228 -228
  134. package/dist/src/models.js +401 -401
  135. package/dist/src/restoration-state-handler.d.ts +70 -70
  136. package/dist/src/restoration-state-handler.js +363 -363
  137. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  138. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  139. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  140. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  141. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  142. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  143. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  144. package/dist/src/sort-filter-bar/img/list.js +2 -2
  145. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  146. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  147. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  148. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  149. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  150. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  151. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  152. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  153. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  154. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  155. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
  156. package/dist/src/sort-filter-bar/sort-filter-bar.js +697 -697
  157. package/dist/src/styles/ia-button.d.ts +2 -2
  158. package/dist/src/styles/ia-button.js +17 -17
  159. package/dist/src/styles/item-image-styles.d.ts +8 -8
  160. package/dist/src/styles/item-image-styles.js +9 -9
  161. package/dist/src/styles/sr-only.d.ts +1 -1
  162. package/dist/src/styles/sr-only.js +2 -2
  163. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  164. package/dist/src/tiles/base-tile-component.js +64 -64
  165. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  166. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  167. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  168. package/dist/src/tiles/grid/account-tile.js +72 -72
  169. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  170. package/dist/src/tiles/grid/collection-tile.js +80 -80
  171. package/dist/src/tiles/grid/item-tile.d.ts +34 -34
  172. package/dist/src/tiles/grid/item-tile.js +158 -158
  173. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  174. package/dist/src/tiles/grid/search-tile.js +51 -51
  175. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  176. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  177. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  178. package/dist/src/tiles/grid/tile-stats.js +53 -53
  179. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  180. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  181. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  182. package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
  183. package/dist/src/tiles/image-block.d.ts +18 -18
  184. package/dist/src/tiles/image-block.js +89 -89
  185. package/dist/src/tiles/item-image.d.ts +39 -39
  186. package/dist/src/tiles/item-image.js +154 -154
  187. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  188. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  189. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
  190. package/dist/src/tiles/list/tile-list-compact.js +122 -122
  191. package/dist/src/tiles/list/tile-list.d.ts +54 -54
  192. package/dist/src/tiles/list/tile-list.js +323 -323
  193. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  194. package/dist/src/tiles/mediatype-icon.js +47 -47
  195. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
  196. package/dist/src/tiles/overlay/icon-overlay.js +25 -25
  197. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
  198. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  199. package/dist/src/tiles/review-block.d.ts +12 -12
  200. package/dist/src/tiles/review-block.js +56 -56
  201. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  202. package/dist/src/tiles/text-snippet-block.js +73 -73
  203. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  204. package/dist/src/tiles/tile-dispatcher.js +230 -230
  205. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  206. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  207. package/dist/src/utils/analytics-events.d.ts +28 -28
  208. package/dist/src/utils/analytics-events.js +30 -30
  209. package/dist/src/utils/array-equals.d.ts +4 -4
  210. package/dist/src/utils/array-equals.js +10 -10
  211. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  212. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  213. package/dist/src/utils/facet-utils.d.ts +83 -83
  214. package/dist/src/utils/facet-utils.js +145 -145
  215. package/dist/src/utils/format-count.d.ts +7 -7
  216. package/dist/src/utils/format-count.js +76 -76
  217. package/dist/src/utils/format-date.d.ts +2 -2
  218. package/dist/src/utils/format-date.js +27 -27
  219. package/dist/src/utils/format-unit-size.d.ts +2 -2
  220. package/dist/src/utils/format-unit-size.js +33 -33
  221. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  222. package/dist/src/utils/local-date-from-utc.js +15 -15
  223. package/dist/src/utils/log.d.ts +7 -7
  224. package/dist/src/utils/log.js +15 -15
  225. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  226. package/dist/src/utils/resolve-mediatype.js +23 -23
  227. package/dist/src/utils/sha1.d.ts +2 -2
  228. package/dist/src/utils/sha1.js +8 -8
  229. package/dist/test/collection-browser.test.d.ts +1 -1
  230. package/dist/test/collection-browser.test.js +1308 -1308
  231. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  232. package/dist/test/collection-facets/facet-row.test.js +227 -227
  233. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  234. package/dist/test/collection-facets/facets-template.test.js +91 -91
  235. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  236. package/dist/test/collection-facets/more-facets-content.test.js +141 -141
  237. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  238. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  239. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  240. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  241. package/dist/test/collection-facets.test.d.ts +2 -2
  242. package/dist/test/collection-facets.test.js +690 -690
  243. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  244. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  245. package/dist/test/empty-placeholder.test.d.ts +1 -1
  246. package/dist/test/empty-placeholder.test.js +63 -63
  247. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  248. package/dist/test/expanded-date-picker.test.js +95 -95
  249. package/dist/test/icon-overlay.test.d.ts +1 -1
  250. package/dist/test/icon-overlay.test.js +24 -24
  251. package/dist/test/image-block.test.d.ts +1 -1
  252. package/dist/test/image-block.test.js +107 -107
  253. package/dist/test/item-image.test.d.ts +1 -1
  254. package/dist/test/item-image.test.js +85 -85
  255. package/dist/test/manage/manage-bar.test.d.ts +2 -2
  256. package/dist/test/manage/manage-bar.test.js +100 -100
  257. package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -1
  258. package/dist/test/manage/remove-items-modal-content.test.js +45 -45
  259. package/dist/test/mediatype-config.test.d.ts +1 -1
  260. package/dist/test/mediatype-config.test.js +16 -16
  261. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  262. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  263. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  264. package/dist/test/mocks/mock-search-responses.js +942 -942
  265. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  266. package/dist/test/mocks/mock-search-service.js +54 -54
  267. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  268. package/dist/test/restoration-state-handler.test.js +270 -270
  269. package/dist/test/review-block.test.d.ts +1 -1
  270. package/dist/test/review-block.test.js +44 -44
  271. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  272. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  273. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  274. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  275. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  276. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
  277. package/dist/test/text-overlay.test.d.ts +1 -1
  278. package/dist/test/text-overlay.test.js +38 -38
  279. package/dist/test/text-snippet-block.test.d.ts +1 -1
  280. package/dist/test/text-snippet-block.test.js +57 -57
  281. package/dist/test/tile-stats.test.d.ts +1 -1
  282. package/dist/test/tile-stats.test.js +81 -81
  283. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  284. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  285. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  286. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  287. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  288. package/dist/test/tiles/grid/item-tile.test.js +312 -312
  289. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  290. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  291. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  292. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  293. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  294. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  295. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  296. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  297. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  298. package/dist/test/tiles/list/tile-list.test.js +297 -297
  299. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  300. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  301. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  302. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  303. package/dist/test/utils/array-equals.test.d.ts +1 -1
  304. package/dist/test/utils/array-equals.test.js +26 -26
  305. package/dist/test/utils/format-count.test.d.ts +1 -1
  306. package/dist/test/utils/format-count.test.js +23 -23
  307. package/dist/test/utils/format-date.test.d.ts +1 -1
  308. package/dist/test/utils/format-date.test.js +30 -30
  309. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  310. package/dist/test/utils/format-unit-size.test.js +17 -17
  311. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  312. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  313. package/local.archive.org.cert +86 -86
  314. package/local.archive.org.key +27 -27
  315. package/package.json +1 -1
  316. package/renovate.json +6 -6
  317. package/src/collection-browser.ts +2 -0
  318. package/src/data-source/collection-browser-data-source.ts +12 -1
  319. package/web-dev-server.config.mjs +30 -30
  320. package/web-test-runner.config.mjs +41 -41
@@ -1,146 +1,146 @@
1
- import { AggregationSortType } from '@internetarchive/search-service';
2
- import { getDefaultSelectedFacets, } from '../models';
3
- // This file contains several helper functions designed to make working immutably
4
- // with SelectedFacet objects and FacetGroups cleaner & easier.
5
- /**
6
- * Calls the given function for each FacetBucket specified in the given SelectedFacets
7
- * object. The function is always called with the facet type, bucket key, bucket object,
8
- * and the given SelectedFacets object.
9
- *
10
- * @param selectedFacets The SelectedFacets object whose buckets should be iterated over
11
- * @param fn The function to apply to each facet bucket.
12
- *
13
- * @example
14
- * forEachFacetBucket(
15
- * myFacets,
16
- * (facetType, bucketKey, bucket) => {
17
- * if (facetType === 'collection' && bucket.state === 'hidden') {
18
- * console.log(`Excluding any results in the ${bucketKey} collection`);
19
- * }
20
- * }
21
- * );
22
- */
23
- export function forEachFacetBucket(selectedFacets, fn) {
24
- if (!selectedFacets)
25
- return;
26
- for (const [facetType, facetBuckets] of Object.entries(selectedFacets)) {
27
- for (const [bucketKey, bucket] of Object.entries(facetBuckets)) {
28
- fn(facetType, bucketKey, bucket, selectedFacets);
29
- }
30
- }
31
- }
32
- /**
33
- * Returns a new SelectedFacets object having only the specified bucket changed to
34
- * reflect its new provided value. The bucket key is determined from the provided
35
- * `bucket` itself.
36
- * @param selectedFacets The SelectedFacets object to produce an updated clone of
37
- * @param facetType The type of facet to be modified (e.g., 'mediatype', 'subject', ...)
38
- * @param bucket The new bucket that should be present on the result
39
- * @param omitNoneState If set to true, the returned object will omit the given
40
- * bucket entirely if it is updated to state `'none'`. Default is false, which leaves
41
- * the `'none'` state in place.
42
- */
43
- export function updateSelectedFacetBucket(selectedFacets, facetType, bucket, omitNoneState = false) {
44
- const defaultedSelectedFacets = selectedFacets !== null && selectedFacets !== void 0 ? selectedFacets : getDefaultSelectedFacets();
45
- const newFacets = {
46
- ...defaultedSelectedFacets,
47
- [facetType]: {
48
- ...defaultedSelectedFacets[facetType],
49
- [bucket.key]: bucket,
50
- },
51
- };
52
- if (omitNoneState && bucket.state === 'none') {
53
- delete newFacets[facetType][bucket.key];
54
- }
55
- return newFacets;
56
- }
57
- /**
58
- * Creates a clone of the given SelectedFacets object.
59
- *
60
- * Note that the underlying FacetBucket objects are not deep-cloned -- they will
61
- * be references to the same objects as in the input. However, the objects
62
- * containing the FacetBuckets for each FacetOption are created anew.
63
- *
64
- * If the provided argument is undefined, returns an empty SelectedFacets object.
65
- *
66
- * @param selectedFacets The SelectedFacets object to be cloned
67
- */
68
- export function cloneSelectedFacets(selectedFacets) {
69
- const cloneResult = getDefaultSelectedFacets();
70
- forEachFacetBucket(selectedFacets, (facetType, bucketKey, bucket) => {
71
- cloneResult[facetType][bucketKey] = bucket;
72
- });
73
- return cloneResult;
74
- }
75
- /**
76
- * Creates a new SelectedFacets object representing a merge of the `source` facets object
77
- * into the `destination` facets object. Any facets existing in `source` take precedence
78
- * over those in `destination` in the event of conflicts.
79
- *
80
- * The resulting SelectedFacets object is normalized to omit any facet buckets whose
81
- * state is `'none'` in the merged result. Consequently, any facets buckets with state
82
- * `'none'` in `source` will always be absent from the end result. Likewise, any facet
83
- * buckets with state `'none'` in `destination` will be absent _unless_ they are also
84
- * present in `source` with a state of `'selected'` or `'hidden'` (in which case `source`
85
- * takes precedence as usual).
86
- *
87
- * @param source The source of the new facets to merge in. Any facet buckets existing in
88
- * this `source` object will take precedence over those in `destination` having the same
89
- * key, if they exist in both. Any facet buckets that are _not_ present in `source` will
90
- * remain unmodified from their state in `destination`, if they are present there at all.
91
- * @param destination The destination onto which facets should be merged. Note that this
92
- * object is _not_ re-used for the return value, but it is conceptually the "existing base"
93
- * onto which the source facets are merged.
94
- */
95
- export function mergeSelectedFacets(destination, source) {
96
- const mergeResult = cloneSelectedFacets(destination);
97
- forEachFacetBucket(source, (facetType, bucketKey, bucket) => {
98
- mergeResult[facetType][bucketKey] = bucket;
99
- });
100
- // Normalize any 'none' states on the result (from either source or destination)
101
- forEachFacetBucket(mergeResult, (facetType, bucketKey, bucket) => {
102
- if (bucket.state === 'none') {
103
- delete mergeResult[facetType][bucketKey];
104
- }
105
- });
106
- return mergeResult;
107
- }
108
- /**
109
- * Defines the order of states in which to display SelectedFacets buckets
110
- */
111
- const BUCKET_STATE_ORDER = ['selected', 'hidden', 'none'];
112
- /**
113
- * Sorts the provided FacetBuckets so that:
114
- * - Any selected items come first
115
- * - Any hidden items come after all the selected items
116
- * - Any unselected / unhidden items come last
117
- *
118
- * Within each of the above groups, the buckets will be sorted according to
119
- * the provided sort type, or by their bucket count by default.
120
- *
121
- * The sort is performed in-place using `Array.sort`, so the return value is
122
- * a reference to the same array that was passed in, only sorted.
123
- *
124
- * @param buckets The array of facet buckets to sort
125
- * @param sort (Optional) How buckets within each state group should be sorted.
126
- * Defaults to `AggregationSortType.COUNT` (i.e., descending by bucket count).
127
- */
128
- export function sortBucketsBySelectionState(buckets, sort = AggregationSortType.COUNT) {
129
- return buckets.sort((a, b) => {
130
- const aStateIndex = BUCKET_STATE_ORDER.indexOf(a.state);
131
- const bStateIndex = BUCKET_STATE_ORDER.indexOf(b.state);
132
- const stateDiff = aStateIndex - bStateIndex; // Sort bucket states primarily in the order defined by BUCKET_STATE_ORDER
133
- let secondaryDiff;
134
- if (sort === AggregationSortType.ALPHABETICAL) {
135
- secondaryDiff = a.key.localeCompare(b.key); // Ascending alphabetically by bucket key
136
- }
137
- else if (sort === AggregationSortType.NUMERIC) {
138
- secondaryDiff = Number(b.key) - Number(a.key); // Descending numerically by bucket key
139
- }
140
- else {
141
- secondaryDiff = b.count - a.count; // Descending by bucket count
142
- }
143
- return stateDiff || secondaryDiff; // Primary sort on state, secondary sort on the given sort type (defaulting to descending count)
144
- });
145
- }
1
+ import { AggregationSortType } from '@internetarchive/search-service';
2
+ import { getDefaultSelectedFacets, } from '../models';
3
+ // This file contains several helper functions designed to make working immutably
4
+ // with SelectedFacet objects and FacetGroups cleaner & easier.
5
+ /**
6
+ * Calls the given function for each FacetBucket specified in the given SelectedFacets
7
+ * object. The function is always called with the facet type, bucket key, bucket object,
8
+ * and the given SelectedFacets object.
9
+ *
10
+ * @param selectedFacets The SelectedFacets object whose buckets should be iterated over
11
+ * @param fn The function to apply to each facet bucket.
12
+ *
13
+ * @example
14
+ * forEachFacetBucket(
15
+ * myFacets,
16
+ * (facetType, bucketKey, bucket) => {
17
+ * if (facetType === 'collection' && bucket.state === 'hidden') {
18
+ * console.log(`Excluding any results in the ${bucketKey} collection`);
19
+ * }
20
+ * }
21
+ * );
22
+ */
23
+ export function forEachFacetBucket(selectedFacets, fn) {
24
+ if (!selectedFacets)
25
+ return;
26
+ for (const [facetType, facetBuckets] of Object.entries(selectedFacets)) {
27
+ for (const [bucketKey, bucket] of Object.entries(facetBuckets)) {
28
+ fn(facetType, bucketKey, bucket, selectedFacets);
29
+ }
30
+ }
31
+ }
32
+ /**
33
+ * Returns a new SelectedFacets object having only the specified bucket changed to
34
+ * reflect its new provided value. The bucket key is determined from the provided
35
+ * `bucket` itself.
36
+ * @param selectedFacets The SelectedFacets object to produce an updated clone of
37
+ * @param facetType The type of facet to be modified (e.g., 'mediatype', 'subject', ...)
38
+ * @param bucket The new bucket that should be present on the result
39
+ * @param omitNoneState If set to true, the returned object will omit the given
40
+ * bucket entirely if it is updated to state `'none'`. Default is false, which leaves
41
+ * the `'none'` state in place.
42
+ */
43
+ export function updateSelectedFacetBucket(selectedFacets, facetType, bucket, omitNoneState = false) {
44
+ const defaultedSelectedFacets = selectedFacets !== null && selectedFacets !== void 0 ? selectedFacets : getDefaultSelectedFacets();
45
+ const newFacets = {
46
+ ...defaultedSelectedFacets,
47
+ [facetType]: {
48
+ ...defaultedSelectedFacets[facetType],
49
+ [bucket.key]: bucket,
50
+ },
51
+ };
52
+ if (omitNoneState && bucket.state === 'none') {
53
+ delete newFacets[facetType][bucket.key];
54
+ }
55
+ return newFacets;
56
+ }
57
+ /**
58
+ * Creates a clone of the given SelectedFacets object.
59
+ *
60
+ * Note that the underlying FacetBucket objects are not deep-cloned -- they will
61
+ * be references to the same objects as in the input. However, the objects
62
+ * containing the FacetBuckets for each FacetOption are created anew.
63
+ *
64
+ * If the provided argument is undefined, returns an empty SelectedFacets object.
65
+ *
66
+ * @param selectedFacets The SelectedFacets object to be cloned
67
+ */
68
+ export function cloneSelectedFacets(selectedFacets) {
69
+ const cloneResult = getDefaultSelectedFacets();
70
+ forEachFacetBucket(selectedFacets, (facetType, bucketKey, bucket) => {
71
+ cloneResult[facetType][bucketKey] = bucket;
72
+ });
73
+ return cloneResult;
74
+ }
75
+ /**
76
+ * Creates a new SelectedFacets object representing a merge of the `source` facets object
77
+ * into the `destination` facets object. Any facets existing in `source` take precedence
78
+ * over those in `destination` in the event of conflicts.
79
+ *
80
+ * The resulting SelectedFacets object is normalized to omit any facet buckets whose
81
+ * state is `'none'` in the merged result. Consequently, any facets buckets with state
82
+ * `'none'` in `source` will always be absent from the end result. Likewise, any facet
83
+ * buckets with state `'none'` in `destination` will be absent _unless_ they are also
84
+ * present in `source` with a state of `'selected'` or `'hidden'` (in which case `source`
85
+ * takes precedence as usual).
86
+ *
87
+ * @param source The source of the new facets to merge in. Any facet buckets existing in
88
+ * this `source` object will take precedence over those in `destination` having the same
89
+ * key, if they exist in both. Any facet buckets that are _not_ present in `source` will
90
+ * remain unmodified from their state in `destination`, if they are present there at all.
91
+ * @param destination The destination onto which facets should be merged. Note that this
92
+ * object is _not_ re-used for the return value, but it is conceptually the "existing base"
93
+ * onto which the source facets are merged.
94
+ */
95
+ export function mergeSelectedFacets(destination, source) {
96
+ const mergeResult = cloneSelectedFacets(destination);
97
+ forEachFacetBucket(source, (facetType, bucketKey, bucket) => {
98
+ mergeResult[facetType][bucketKey] = bucket;
99
+ });
100
+ // Normalize any 'none' states on the result (from either source or destination)
101
+ forEachFacetBucket(mergeResult, (facetType, bucketKey, bucket) => {
102
+ if (bucket.state === 'none') {
103
+ delete mergeResult[facetType][bucketKey];
104
+ }
105
+ });
106
+ return mergeResult;
107
+ }
108
+ /**
109
+ * Defines the order of states in which to display SelectedFacets buckets
110
+ */
111
+ const BUCKET_STATE_ORDER = ['selected', 'hidden', 'none'];
112
+ /**
113
+ * Sorts the provided FacetBuckets so that:
114
+ * - Any selected items come first
115
+ * - Any hidden items come after all the selected items
116
+ * - Any unselected / unhidden items come last
117
+ *
118
+ * Within each of the above groups, the buckets will be sorted according to
119
+ * the provided sort type, or by their bucket count by default.
120
+ *
121
+ * The sort is performed in-place using `Array.sort`, so the return value is
122
+ * a reference to the same array that was passed in, only sorted.
123
+ *
124
+ * @param buckets The array of facet buckets to sort
125
+ * @param sort (Optional) How buckets within each state group should be sorted.
126
+ * Defaults to `AggregationSortType.COUNT` (i.e., descending by bucket count).
127
+ */
128
+ export function sortBucketsBySelectionState(buckets, sort = AggregationSortType.COUNT) {
129
+ return buckets.sort((a, b) => {
130
+ const aStateIndex = BUCKET_STATE_ORDER.indexOf(a.state);
131
+ const bStateIndex = BUCKET_STATE_ORDER.indexOf(b.state);
132
+ const stateDiff = aStateIndex - bStateIndex; // Sort bucket states primarily in the order defined by BUCKET_STATE_ORDER
133
+ let secondaryDiff;
134
+ if (sort === AggregationSortType.ALPHABETICAL) {
135
+ secondaryDiff = a.key.localeCompare(b.key); // Ascending alphabetically by bucket key
136
+ }
137
+ else if (sort === AggregationSortType.NUMERIC) {
138
+ secondaryDiff = Number(b.key) - Number(a.key); // Descending numerically by bucket key
139
+ }
140
+ else {
141
+ secondaryDiff = b.count - a.count; // Descending by bucket count
142
+ }
143
+ return stateDiff || secondaryDiff; // Primary sort on state, secondary sort on the given sort type (defaulting to descending count)
144
+ });
145
+ }
146
146
  //# sourceMappingURL=facet-utils.js.map
@@ -1,7 +1,7 @@
1
- export declare type NumberFormat = 'short' | 'long';
2
- export declare type LabelFormat = 'short' | 'long';
3
- /**
4
- * Format a "count" number into short "icon" or longer text string.
5
- * For positive numbers only.
6
- */
7
- export declare function formatCount(count: number | undefined, numberFormat?: NumberFormat, labelFormat?: LabelFormat, locale?: string): string;
1
+ export declare type NumberFormat = 'short' | 'long';
2
+ export declare type LabelFormat = 'short' | 'long';
3
+ /**
4
+ * Format a "count" number into short "icon" or longer text string.
5
+ * For positive numbers only.
6
+ */
7
+ export declare function formatCount(count: number | undefined, numberFormat?: NumberFormat, labelFormat?: LabelFormat, locale?: string): string;
@@ -1,77 +1,77 @@
1
- /*
2
- * Replaces Petabox www/common/Util::number_format()
3
- * For positive numbers only.
4
- */
5
- import { msg, str } from '@lit/localize';
6
- /**
7
- * Return the magnitude of a number.
8
- */
9
- function magnitude(number, numberFormat) {
10
- let divisor = 1;
11
- if (number >= 1000000000) {
12
- divisor = 1000000000;
13
- }
14
- else if (number >= 1000000) {
15
- divisor = 1000000;
16
- }
17
- else if (number >= 1000 && numberFormat === 'short') {
18
- divisor = 1000;
19
- }
20
- return divisor;
21
- }
22
- /**
23
- * Round a number given passed magnitude.
24
- * Significant digits of value less than 10 get a decimal.
25
- */
26
- // eslint-disable-next-line default-param-last
27
- function round(number = 0, divisor) {
28
- const result = number / divisor;
29
- const roundToOne = result < 10;
30
- let rounded = 0;
31
- if (roundToOne) {
32
- rounded = Math.round((result + Number.EPSILON) * 10) / 10;
33
- }
34
- else {
35
- rounded = Math.round(result);
36
- }
37
- return rounded;
38
- }
39
- /**
40
- * Return a label for a number and format.
41
- */
42
- function labelize(rounded, divisor, format, locale) {
43
- switch (divisor) {
44
- case 1000000000:
45
- if (format === 'short') {
46
- return msg(str `${rounded}B`);
47
- }
48
- return msg(str `${rounded} billion`);
49
- case 1000000:
50
- if (format === 'short') {
51
- return msg(str `${rounded}M`);
52
- }
53
- return msg(str `${rounded} million`);
54
- case 1000:
55
- if (format === 'short') {
56
- return msg(str `${rounded}K`);
57
- }
58
- return msg(str `${rounded} thousand`);
59
- default:
60
- return new Intl.NumberFormat(locale).format(rounded);
61
- }
62
- }
63
- /**
64
- * Format a "count" number into short "icon" or longer text string.
65
- * For positive numbers only.
66
- */
67
- export function formatCount(count, numberFormat = 'long', labelFormat = 'short', locale = 'en-US') {
68
- // Return blank if undefined
69
- const number = count !== null && count !== void 0 ? count : -1;
70
- if (number < 0) {
71
- return '';
72
- }
73
- const divisor = magnitude(number, numberFormat);
74
- const rounded = round(number, divisor);
75
- return labelize(rounded, divisor, labelFormat, locale);
76
- }
1
+ /*
2
+ * Replaces Petabox www/common/Util::number_format()
3
+ * For positive numbers only.
4
+ */
5
+ import { msg, str } from '@lit/localize';
6
+ /**
7
+ * Return the magnitude of a number.
8
+ */
9
+ function magnitude(number, numberFormat) {
10
+ let divisor = 1;
11
+ if (number >= 1000000000) {
12
+ divisor = 1000000000;
13
+ }
14
+ else if (number >= 1000000) {
15
+ divisor = 1000000;
16
+ }
17
+ else if (number >= 1000 && numberFormat === 'short') {
18
+ divisor = 1000;
19
+ }
20
+ return divisor;
21
+ }
22
+ /**
23
+ * Round a number given passed magnitude.
24
+ * Significant digits of value less than 10 get a decimal.
25
+ */
26
+ // eslint-disable-next-line default-param-last
27
+ function round(number = 0, divisor) {
28
+ const result = number / divisor;
29
+ const roundToOne = result < 10;
30
+ let rounded = 0;
31
+ if (roundToOne) {
32
+ rounded = Math.round((result + Number.EPSILON) * 10) / 10;
33
+ }
34
+ else {
35
+ rounded = Math.round(result);
36
+ }
37
+ return rounded;
38
+ }
39
+ /**
40
+ * Return a label for a number and format.
41
+ */
42
+ function labelize(rounded, divisor, format, locale) {
43
+ switch (divisor) {
44
+ case 1000000000:
45
+ if (format === 'short') {
46
+ return msg(str `${rounded}B`);
47
+ }
48
+ return msg(str `${rounded} billion`);
49
+ case 1000000:
50
+ if (format === 'short') {
51
+ return msg(str `${rounded}M`);
52
+ }
53
+ return msg(str `${rounded} million`);
54
+ case 1000:
55
+ if (format === 'short') {
56
+ return msg(str `${rounded}K`);
57
+ }
58
+ return msg(str `${rounded} thousand`);
59
+ default:
60
+ return new Intl.NumberFormat(locale).format(rounded);
61
+ }
62
+ }
63
+ /**
64
+ * Format a "count" number into short "icon" or longer text string.
65
+ * For positive numbers only.
66
+ */
67
+ export function formatCount(count, numberFormat = 'long', labelFormat = 'short', locale = 'en-US') {
68
+ // Return blank if undefined
69
+ const number = count !== null && count !== void 0 ? count : -1;
70
+ if (number < 0) {
71
+ return '';
72
+ }
73
+ const divisor = magnitude(number, numberFormat);
74
+ const rounded = round(number, divisor);
75
+ return labelize(rounded, divisor, labelFormat, locale);
76
+ }
77
77
  //# sourceMappingURL=format-count.js.map
@@ -1,2 +1,2 @@
1
- export declare type DateFormat = 'year-only' | 'short' | 'long';
2
- export declare function formatDate(date: Date | undefined, format?: DateFormat, locale?: string): string;
1
+ export declare type DateFormat = 'year-only' | 'short' | 'long';
2
+ export declare function formatDate(date: Date | undefined, format?: DateFormat, locale?: string): string;
@@ -1,28 +1,28 @@
1
- export function formatDate(date, format = 'short', locale = 'en-US') {
2
- // Return blank if undefined
3
- if (!date)
4
- return '';
5
- // the date is already in UTC timezone so we should not add timeZone here again.
6
- const options = {};
7
- switch (format) {
8
- case 'year-only':
9
- // If we're only using the year, ensure we output the correct UTC year and not
10
- // the local year. If the local timezone is used, we can get strange off-by-one
11
- // errors due to quirks of timezone handling for older years.
12
- return `${date.getUTCFullYear()}`;
13
- case 'short':
14
- options.month = 'short';
15
- options.year = 'numeric';
16
- break;
17
- case 'long':
18
- options.year = 'numeric';
19
- options.month = 'short';
20
- options.day = '2-digit';
21
- break;
22
- default:
23
- break;
24
- }
25
- const dateFormatter = new Intl.DateTimeFormat(locale, options);
26
- return dateFormatter.format(date);
27
- }
1
+ export function formatDate(date, format = 'short', locale = 'en-US') {
2
+ // Return blank if undefined
3
+ if (!date)
4
+ return '';
5
+ // the date is already in UTC timezone so we should not add timeZone here again.
6
+ const options = {};
7
+ switch (format) {
8
+ case 'year-only':
9
+ // If we're only using the year, ensure we output the correct UTC year and not
10
+ // the local year. If the local timezone is used, we can get strange off-by-one
11
+ // errors due to quirks of timezone handling for older years.
12
+ return `${date.getUTCFullYear()}`;
13
+ case 'short':
14
+ options.month = 'short';
15
+ options.year = 'numeric';
16
+ break;
17
+ case 'long':
18
+ options.year = 'numeric';
19
+ options.month = 'short';
20
+ options.day = '2-digit';
21
+ break;
22
+ default:
23
+ break;
24
+ }
25
+ const dateFormatter = new Intl.DateTimeFormat(locale, options);
26
+ return dateFormatter.format(date);
27
+ }
28
28
  //# sourceMappingURL=format-date.js.map
@@ -1,2 +1,2 @@
1
- import { nothing } from 'lit';
2
- export declare function formatUnitSize(size: number | undefined, nDecimals: number, separator?: string): string | typeof nothing;
1
+ import { nothing } from 'lit';
2
+ export declare function formatUnitSize(size: number | undefined, nDecimals: number, separator?: string): string | typeof nothing;
@@ -1,34 +1,34 @@
1
- /*
2
- * Replaces Petabox www/common/Util::humanSize()
3
- */
4
- import { nothing } from 'lit';
5
- var unitSizes;
6
- (function (unitSizes) {
7
- unitSizes[unitSizes["bytes"] = 0] = "bytes";
8
- unitSizes[unitSizes["kilobytes"] = 1] = "kilobytes";
9
- unitSizes[unitSizes["megabytes"] = 2] = "megabytes";
10
- unitSizes[unitSizes["gigabytes"] = 3] = "gigabytes";
11
- unitSizes[unitSizes["terabytes"] = 4] = "terabytes";
12
- unitSizes[unitSizes["petabytes"] = 5] = "petabytes";
13
- unitSizes[unitSizes["exabytes"] = 6] = "exabytes";
14
- unitSizes[unitSizes["zettabytes"] = 7] = "zettabytes";
15
- unitSizes[unitSizes["yottabytes"] = 8] = "yottabytes";
16
- })(unitSizes || (unitSizes = {}));
17
- export function formatUnitSize(size, nDecimals, separator = ' ') {
18
- let itemSize = size;
19
- if (itemSize === undefined)
20
- return nothing; // early return.
21
- let unitIndex = 0;
22
- // convert byte to highest possible unit
23
- while (itemSize > 1024) {
24
- itemSize /= 1024;
25
- unitIndex += 1;
26
- }
27
- const magnitude = 10 ** nDecimals;
28
- itemSize = Math.round(itemSize * magnitude) / magnitude;
29
- let unitText = unitSizes[unitIndex];
30
- // convert plural to singular.
31
- unitText = itemSize === 1 ? unitText.slice(0, -1) : unitText;
32
- return `${itemSize.toLocaleString() + separator + unitText}`;
33
- }
1
+ /*
2
+ * Replaces Petabox www/common/Util::humanSize()
3
+ */
4
+ import { nothing } from 'lit';
5
+ var unitSizes;
6
+ (function (unitSizes) {
7
+ unitSizes[unitSizes["bytes"] = 0] = "bytes";
8
+ unitSizes[unitSizes["kilobytes"] = 1] = "kilobytes";
9
+ unitSizes[unitSizes["megabytes"] = 2] = "megabytes";
10
+ unitSizes[unitSizes["gigabytes"] = 3] = "gigabytes";
11
+ unitSizes[unitSizes["terabytes"] = 4] = "terabytes";
12
+ unitSizes[unitSizes["petabytes"] = 5] = "petabytes";
13
+ unitSizes[unitSizes["exabytes"] = 6] = "exabytes";
14
+ unitSizes[unitSizes["zettabytes"] = 7] = "zettabytes";
15
+ unitSizes[unitSizes["yottabytes"] = 8] = "yottabytes";
16
+ })(unitSizes || (unitSizes = {}));
17
+ export function formatUnitSize(size, nDecimals, separator = ' ') {
18
+ let itemSize = size;
19
+ if (itemSize === undefined)
20
+ return nothing; // early return.
21
+ let unitIndex = 0;
22
+ // convert byte to highest possible unit
23
+ while (itemSize > 1024) {
24
+ itemSize /= 1024;
25
+ unitIndex += 1;
26
+ }
27
+ const magnitude = 10 ** nDecimals;
28
+ itemSize = Math.round(itemSize * magnitude) / magnitude;
29
+ let unitText = unitSizes[unitIndex];
30
+ // convert plural to singular.
31
+ unitText = itemSize === 1 ? unitText.slice(0, -1) : unitText;
32
+ return `${itemSize.toLocaleString() + separator + unitText}`;
33
+ }
34
34
  //# sourceMappingURL=format-unit-size.js.map
@@ -1,9 +1,9 @@
1
- /**
2
- * Converts a given UTC date into the equivalent local-timestamp one.
3
- */
4
- export declare function localDateFromUTC(date: Date): Date;
5
- /**
6
- * Returns whether a given UTC date corresponds to the first
7
- * millisecond of the year (e.g., Jan 1 at exactly midnight).
8
- */
9
- export declare function isFirstMillisecondOfUTCYear(date?: Date): boolean;
1
+ /**
2
+ * Converts a given UTC date into the equivalent local-timestamp one.
3
+ */
4
+ export declare function localDateFromUTC(date: Date): Date;
5
+ /**
6
+ * Returns whether a given UTC date corresponds to the first
7
+ * millisecond of the year (e.g., Jan 1 at exactly midnight).
8
+ */
9
+ export declare function isFirstMillisecondOfUTCYear(date?: Date): boolean;
@@ -1,16 +1,16 @@
1
- /**
2
- * Converts a given UTC date into the equivalent local-timestamp one.
3
- */
4
- export function localDateFromUTC(date) {
5
- return new Date(date.getTime() - date.getTimezoneOffset() * 1000 * 60);
6
- }
7
- /**
8
- * Returns whether a given UTC date corresponds to the first
9
- * millisecond of the year (e.g., Jan 1 at exactly midnight).
10
- */
11
- export function isFirstMillisecondOfUTCYear(date) {
12
- if (!date)
13
- return false;
14
- return localDateFromUTC(date).toISOString().endsWith('-01-01T00:00:00.000Z');
15
- }
1
+ /**
2
+ * Converts a given UTC date into the equivalent local-timestamp one.
3
+ */
4
+ export function localDateFromUTC(date) {
5
+ return new Date(date.getTime() - date.getTimezoneOffset() * 1000 * 60);
6
+ }
7
+ /**
8
+ * Returns whether a given UTC date corresponds to the first
9
+ * millisecond of the year (e.g., Jan 1 at exactly midnight).
10
+ */
11
+ export function isFirstMillisecondOfUTCYear(date) {
12
+ if (!date)
13
+ return false;
14
+ return localDateFromUTC(date).toISOString().endsWith('-01-01T00:00:00.000Z');
15
+ }
16
16
  //# sourceMappingURL=local-date-from-utc.js.map