@universityofmaryland/web-feeds-library 1.2.3 → 1.3.0-beta.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 (435) hide show
  1. package/README.md +1 -1
  2. package/dist/academic.d.ts +1 -1
  3. package/dist/academic.js +1 -1
  4. package/dist/academic.mjs +1 -1
  5. package/dist/events.d.ts +1 -1
  6. package/dist/events.js +4 -4
  7. package/dist/events.mjs +4 -4
  8. package/dist/experts.d.ts +2 -0
  9. package/dist/experts.js +9 -0
  10. package/dist/experts.js.map +1 -0
  11. package/dist/experts.mjs +9 -0
  12. package/dist/experts.mjs.map +1 -0
  13. package/dist/factory/core/createBaseFeed.d.ts +3 -0
  14. package/dist/factory/core/createBaseFeed.d.ts.map +1 -0
  15. package/dist/factory/core/createBaseFeed.js +114 -0
  16. package/dist/factory/core/createBaseFeed.js.map +1 -0
  17. package/dist/factory/core/createBaseFeed.mjs +114 -0
  18. package/dist/factory/core/createBaseFeed.mjs.map +1 -0
  19. package/dist/factory/core/index.d.ts +3 -0
  20. package/dist/factory/core/index.d.ts.map +1 -0
  21. package/dist/factory/core/types.d.ts +91 -0
  22. package/dist/factory/core/types.d.ts.map +1 -0
  23. package/dist/factory/helpers/displayHandler.d.ts +29 -0
  24. package/dist/factory/helpers/displayHandler.d.ts.map +1 -0
  25. package/dist/factory/helpers/displayHandler.js +187 -0
  26. package/dist/factory/helpers/displayHandler.js.map +1 -0
  27. package/dist/factory/helpers/displayHandler.mjs +169 -0
  28. package/dist/factory/helpers/displayHandler.mjs.map +1 -0
  29. package/dist/factory/helpers/feedHelpers.d.ts +10 -0
  30. package/dist/factory/helpers/feedHelpers.d.ts.map +1 -0
  31. package/dist/factory/helpers/feedHelpers.js +32 -0
  32. package/dist/factory/helpers/feedHelpers.js.map +1 -0
  33. package/dist/factory/helpers/feedHelpers.mjs +32 -0
  34. package/dist/factory/helpers/feedHelpers.mjs.map +1 -0
  35. package/dist/factory/helpers/fetchHandler.d.ts +22 -0
  36. package/dist/factory/helpers/fetchHandler.d.ts.map +1 -0
  37. package/dist/factory/helpers/fetchHandler.js +140 -0
  38. package/dist/factory/helpers/fetchHandler.js.map +1 -0
  39. package/dist/factory/helpers/fetchHandler.mjs +123 -0
  40. package/dist/factory/helpers/fetchHandler.mjs.map +1 -0
  41. package/dist/factory/helpers/index.d.ts +4 -0
  42. package/dist/factory/helpers/index.d.ts.map +1 -0
  43. package/dist/factory/index.d.ts +4 -0
  44. package/dist/factory/index.d.ts.map +1 -0
  45. package/dist/feeds/academic/_types.d.ts.map +1 -0
  46. package/dist/feeds/academic/index.d.ts.map +1 -0
  47. package/dist/feeds/academic/slider.d.ts.map +1 -0
  48. package/dist/feeds/academic/slider.js +10 -0
  49. package/dist/feeds/academic/slider.js.map +1 -0
  50. package/dist/feeds/academic/slider.mjs +11 -0
  51. package/dist/feeds/academic/slider.mjs.map +1 -0
  52. package/dist/feeds/events/_types.d.ts.map +1 -0
  53. package/dist/feeds/events/grid.d.ts.map +1 -0
  54. package/dist/feeds/events/grid.js +31 -0
  55. package/dist/feeds/events/grid.js.map +1 -0
  56. package/dist/feeds/events/grid.mjs +32 -0
  57. package/dist/feeds/events/grid.mjs.map +1 -0
  58. package/dist/feeds/events/grouped.d.ts.map +1 -0
  59. package/dist/feeds/events/grouped.js +353 -0
  60. package/dist/feeds/events/grouped.js.map +1 -0
  61. package/dist/feeds/events/grouped.mjs +337 -0
  62. package/dist/feeds/events/grouped.mjs.map +1 -0
  63. package/dist/feeds/events/index.d.ts.map +1 -0
  64. package/dist/feeds/events/list.d.ts.map +1 -0
  65. package/dist/feeds/events/list.js +32 -0
  66. package/dist/feeds/events/list.js.map +1 -0
  67. package/dist/feeds/events/list.mjs +33 -0
  68. package/dist/feeds/events/list.mjs.map +1 -0
  69. package/dist/feeds/events/slider.d.ts.map +1 -0
  70. package/dist/feeds/events/slider.js +10 -0
  71. package/dist/feeds/events/slider.js.map +1 -0
  72. package/dist/feeds/events/slider.mjs +11 -0
  73. package/dist/feeds/events/slider.mjs.map +1 -0
  74. package/dist/feeds/experts/_types.d.ts +22 -0
  75. package/dist/feeds/experts/_types.d.ts.map +1 -0
  76. package/dist/feeds/experts/bio.d.ts +5 -0
  77. package/dist/feeds/experts/bio.d.ts.map +1 -0
  78. package/dist/feeds/experts/bio.js +146 -0
  79. package/dist/feeds/experts/bio.js.map +1 -0
  80. package/dist/feeds/experts/bio.mjs +147 -0
  81. package/dist/feeds/experts/bio.mjs.map +1 -0
  82. package/dist/feeds/experts/grid.d.ts +5 -0
  83. package/dist/feeds/experts/grid.d.ts.map +1 -0
  84. package/dist/feeds/experts/grid.js +36 -0
  85. package/dist/feeds/experts/grid.js.map +1 -0
  86. package/dist/feeds/experts/grid.mjs +37 -0
  87. package/dist/feeds/experts/grid.mjs.map +1 -0
  88. package/dist/feeds/experts/index.d.ts +4 -0
  89. package/dist/feeds/experts/index.d.ts.map +1 -0
  90. package/dist/feeds/experts/list.d.ts.map +1 -0
  91. package/dist/feeds/experts/list.js +25 -0
  92. package/dist/feeds/experts/list.js.map +1 -0
  93. package/dist/feeds/experts/list.mjs +26 -0
  94. package/dist/feeds/experts/list.mjs.map +1 -0
  95. package/dist/feeds/news/_types.d.ts.map +1 -0
  96. package/dist/feeds/news/featured.d.ts.map +1 -0
  97. package/dist/feeds/news/featured.js +378 -0
  98. package/dist/feeds/news/featured.js.map +1 -0
  99. package/dist/feeds/news/featured.mjs +379 -0
  100. package/dist/feeds/news/featured.mjs.map +1 -0
  101. package/dist/feeds/news/grid.d.ts.map +1 -0
  102. package/dist/feeds/news/grid.js +36 -0
  103. package/dist/feeds/news/grid.js.map +1 -0
  104. package/dist/feeds/news/grid.mjs +37 -0
  105. package/dist/feeds/news/grid.mjs.map +1 -0
  106. package/dist/feeds/news/index.d.ts.map +1 -0
  107. package/dist/feeds/news/list.d.ts +5 -0
  108. package/dist/feeds/news/list.d.ts.map +1 -0
  109. package/dist/feeds/news/list.js +33 -0
  110. package/dist/feeds/news/list.js.map +1 -0
  111. package/dist/feeds/news/list.mjs +34 -0
  112. package/dist/feeds/news/list.mjs.map +1 -0
  113. package/dist/{utilities → helpers}/events/index.d.ts +1 -0
  114. package/dist/helpers/events/index.d.ts.map +1 -0
  115. package/dist/{utilities → helpers}/events/index.js +2 -0
  116. package/dist/helpers/events/index.js.map +1 -0
  117. package/dist/{utilities → helpers}/events/index.mjs +2 -0
  118. package/dist/helpers/events/index.mjs.map +1 -0
  119. package/dist/helpers/grouping/events.d.ts +14 -0
  120. package/dist/helpers/grouping/events.d.ts.map +1 -0
  121. package/dist/helpers/grouping/events.js +147 -0
  122. package/dist/helpers/grouping/events.js.map +1 -0
  123. package/dist/helpers/grouping/events.mjs +147 -0
  124. package/dist/helpers/grouping/events.mjs.map +1 -0
  125. package/dist/helpers/grouping/index.d.ts +2 -0
  126. package/dist/helpers/grouping/index.d.ts.map +1 -0
  127. package/dist/helpers/index.d.ts +5 -0
  128. package/dist/helpers/index.d.ts.map +1 -0
  129. package/dist/helpers/network/fetch.d.ts.map +1 -0
  130. package/dist/helpers/network/index.d.ts.map +1 -0
  131. package/dist/helpers/styles/index.d.ts +2 -0
  132. package/dist/helpers/styles/index.d.ts.map +1 -0
  133. package/dist/helpers/styles/shadow.d.ts +10 -0
  134. package/dist/helpers/styles/shadow.d.ts.map +1 -0
  135. package/dist/helpers/styles/shadow.js +33 -0
  136. package/dist/helpers/styles/shadow.js.map +1 -0
  137. package/dist/helpers/styles/shadow.mjs +16 -0
  138. package/dist/helpers/styles/shadow.mjs.map +1 -0
  139. package/dist/index.d.ts +4 -3
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +2 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/index.mjs +2 -0
  144. package/dist/index.mjs.map +1 -1
  145. package/dist/news.d.ts +1 -1
  146. package/dist/news.js +3 -3
  147. package/dist/news.mjs +3 -3
  148. package/dist/states/_types.d.ts +60 -0
  149. package/dist/states/_types.d.ts.map +1 -0
  150. package/dist/states/_types.js +12 -0
  151. package/dist/states/_types.js.map +1 -0
  152. package/dist/states/_types.mjs +12 -0
  153. package/dist/states/_types.mjs.map +1 -0
  154. package/dist/states/announcer.d.ts +16 -0
  155. package/dist/states/announcer.d.ts.map +1 -0
  156. package/dist/states/announcer.js +62 -0
  157. package/dist/states/announcer.js.map +1 -0
  158. package/dist/states/announcer.mjs +62 -0
  159. package/dist/states/announcer.mjs.map +1 -0
  160. package/dist/states/empty.d.ts +17 -0
  161. package/dist/states/empty.d.ts.map +1 -0
  162. package/dist/states/empty.js +121 -0
  163. package/dist/states/empty.js.map +1 -0
  164. package/dist/states/empty.mjs +104 -0
  165. package/dist/states/empty.mjs.map +1 -0
  166. package/dist/states/index.d.ts +10 -0
  167. package/dist/states/index.d.ts.map +1 -0
  168. package/dist/states/loading.d.ts +17 -0
  169. package/dist/states/loading.d.ts.map +1 -0
  170. package/dist/states/loading.js +155 -0
  171. package/dist/states/loading.js.map +1 -0
  172. package/dist/states/loading.mjs +155 -0
  173. package/dist/states/loading.mjs.map +1 -0
  174. package/dist/states/pagination.d.ts +19 -0
  175. package/dist/states/pagination.d.ts.map +1 -0
  176. package/dist/states/pagination.js +119 -0
  177. package/dist/states/pagination.js.map +1 -0
  178. package/dist/states/pagination.mjs +102 -0
  179. package/dist/states/pagination.mjs.map +1 -0
  180. package/dist/strategies/display/events.d.ts +4 -0
  181. package/dist/strategies/display/events.d.ts.map +1 -0
  182. package/dist/strategies/display/events.js +60 -0
  183. package/dist/strategies/display/events.js.map +1 -0
  184. package/dist/strategies/display/events.mjs +60 -0
  185. package/dist/strategies/display/events.mjs.map +1 -0
  186. package/dist/strategies/display/experts.d.ts +19 -0
  187. package/dist/strategies/display/experts.d.ts.map +1 -0
  188. package/dist/strategies/display/experts.js +266 -0
  189. package/dist/strategies/display/experts.js.map +1 -0
  190. package/dist/strategies/display/experts.mjs +266 -0
  191. package/dist/strategies/display/experts.mjs.map +1 -0
  192. package/dist/strategies/display/index.d.ts +5 -0
  193. package/dist/strategies/display/index.d.ts.map +1 -0
  194. package/dist/strategies/display/news.d.ts +4 -0
  195. package/dist/strategies/display/news.d.ts.map +1 -0
  196. package/dist/strategies/display/news.js +58 -0
  197. package/dist/strategies/display/news.js.map +1 -0
  198. package/dist/strategies/display/news.mjs +58 -0
  199. package/dist/strategies/display/news.mjs.map +1 -0
  200. package/dist/strategies/fetch/academic.d.ts +2 -0
  201. package/dist/strategies/fetch/academic.d.ts.map +1 -0
  202. package/dist/strategies/fetch/academic.js +30 -0
  203. package/dist/strategies/fetch/academic.js.map +1 -0
  204. package/dist/strategies/fetch/academic.mjs +30 -0
  205. package/dist/strategies/fetch/academic.mjs.map +1 -0
  206. package/dist/strategies/fetch/events.d.ts +20 -0
  207. package/dist/strategies/fetch/events.d.ts.map +1 -0
  208. package/dist/strategies/fetch/events.js +223 -0
  209. package/dist/strategies/fetch/events.js.map +1 -0
  210. package/dist/strategies/fetch/events.mjs +223 -0
  211. package/dist/strategies/fetch/events.mjs.map +1 -0
  212. package/dist/strategies/fetch/experts.d.ts +4 -0
  213. package/dist/strategies/fetch/experts.d.ts.map +1 -0
  214. package/dist/strategies/fetch/experts.js +189 -0
  215. package/dist/strategies/fetch/experts.js.map +1 -0
  216. package/dist/strategies/fetch/experts.mjs +189 -0
  217. package/dist/strategies/fetch/experts.mjs.map +1 -0
  218. package/dist/strategies/fetch/graphql.d.ts +13 -0
  219. package/dist/strategies/fetch/graphql.d.ts.map +1 -0
  220. package/dist/strategies/fetch/graphql.js +100 -0
  221. package/dist/strategies/fetch/graphql.js.map +1 -0
  222. package/dist/strategies/fetch/graphql.mjs +100 -0
  223. package/dist/strategies/fetch/graphql.mjs.map +1 -0
  224. package/dist/strategies/fetch/index.d.ts +10 -0
  225. package/dist/strategies/fetch/index.d.ts.map +1 -0
  226. package/dist/strategies/fetch/news.d.ts +4 -0
  227. package/dist/strategies/fetch/news.d.ts.map +1 -0
  228. package/dist/strategies/fetch/news.js +95 -0
  229. package/dist/strategies/fetch/news.js.map +1 -0
  230. package/dist/strategies/fetch/news.mjs +95 -0
  231. package/dist/strategies/fetch/news.mjs.map +1 -0
  232. package/dist/strategies/index.d.ts +7 -0
  233. package/dist/strategies/index.d.ts.map +1 -0
  234. package/dist/strategies/layout/featured.d.ts +8 -0
  235. package/dist/strategies/layout/featured.d.ts.map +1 -0
  236. package/dist/strategies/layout/grid.d.ts +7 -0
  237. package/dist/strategies/layout/grid.d.ts.map +1 -0
  238. package/dist/strategies/layout/grid.js +36 -0
  239. package/dist/strategies/layout/grid.js.map +1 -0
  240. package/dist/strategies/layout/grid.mjs +36 -0
  241. package/dist/strategies/layout/grid.mjs.map +1 -0
  242. package/dist/strategies/layout/index.d.ts +4 -0
  243. package/dist/strategies/layout/index.d.ts.map +1 -0
  244. package/dist/types/api.d.ts +34 -0
  245. package/dist/types/api.d.ts.map +1 -0
  246. package/dist/types/core.d.ts +40 -0
  247. package/dist/types/core.d.ts.map +1 -0
  248. package/dist/types/data/academic.d.ts +6 -0
  249. package/dist/types/data/academic.d.ts.map +1 -0
  250. package/dist/types/data/events.d.ts +21 -0
  251. package/dist/types/data/events.d.ts.map +1 -0
  252. package/dist/types/data/experts.d.ts +53 -0
  253. package/dist/types/data/experts.d.ts.map +1 -0
  254. package/dist/types/data/index.d.ts +5 -0
  255. package/dist/types/data/index.d.ts.map +1 -0
  256. package/dist/types/data/news.d.ts +6 -0
  257. package/dist/types/data/news.d.ts.map +1 -0
  258. package/dist/types/feeds.d.ts +35 -0
  259. package/dist/types/feeds.d.ts.map +1 -0
  260. package/dist/types/index.d.ts +5 -0
  261. package/dist/types/index.d.ts.map +1 -0
  262. package/dist/widgets/index.d.ts +2 -0
  263. package/dist/widgets/index.d.ts.map +1 -0
  264. package/dist/widgets/slider.d.ts.map +1 -0
  265. package/dist/{macros → widgets}/slider.js +2 -4
  266. package/dist/{macros/slider.mjs.map → widgets/slider.js.map} +1 -1
  267. package/dist/{macros → widgets}/slider.mjs +2 -4
  268. package/dist/widgets/slider.mjs.map +1 -0
  269. package/package.json +17 -3
  270. package/dist/composite/academic/_types.d.ts.map +0 -1
  271. package/dist/composite/academic/index.d.ts.map +0 -1
  272. package/dist/composite/academic/slider.d.ts.map +0 -1
  273. package/dist/composite/academic/slider.js +0 -34
  274. package/dist/composite/academic/slider.js.map +0 -1
  275. package/dist/composite/academic/slider.mjs +0 -35
  276. package/dist/composite/academic/slider.mjs.map +0 -1
  277. package/dist/composite/events/_types.d.ts.map +0 -1
  278. package/dist/composite/events/common/data.d.ts +0 -48
  279. package/dist/composite/events/common/data.d.ts.map +0 -1
  280. package/dist/composite/events/common/data.js +0 -53
  281. package/dist/composite/events/common/data.js.map +0 -1
  282. package/dist/composite/events/common/data.mjs +0 -53
  283. package/dist/composite/events/common/data.mjs.map +0 -1
  284. package/dist/composite/events/common/display.d.ts +0 -18
  285. package/dist/composite/events/common/display.d.ts.map +0 -1
  286. package/dist/composite/events/common/display.js +0 -147
  287. package/dist/composite/events/common/display.js.map +0 -1
  288. package/dist/composite/events/common/display.mjs +0 -130
  289. package/dist/composite/events/common/display.mjs.map +0 -1
  290. package/dist/composite/events/common/fetch.d.ts +0 -24
  291. package/dist/composite/events/common/fetch.d.ts.map +0 -1
  292. package/dist/composite/events/common/fetch.js +0 -117
  293. package/dist/composite/events/common/fetch.js.map +0 -1
  294. package/dist/composite/events/common/fetch.mjs +0 -117
  295. package/dist/composite/events/common/fetch.mjs.map +0 -1
  296. package/dist/composite/events/common/queries.d.ts +0 -5
  297. package/dist/composite/events/common/queries.d.ts.map +0 -1
  298. package/dist/composite/events/common/queries.js +0 -113
  299. package/dist/composite/events/common/queries.js.map +0 -1
  300. package/dist/composite/events/common/queries.mjs +0 -113
  301. package/dist/composite/events/common/queries.mjs.map +0 -1
  302. package/dist/composite/events/grid.d.ts.map +0 -1
  303. package/dist/composite/events/grid.js +0 -90
  304. package/dist/composite/events/grid.js.map +0 -1
  305. package/dist/composite/events/grid.mjs +0 -91
  306. package/dist/composite/events/grid.mjs.map +0 -1
  307. package/dist/composite/events/grouped.d.ts.map +0 -1
  308. package/dist/composite/events/grouped.js +0 -300
  309. package/dist/composite/events/grouped.js.map +0 -1
  310. package/dist/composite/events/grouped.mjs +0 -284
  311. package/dist/composite/events/grouped.mjs.map +0 -1
  312. package/dist/composite/events/index.d.ts.map +0 -1
  313. package/dist/composite/events/list.d.ts.map +0 -1
  314. package/dist/composite/events/list.js +0 -90
  315. package/dist/composite/events/list.js.map +0 -1
  316. package/dist/composite/events/list.mjs +0 -91
  317. package/dist/composite/events/list.mjs.map +0 -1
  318. package/dist/composite/events/slider.d.ts.map +0 -1
  319. package/dist/composite/events/slider.js +0 -35
  320. package/dist/composite/events/slider.js.map +0 -1
  321. package/dist/composite/events/slider.mjs +0 -36
  322. package/dist/composite/events/slider.mjs.map +0 -1
  323. package/dist/composite/news/_types.d.ts.map +0 -1
  324. package/dist/composite/news/common/data.d.ts +0 -47
  325. package/dist/composite/news/common/data.d.ts.map +0 -1
  326. package/dist/composite/news/common/data.js +0 -62
  327. package/dist/composite/news/common/data.js.map +0 -1
  328. package/dist/composite/news/common/data.mjs +0 -62
  329. package/dist/composite/news/common/data.mjs.map +0 -1
  330. package/dist/composite/news/common/display.d.ts +0 -17
  331. package/dist/composite/news/common/display.d.ts.map +0 -1
  332. package/dist/composite/news/common/display.js +0 -147
  333. package/dist/composite/news/common/display.js.map +0 -1
  334. package/dist/composite/news/common/display.mjs +0 -130
  335. package/dist/composite/news/common/display.mjs.map +0 -1
  336. package/dist/composite/news/common/fetch.d.ts +0 -22
  337. package/dist/composite/news/common/fetch.d.ts.map +0 -1
  338. package/dist/composite/news/common/fetch.js +0 -87
  339. package/dist/composite/news/common/fetch.js.map +0 -1
  340. package/dist/composite/news/common/fetch.mjs +0 -87
  341. package/dist/composite/news/common/fetch.mjs.map +0 -1
  342. package/dist/composite/news/common/queries.d.ts +0 -2
  343. package/dist/composite/news/common/queries.d.ts.map +0 -1
  344. package/dist/composite/news/common/queries.js +0 -37
  345. package/dist/composite/news/common/queries.js.map +0 -1
  346. package/dist/composite/news/common/queries.mjs +0 -37
  347. package/dist/composite/news/common/queries.mjs.map +0 -1
  348. package/dist/composite/news/featured.d.ts.map +0 -1
  349. package/dist/composite/news/featured.js +0 -182
  350. package/dist/composite/news/featured.js.map +0 -1
  351. package/dist/composite/news/featured.mjs +0 -183
  352. package/dist/composite/news/featured.mjs.map +0 -1
  353. package/dist/composite/news/grid.d.ts.map +0 -1
  354. package/dist/composite/news/grid.js +0 -98
  355. package/dist/composite/news/grid.js.map +0 -1
  356. package/dist/composite/news/grid.mjs +0 -99
  357. package/dist/composite/news/grid.mjs.map +0 -1
  358. package/dist/composite/news/index.d.ts.map +0 -1
  359. package/dist/composite/news/list.d.ts.map +0 -1
  360. package/dist/composite/news/list.js +0 -85
  361. package/dist/composite/news/list.js.map +0 -1
  362. package/dist/composite/news/list.mjs +0 -86
  363. package/dist/composite/news/list.mjs.map +0 -1
  364. package/dist/elements/asset.d.ts +0 -10
  365. package/dist/elements/asset.d.ts.map +0 -1
  366. package/dist/elements/asset.js +0 -27
  367. package/dist/elements/asset.js.map +0 -1
  368. package/dist/elements/asset.mjs +0 -27
  369. package/dist/elements/asset.mjs.map +0 -1
  370. package/dist/elements/index.d.ts +0 -4
  371. package/dist/elements/index.d.ts.map +0 -1
  372. package/dist/elements/layout.d.ts +0 -27
  373. package/dist/elements/layout.d.ts.map +0 -1
  374. package/dist/elements/layout.js +0 -121
  375. package/dist/elements/layout.js.map +0 -1
  376. package/dist/elements/layout.mjs +0 -104
  377. package/dist/elements/layout.mjs.map +0 -1
  378. package/dist/elements/text.d.ts +0 -12
  379. package/dist/elements/text.d.ts.map +0 -1
  380. package/dist/elements/text.js +0 -41
  381. package/dist/elements/text.js.map +0 -1
  382. package/dist/elements/text.mjs +0 -41
  383. package/dist/elements/text.mjs.map +0 -1
  384. package/dist/macros/aria-live.d.ts +0 -11
  385. package/dist/macros/aria-live.d.ts.map +0 -1
  386. package/dist/macros/aria-live.js +0 -25
  387. package/dist/macros/aria-live.js.map +0 -1
  388. package/dist/macros/aria-live.mjs +0 -26
  389. package/dist/macros/aria-live.mjs.map +0 -1
  390. package/dist/macros/index.d.ts +0 -6
  391. package/dist/macros/index.d.ts.map +0 -1
  392. package/dist/macros/lazy-load.d.ts +0 -19
  393. package/dist/macros/lazy-load.d.ts.map +0 -1
  394. package/dist/macros/lazy-load.js +0 -63
  395. package/dist/macros/lazy-load.js.map +0 -1
  396. package/dist/macros/lazy-load.mjs +0 -47
  397. package/dist/macros/lazy-load.mjs.map +0 -1
  398. package/dist/macros/loader.d.ts +0 -18
  399. package/dist/macros/loader.d.ts.map +0 -1
  400. package/dist/macros/loader.js +0 -148
  401. package/dist/macros/loader.js.map +0 -1
  402. package/dist/macros/loader.mjs +0 -132
  403. package/dist/macros/loader.mjs.map +0 -1
  404. package/dist/macros/no-results.d.ts +0 -15
  405. package/dist/macros/no-results.d.ts.map +0 -1
  406. package/dist/macros/no-results.js +0 -71
  407. package/dist/macros/no-results.js.map +0 -1
  408. package/dist/macros/no-results.mjs +0 -55
  409. package/dist/macros/no-results.mjs.map +0 -1
  410. package/dist/macros/slider.d.ts.map +0 -1
  411. package/dist/macros/slider.js.map +0 -1
  412. package/dist/utilities/events/index.d.ts.map +0 -1
  413. package/dist/utilities/events/index.js.map +0 -1
  414. package/dist/utilities/events/index.mjs.map +0 -1
  415. package/dist/utilities/index.d.ts +0 -3
  416. package/dist/utilities/index.d.ts.map +0 -1
  417. package/dist/utilities/network/fetch.d.ts.map +0 -1
  418. package/dist/utilities/network/index.d.ts.map +0 -1
  419. /package/dist/{composite → feeds}/academic/_types.d.ts +0 -0
  420. /package/dist/{composite → feeds}/academic/index.d.ts +0 -0
  421. /package/dist/{composite → feeds}/academic/slider.d.ts +0 -0
  422. /package/dist/{composite → feeds}/events/_types.d.ts +0 -0
  423. /package/dist/{composite → feeds}/events/grid.d.ts +0 -0
  424. /package/dist/{composite → feeds}/events/grouped.d.ts +0 -0
  425. /package/dist/{composite → feeds}/events/index.d.ts +0 -0
  426. /package/dist/{composite → feeds}/events/list.d.ts +0 -0
  427. /package/dist/{composite → feeds}/events/slider.d.ts +0 -0
  428. /package/dist/{composite/news → feeds/experts}/list.d.ts +0 -0
  429. /package/dist/{composite → feeds}/news/_types.d.ts +0 -0
  430. /package/dist/{composite → feeds}/news/featured.d.ts +0 -0
  431. /package/dist/{composite → feeds}/news/grid.d.ts +0 -0
  432. /package/dist/{composite → feeds}/news/index.d.ts +0 -0
  433. /package/dist/{utilities → helpers}/network/fetch.d.ts +0 -0
  434. /package/dist/{utilities → helpers}/network/index.d.ts +0 -0
  435. /package/dist/{macros → widgets}/slider.d.ts +0 -0
@@ -1,6 +1,8 @@
1
1
  const eventNames = {
2
2
  /** Triggered when a feed has finished loading its content */
3
3
  FEED_LOADED: "feed:loaded",
4
+ /** Triggered when a feed loads more content (lazy loading/pagination) */
5
+ FEED_LOADED_MORE: "feed:loaded:more",
4
6
  /** Triggered when an error occurs during feed loading or processing */
5
7
  FEED_ERROR: "feed:error"
6
8
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../source/helpers/events/index.ts"],"sourcesContent":["/**\n * Event names supported by the feeds library.\n * These can be used for consistent event handling across implementations.\n */\nexport const eventNames = {\n /** Triggered when a feed has finished loading its content */\n FEED_LOADED: 'feed:loaded',\n\n /** Triggered when a feed loads more content (lazy loading/pagination) */\n FEED_LOADED_MORE: 'feed:loaded:more',\n\n /** Triggered when an error occurs during feed loading or processing */\n FEED_ERROR: 'feed:error',\n};\n\n/**\n * Custom event details for different feed events.\n */\nexport interface FeedEventDetails {\n /** Items in the feed that have been loaded */\n items?: any[];\n\n /** Error information if a feed failed to load */\n error?: Error | string;\n\n /** Information about a specific item that was clicked */\n item?: any;\n\n /** Additional custom data that may be included with any event */\n [key: string]: any;\n}\n\n/**\n * Dispatches a custom feed event on the specified element.\n *\n * @param element - The element to dispatch the event on\n * @param eventName - Name of the event to dispatch (use eventNames constants for consistency)\n * @param detail - Event details to include\n * @returns True if the event was dispatched successfully and not cancelled\n *\n * @example\n * ```typescript\n * import { events } from '@universityofmaryland/web-feeds-library/utilities';\n *\n * // Dispatch a feed loaded event\n * events.dispatch(feedContainer, events.eventNames.FEED_LOADED, { items: loadedItems });\n *\n * // Listen for feed loaded events\n * feedContainer.addEventListener(events.eventNames.FEED_LOADED, (event) => {\n * console.log('Feed loaded with', event.detail.items.length, 'items');\n * });\n * ```\n */\nexport const dispatch = (\n element: HTMLElement,\n eventName: string,\n detail: FeedEventDetails,\n): boolean => {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n cancelable: true,\n });\n\n return element.dispatchEvent(event);\n};\n\n/**\n * Adds an event listener for a specific feed event with proper TypeScript typings for the event detail.\n *\n * @param element - The element to attach the event listener to\n * @param eventName - Name of the event to listen for (use eventNames constants for consistency)\n * @param callback - Function to call when the event is triggered\n * @param options - Standard addEventListener options (capture, once, passive, etc.)\n * @returns A function that removes the event listener when called\n *\n * @example\n * ```typescript\n * import { events } from '@universityofmaryland/web-feeds-library/utilities';\n *\n * // Add a typed event listener\n * const removeListener = events.listen(\n * feedContainer,\n * events.eventNames.FEED_LOADED,\n * (detail) => console.log('Feed loaded with', detail.items.length, 'items')\n * );\n *\n * // Later, if needed:\n * removeListener();\n * ```\n */\nexport const listen = (\n element: HTMLElement,\n eventName: string,\n callback: (detail: FeedEventDetails) => void,\n options?: AddEventListenerOptions,\n): (() => void) => {\n const eventListener = (event: Event) => {\n const customEvent = event as CustomEvent<FeedEventDetails>;\n callback(customEvent.detail);\n };\n\n element.addEventListener(eventName, eventListener, options);\n\n return () => {\n element.removeEventListener(eventName, eventListener, options);\n };\n};\n"],"names":[],"mappings":"AAIO,MAAM,aAAa;AAAA;AAAA,EAExB,aAAa;AAAA;AAAA,EAGb,kBAAkB;AAAA;AAAA,EAGlB,YAAY;AACd;AAwCO,MAAM,WAAW,CACtB,SACA,WACA,WACY;AACZ,QAAM,QAAQ,IAAI,YAAY,WAAW;AAAA,IACvC;AAAA,IACA,SAAS;AAAA,IACT,YAAY;AAAA,EAAA,CACb;AAED,SAAO,QAAQ,cAAc,KAAK;AACpC;"}
@@ -0,0 +1,14 @@
1
+ import { EventEntry } from '../../types/data';
2
+ export interface GroupedEvent {
3
+ date: string;
4
+ events: EventEntry[];
5
+ }
6
+ export declare const getDateBanner: (dateStamp: string) => string;
7
+ export declare const parseLocalDate: (dateString: string) => Date;
8
+ export declare const getEventStartDate: (event: EventEntry) => Date;
9
+ export declare const isMultiDayEvent: (event: EventEntry) => boolean;
10
+ export declare const eventStartsOnDate: (event: EventEntry, targetDate: Date) => boolean;
11
+ export declare const getEventPriority: (event: EventEntry, groupDate: Date) => number;
12
+ export declare const sortEventsByPriority: (events: EventEntry[], groupDate: Date) => EventEntry[];
13
+ export declare const groupEventsByDate: (events: EventEntry[]) => GroupedEvent[];
14
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../source/helpers/grouping/events.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAsBD,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,KAAG,MAqEjD,CAAC;AAKF,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,KAAG,IASnD,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,OAAO,UAAU,KAAG,IAErD,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,OAAO,UAAU,KAAG,OAQnD,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,OAAO,UAAU,EAAE,YAAY,IAAI,KAAG,OAGvE,CAAC;AAUF,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,EAAE,WAAW,IAAI,KAAG,MAOrE,CAAC;AAKF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,UAAU,EAAE,EACpB,WAAW,IAAI,KACd,UAAU,EAMZ,CAAC;AAQF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,UAAU,EAAE,KAAG,YAAY,EAwCpE,CAAC"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const MONTH_MAP = {
4
+ Jan: "01",
5
+ Feb: "02",
6
+ Mar: "03",
7
+ Apr: "04",
8
+ May: "05",
9
+ Jun: "06",
10
+ Jul: "07",
11
+ Aug: "08",
12
+ Sep: "09",
13
+ Oct: "10",
14
+ Nov: "11",
15
+ Dec: "12"
16
+ };
17
+ const getDateBanner = (dateStamp) => {
18
+ const dateParts = dateStamp.split("T")[0].split("-");
19
+ const year = parseInt(dateParts[0], 10);
20
+ const month = parseInt(dateParts[1], 10) - 1;
21
+ const day = parseInt(dateParts[2], 10);
22
+ const eventDate = new Date(year, month, day);
23
+ const currentDate = /* @__PURE__ */ new Date();
24
+ currentDate.setHours(0, 0, 0, 0);
25
+ const weekFromNow = /* @__PURE__ */ new Date();
26
+ weekFromNow.setDate(currentDate.getDate() + 7);
27
+ weekFromNow.setHours(0, 0, 0, 0);
28
+ if (eventDate.getFullYear() === currentDate.getFullYear() && eventDate.getMonth() === currentDate.getMonth() && eventDate.getDate() === currentDate.getDate()) {
29
+ return "Today";
30
+ }
31
+ if (eventDate.getTime() > currentDate.getTime() && eventDate.getTime() <= weekFromNow.getTime()) {
32
+ const days2 = [
33
+ "Sunday",
34
+ "Monday",
35
+ "Tuesday",
36
+ "Wednesday",
37
+ "Thursday",
38
+ "Friday",
39
+ "Saturday"
40
+ ];
41
+ return days2[eventDate.getDay()];
42
+ }
43
+ const days = [
44
+ "Sunday",
45
+ "Monday",
46
+ "Tuesday",
47
+ "Wednesday",
48
+ "Thursday",
49
+ "Friday",
50
+ "Saturday"
51
+ ];
52
+ const months = [
53
+ "Jan",
54
+ "Feb",
55
+ "Mar",
56
+ "Apr",
57
+ "May",
58
+ "Jun",
59
+ "Jul",
60
+ "Aug",
61
+ "Sep",
62
+ "Oct",
63
+ "Nov",
64
+ "Dec"
65
+ ];
66
+ return `${days[eventDate.getDay()]}, ${months[eventDate.getMonth()]} ${eventDate.getDate()}`;
67
+ };
68
+ const parseLocalDate = (dateString) => {
69
+ const parts = dateString.split("-");
70
+ const date = new Date(
71
+ parseInt(parts[0], 10),
72
+ parseInt(parts[1], 10) - 1,
73
+ parseInt(parts[2], 10)
74
+ );
75
+ date.setHours(0, 0, 0, 0);
76
+ return date;
77
+ };
78
+ const getEventStartDate = (event) => {
79
+ return parseLocalDate(event.startStamp.split("T")[0]);
80
+ };
81
+ const isMultiDayEvent = (event) => {
82
+ const startParts = event.startStamp.split("T")[0].split("-");
83
+ const startMonth = startParts[1];
84
+ const startDay = startParts[2];
85
+ const endMonth = MONTH_MAP[event.endMonth || ""];
86
+ const endDay = (event.endDay || "").padStart(2, "0");
87
+ return !(startMonth === endMonth && startDay === endDay);
88
+ };
89
+ const eventStartsOnDate = (event, targetDate) => {
90
+ const eventStartDate = getEventStartDate(event);
91
+ return eventStartDate.getTime() === targetDate.getTime();
92
+ };
93
+ const getEventPriority = (event, groupDate) => {
94
+ const isMulti = isMultiDayEvent(event);
95
+ const startsOnDate = eventStartsOnDate(event, groupDate);
96
+ if (isMulti && startsOnDate) return 1;
97
+ if (!isMulti) return 2;
98
+ return 3;
99
+ };
100
+ const sortEventsByPriority = (events, groupDate) => {
101
+ return [...events].sort((a, b) => {
102
+ const aPriority = getEventPriority(a, groupDate);
103
+ const bPriority = getEventPriority(b, groupDate);
104
+ return aPriority - bPriority;
105
+ });
106
+ };
107
+ const groupEventsByDate = (events) => {
108
+ const currentDate = /* @__PURE__ */ new Date();
109
+ currentDate.setHours(0, 0, 0, 0);
110
+ const grouped = events.reduce((acc, event) => {
111
+ const eventDate = getEventStartDate(event);
112
+ const dateKey = eventDate < currentDate ? currentDate.toISOString().split("T")[0] : event.startStamp;
113
+ if (!acc[dateKey]) {
114
+ acc[dateKey] = {
115
+ date: getDateBanner(dateKey),
116
+ events: []
117
+ };
118
+ }
119
+ acc[dateKey].events.push(event);
120
+ return acc;
121
+ }, {});
122
+ Object.keys(grouped).forEach((dateKey) => {
123
+ const groupDate = parseLocalDate(dateKey);
124
+ grouped[dateKey].events = sortEventsByPriority(
125
+ grouped[dateKey].events,
126
+ groupDate
127
+ );
128
+ });
129
+ return Object.values(grouped).sort((a, b) => {
130
+ const dateA = new Date(
131
+ Object.keys(grouped).find((key) => grouped[key] === a) || ""
132
+ );
133
+ const dateB = new Date(
134
+ Object.keys(grouped).find((key) => grouped[key] === b) || ""
135
+ );
136
+ return dateA.getTime() - dateB.getTime();
137
+ });
138
+ };
139
+ exports.eventStartsOnDate = eventStartsOnDate;
140
+ exports.getDateBanner = getDateBanner;
141
+ exports.getEventPriority = getEventPriority;
142
+ exports.getEventStartDate = getEventStartDate;
143
+ exports.groupEventsByDate = groupEventsByDate;
144
+ exports.isMultiDayEvent = isMultiDayEvent;
145
+ exports.parseLocalDate = parseLocalDate;
146
+ exports.sortEventsByPriority = sortEventsByPriority;
147
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sources":["../../../source/helpers/grouping/events.ts"],"sourcesContent":["/**\n * Event Grouping Utilities\n *\n * Utilities for grouping and sorting events by date.\n * Used by the grouped events feed.\n *\n * @module utilities/grouping/events\n */\n\nimport { EventEntry } from 'types/data';\n\nexport interface GroupedEvent {\n date: string;\n events: EventEntry[];\n}\n\nconst MONTH_MAP: Record<string, string> = {\n Jan: '01',\n Feb: '02',\n Mar: '03',\n Apr: '04',\n May: '05',\n Jun: '06',\n Jul: '07',\n Aug: '08',\n Sep: '09',\n Oct: '10',\n Nov: '11',\n Dec: '12',\n};\n\n/**\n * Get a human-readable date banner\n *\n * Returns \"Today\", day name (within 7 days), or formatted date\n */\nexport const getDateBanner = (dateStamp: string): string => {\n // Parse the date string more reliably\n const dateParts = dateStamp.split('T')[0].split('-');\n const year = parseInt(dateParts[0], 10);\n const month = parseInt(dateParts[1], 10) - 1; // Month is 0-indexed\n const day = parseInt(dateParts[2], 10);\n\n // Create dates using local timezone\n const eventDate = new Date(year, month, day);\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const weekFromNow = new Date();\n weekFromNow.setDate(currentDate.getDate() + 7);\n weekFromNow.setHours(0, 0, 0, 0);\n\n // Check if it's today\n if (\n eventDate.getFullYear() === currentDate.getFullYear() &&\n eventDate.getMonth() === currentDate.getMonth() &&\n eventDate.getDate() === currentDate.getDate()\n ) {\n return 'Today';\n }\n\n // Check if it's within the next 7 days\n if (\n eventDate.getTime() > currentDate.getTime() &&\n eventDate.getTime() <= weekFromNow.getTime()\n ) {\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n return days[eventDate.getDay()];\n }\n\n // Otherwise return day of week, month and day\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `${days[eventDate.getDay()]}, ${\n months[eventDate.getMonth()]\n } ${eventDate.getDate()}`;\n};\n\n/**\n * Parse a date string to local Date object\n */\nexport const parseLocalDate = (dateString: string): Date => {\n const parts = dateString.split('-');\n const date = new Date(\n parseInt(parts[0], 10),\n parseInt(parts[1], 10) - 1,\n parseInt(parts[2], 10),\n );\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\n/**\n * Get the start date of an event\n */\nexport const getEventStartDate = (event: EventEntry): Date => {\n return parseLocalDate(event.startStamp.split('T')[0]);\n};\n\n/**\n * Check if an event spans multiple days\n */\nexport const isMultiDayEvent = (event: EventEntry): boolean => {\n const startParts = event.startStamp.split('T')[0].split('-');\n const startMonth = startParts[1];\n const startDay = startParts[2];\n const endMonth = MONTH_MAP[event.endMonth || ''];\n const endDay = (event.endDay || '').padStart(2, '0');\n\n return !(startMonth === endMonth && startDay === endDay);\n};\n\n/**\n * Check if an event starts on a specific date\n */\nexport const eventStartsOnDate = (event: EventEntry, targetDate: Date): boolean => {\n const eventStartDate = getEventStartDate(event);\n return eventStartDate.getTime() === targetDate.getTime();\n};\n\n/**\n * Get event priority for sorting within a date group\n *\n * Priority:\n * 1. Multi-day events that start on this date\n * 2. Single-day events\n * 3. Multi-day events that don't start on this date\n */\nexport const getEventPriority = (event: EventEntry, groupDate: Date): number => {\n const isMulti = isMultiDayEvent(event);\n const startsOnDate = eventStartsOnDate(event, groupDate);\n\n if (isMulti && startsOnDate) return 1;\n if (!isMulti) return 2;\n return 3;\n};\n\n/**\n * Sort events by priority within a date group\n */\nexport const sortEventsByPriority = (\n events: EventEntry[],\n groupDate: Date,\n): EventEntry[] => {\n return [...events].sort((a, b) => {\n const aPriority = getEventPriority(a, groupDate);\n const bPriority = getEventPriority(b, groupDate);\n return aPriority - bPriority;\n });\n};\n\n/**\n * Group events by date\n *\n * Groups events by their start date, with past events grouped under today.\n * Each group is sorted by priority (multi-day events starting today first).\n */\nexport const groupEventsByDate = (events: EventEntry[]): GroupedEvent[] => {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const grouped = events.reduce((acc, event) => {\n const eventDate = getEventStartDate(event);\n const dateKey =\n eventDate < currentDate\n ? currentDate.toISOString().split('T')[0]\n : event.startStamp;\n\n if (!acc[dateKey]) {\n acc[dateKey] = {\n date: getDateBanner(dateKey),\n events: [],\n };\n }\n acc[dateKey].events.push(event);\n return acc;\n }, {} as Record<string, GroupedEvent>);\n\n // Sort events within each group by priority\n Object.keys(grouped).forEach((dateKey) => {\n const groupDate = parseLocalDate(dateKey);\n grouped[dateKey].events = sortEventsByPriority(\n grouped[dateKey].events,\n groupDate,\n );\n });\n\n // Return groups sorted by date\n return Object.values(grouped).sort((a, b) => {\n const dateA = new Date(\n Object.keys(grouped).find((key) => grouped[key] === a) || '',\n );\n const dateB = new Date(\n Object.keys(grouped).find((key) => grouped[key] === b) || '',\n );\n return dateA.getTime() - dateB.getTime();\n });\n};\n"],"names":["days"],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ const MONTH_MAP = {
2
+ Jan: "01",
3
+ Feb: "02",
4
+ Mar: "03",
5
+ Apr: "04",
6
+ May: "05",
7
+ Jun: "06",
8
+ Jul: "07",
9
+ Aug: "08",
10
+ Sep: "09",
11
+ Oct: "10",
12
+ Nov: "11",
13
+ Dec: "12"
14
+ };
15
+ const getDateBanner = (dateStamp) => {
16
+ const dateParts = dateStamp.split("T")[0].split("-");
17
+ const year = parseInt(dateParts[0], 10);
18
+ const month = parseInt(dateParts[1], 10) - 1;
19
+ const day = parseInt(dateParts[2], 10);
20
+ const eventDate = new Date(year, month, day);
21
+ const currentDate = /* @__PURE__ */ new Date();
22
+ currentDate.setHours(0, 0, 0, 0);
23
+ const weekFromNow = /* @__PURE__ */ new Date();
24
+ weekFromNow.setDate(currentDate.getDate() + 7);
25
+ weekFromNow.setHours(0, 0, 0, 0);
26
+ if (eventDate.getFullYear() === currentDate.getFullYear() && eventDate.getMonth() === currentDate.getMonth() && eventDate.getDate() === currentDate.getDate()) {
27
+ return "Today";
28
+ }
29
+ if (eventDate.getTime() > currentDate.getTime() && eventDate.getTime() <= weekFromNow.getTime()) {
30
+ const days2 = [
31
+ "Sunday",
32
+ "Monday",
33
+ "Tuesday",
34
+ "Wednesday",
35
+ "Thursday",
36
+ "Friday",
37
+ "Saturday"
38
+ ];
39
+ return days2[eventDate.getDay()];
40
+ }
41
+ const days = [
42
+ "Sunday",
43
+ "Monday",
44
+ "Tuesday",
45
+ "Wednesday",
46
+ "Thursday",
47
+ "Friday",
48
+ "Saturday"
49
+ ];
50
+ const months = [
51
+ "Jan",
52
+ "Feb",
53
+ "Mar",
54
+ "Apr",
55
+ "May",
56
+ "Jun",
57
+ "Jul",
58
+ "Aug",
59
+ "Sep",
60
+ "Oct",
61
+ "Nov",
62
+ "Dec"
63
+ ];
64
+ return `${days[eventDate.getDay()]}, ${months[eventDate.getMonth()]} ${eventDate.getDate()}`;
65
+ };
66
+ const parseLocalDate = (dateString) => {
67
+ const parts = dateString.split("-");
68
+ const date = new Date(
69
+ parseInt(parts[0], 10),
70
+ parseInt(parts[1], 10) - 1,
71
+ parseInt(parts[2], 10)
72
+ );
73
+ date.setHours(0, 0, 0, 0);
74
+ return date;
75
+ };
76
+ const getEventStartDate = (event) => {
77
+ return parseLocalDate(event.startStamp.split("T")[0]);
78
+ };
79
+ const isMultiDayEvent = (event) => {
80
+ const startParts = event.startStamp.split("T")[0].split("-");
81
+ const startMonth = startParts[1];
82
+ const startDay = startParts[2];
83
+ const endMonth = MONTH_MAP[event.endMonth || ""];
84
+ const endDay = (event.endDay || "").padStart(2, "0");
85
+ return !(startMonth === endMonth && startDay === endDay);
86
+ };
87
+ const eventStartsOnDate = (event, targetDate) => {
88
+ const eventStartDate = getEventStartDate(event);
89
+ return eventStartDate.getTime() === targetDate.getTime();
90
+ };
91
+ const getEventPriority = (event, groupDate) => {
92
+ const isMulti = isMultiDayEvent(event);
93
+ const startsOnDate = eventStartsOnDate(event, groupDate);
94
+ if (isMulti && startsOnDate) return 1;
95
+ if (!isMulti) return 2;
96
+ return 3;
97
+ };
98
+ const sortEventsByPriority = (events, groupDate) => {
99
+ return [...events].sort((a, b) => {
100
+ const aPriority = getEventPriority(a, groupDate);
101
+ const bPriority = getEventPriority(b, groupDate);
102
+ return aPriority - bPriority;
103
+ });
104
+ };
105
+ const groupEventsByDate = (events) => {
106
+ const currentDate = /* @__PURE__ */ new Date();
107
+ currentDate.setHours(0, 0, 0, 0);
108
+ const grouped = events.reduce((acc, event) => {
109
+ const eventDate = getEventStartDate(event);
110
+ const dateKey = eventDate < currentDate ? currentDate.toISOString().split("T")[0] : event.startStamp;
111
+ if (!acc[dateKey]) {
112
+ acc[dateKey] = {
113
+ date: getDateBanner(dateKey),
114
+ events: []
115
+ };
116
+ }
117
+ acc[dateKey].events.push(event);
118
+ return acc;
119
+ }, {});
120
+ Object.keys(grouped).forEach((dateKey) => {
121
+ const groupDate = parseLocalDate(dateKey);
122
+ grouped[dateKey].events = sortEventsByPriority(
123
+ grouped[dateKey].events,
124
+ groupDate
125
+ );
126
+ });
127
+ return Object.values(grouped).sort((a, b) => {
128
+ const dateA = new Date(
129
+ Object.keys(grouped).find((key) => grouped[key] === a) || ""
130
+ );
131
+ const dateB = new Date(
132
+ Object.keys(grouped).find((key) => grouped[key] === b) || ""
133
+ );
134
+ return dateA.getTime() - dateB.getTime();
135
+ });
136
+ };
137
+ export {
138
+ eventStartsOnDate,
139
+ getDateBanner,
140
+ getEventPriority,
141
+ getEventStartDate,
142
+ groupEventsByDate,
143
+ isMultiDayEvent,
144
+ parseLocalDate,
145
+ sortEventsByPriority
146
+ };
147
+ //# sourceMappingURL=events.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.mjs","sources":["../../../source/helpers/grouping/events.ts"],"sourcesContent":["/**\n * Event Grouping Utilities\n *\n * Utilities for grouping and sorting events by date.\n * Used by the grouped events feed.\n *\n * @module utilities/grouping/events\n */\n\nimport { EventEntry } from 'types/data';\n\nexport interface GroupedEvent {\n date: string;\n events: EventEntry[];\n}\n\nconst MONTH_MAP: Record<string, string> = {\n Jan: '01',\n Feb: '02',\n Mar: '03',\n Apr: '04',\n May: '05',\n Jun: '06',\n Jul: '07',\n Aug: '08',\n Sep: '09',\n Oct: '10',\n Nov: '11',\n Dec: '12',\n};\n\n/**\n * Get a human-readable date banner\n *\n * Returns \"Today\", day name (within 7 days), or formatted date\n */\nexport const getDateBanner = (dateStamp: string): string => {\n // Parse the date string more reliably\n const dateParts = dateStamp.split('T')[0].split('-');\n const year = parseInt(dateParts[0], 10);\n const month = parseInt(dateParts[1], 10) - 1; // Month is 0-indexed\n const day = parseInt(dateParts[2], 10);\n\n // Create dates using local timezone\n const eventDate = new Date(year, month, day);\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const weekFromNow = new Date();\n weekFromNow.setDate(currentDate.getDate() + 7);\n weekFromNow.setHours(0, 0, 0, 0);\n\n // Check if it's today\n if (\n eventDate.getFullYear() === currentDate.getFullYear() &&\n eventDate.getMonth() === currentDate.getMonth() &&\n eventDate.getDate() === currentDate.getDate()\n ) {\n return 'Today';\n }\n\n // Check if it's within the next 7 days\n if (\n eventDate.getTime() > currentDate.getTime() &&\n eventDate.getTime() <= weekFromNow.getTime()\n ) {\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n return days[eventDate.getDay()];\n }\n\n // Otherwise return day of week, month and day\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `${days[eventDate.getDay()]}, ${\n months[eventDate.getMonth()]\n } ${eventDate.getDate()}`;\n};\n\n/**\n * Parse a date string to local Date object\n */\nexport const parseLocalDate = (dateString: string): Date => {\n const parts = dateString.split('-');\n const date = new Date(\n parseInt(parts[0], 10),\n parseInt(parts[1], 10) - 1,\n parseInt(parts[2], 10),\n );\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\n/**\n * Get the start date of an event\n */\nexport const getEventStartDate = (event: EventEntry): Date => {\n return parseLocalDate(event.startStamp.split('T')[0]);\n};\n\n/**\n * Check if an event spans multiple days\n */\nexport const isMultiDayEvent = (event: EventEntry): boolean => {\n const startParts = event.startStamp.split('T')[0].split('-');\n const startMonth = startParts[1];\n const startDay = startParts[2];\n const endMonth = MONTH_MAP[event.endMonth || ''];\n const endDay = (event.endDay || '').padStart(2, '0');\n\n return !(startMonth === endMonth && startDay === endDay);\n};\n\n/**\n * Check if an event starts on a specific date\n */\nexport const eventStartsOnDate = (event: EventEntry, targetDate: Date): boolean => {\n const eventStartDate = getEventStartDate(event);\n return eventStartDate.getTime() === targetDate.getTime();\n};\n\n/**\n * Get event priority for sorting within a date group\n *\n * Priority:\n * 1. Multi-day events that start on this date\n * 2. Single-day events\n * 3. Multi-day events that don't start on this date\n */\nexport const getEventPriority = (event: EventEntry, groupDate: Date): number => {\n const isMulti = isMultiDayEvent(event);\n const startsOnDate = eventStartsOnDate(event, groupDate);\n\n if (isMulti && startsOnDate) return 1;\n if (!isMulti) return 2;\n return 3;\n};\n\n/**\n * Sort events by priority within a date group\n */\nexport const sortEventsByPriority = (\n events: EventEntry[],\n groupDate: Date,\n): EventEntry[] => {\n return [...events].sort((a, b) => {\n const aPriority = getEventPriority(a, groupDate);\n const bPriority = getEventPriority(b, groupDate);\n return aPriority - bPriority;\n });\n};\n\n/**\n * Group events by date\n *\n * Groups events by their start date, with past events grouped under today.\n * Each group is sorted by priority (multi-day events starting today first).\n */\nexport const groupEventsByDate = (events: EventEntry[]): GroupedEvent[] => {\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n\n const grouped = events.reduce((acc, event) => {\n const eventDate = getEventStartDate(event);\n const dateKey =\n eventDate < currentDate\n ? currentDate.toISOString().split('T')[0]\n : event.startStamp;\n\n if (!acc[dateKey]) {\n acc[dateKey] = {\n date: getDateBanner(dateKey),\n events: [],\n };\n }\n acc[dateKey].events.push(event);\n return acc;\n }, {} as Record<string, GroupedEvent>);\n\n // Sort events within each group by priority\n Object.keys(grouped).forEach((dateKey) => {\n const groupDate = parseLocalDate(dateKey);\n grouped[dateKey].events = sortEventsByPriority(\n grouped[dateKey].events,\n groupDate,\n );\n });\n\n // Return groups sorted by date\n return Object.values(grouped).sort((a, b) => {\n const dateA = new Date(\n Object.keys(grouped).find((key) => grouped[key] === a) || '',\n );\n const dateB = new Date(\n Object.keys(grouped).find((key) => grouped[key] === b) || '',\n );\n return dateA.getTime() - dateB.getTime();\n });\n};\n"],"names":["days"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { groupEventsByDate, sortEventsByPriority, getDateBanner, getEventPriority, getEventStartDate, parseLocalDate, isMultiDayEvent, eventStartsOnDate, type GroupedEvent, } from './events';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/helpers/grouping/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * as network from './network';
2
+ export * as events from './events';
3
+ export * as grouping from './grouping';
4
+ export * as styles from './styles';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../source/helpers/network/fetch.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,mCAK3B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,iBA8BA,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/helpers/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { setShadowStyles, updateShadowStyles } from './shadow';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/helpers/styles/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const setShadowStyles: ({ shadowRoot, styles, }: {
2
+ shadowRoot: ShadowRoot;
3
+ styles: string;
4
+ }) => Promise<void>;
5
+ export declare const updateShadowStyles: ({ shadowRoot, styles, replace, }: {
6
+ shadowRoot: ShadowRoot;
7
+ styles: string;
8
+ replace?: boolean;
9
+ }) => Promise<void>;
10
+ //# sourceMappingURL=shadow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.d.ts","sourceRoot":"","sources":["../../../source/helpers/styles/shadow.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,eAAe,GAAU,yBAGnC;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,OAAO,CAAC,IAAI,CAOf,CAAC;AA6BF,eAAO,MAAM,kBAAkB,GAAU,kCAItC;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,KAAG,OAAO,CAAC,IAAI,CAQf,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const Styles = require("@universityofmaryland/web-styles-library");
4
+ function _interopNamespaceDefault(e) {
5
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
6
+ if (e) {
7
+ for (const k in e) {
8
+ if (k !== "default") {
9
+ const d = Object.getOwnPropertyDescriptor(e, k);
10
+ Object.defineProperty(n, k, d.get ? d : {
11
+ enumerable: true,
12
+ get: () => e[k]
13
+ });
14
+ }
15
+ }
16
+ }
17
+ n.default = e;
18
+ return Object.freeze(n);
19
+ }
20
+ const Styles__namespace = /* @__PURE__ */ _interopNamespaceDefault(Styles);
21
+ const setShadowStyles = async ({
22
+ shadowRoot,
23
+ styles
24
+ }) => {
25
+ const styleElement = document.createElement("style");
26
+ const optimizedCss = await Styles__namespace.utilities.transform.css.removeDuplicates(
27
+ styles
28
+ );
29
+ styleElement.textContent = optimizedCss;
30
+ shadowRoot.appendChild(styleElement);
31
+ };
32
+ exports.setShadowStyles = setShadowStyles;
33
+ //# sourceMappingURL=shadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.js","sources":["../../../source/helpers/styles/shadow.ts"],"sourcesContent":["/**\n * Shadow DOM Styles Utility\n *\n * Utilities for managing styles within Shadow DOM contexts.\n *\n * @module utilities/styles/shadow\n */\n\nimport * as Styles from '@universityofmaryland/web-styles-library';\n\n/**\n * Sets optimized styles on a shadow root\n *\n * This function takes a CSS string, removes duplicate rules for optimization,\n * and injects it into a shadow root via a style element.\n *\n * @param shadowRoot - The shadow root to inject styles into\n * @param styles - CSS string to optimize and inject\n *\n * @example\n * ```typescript\n * const shadowRoot = element.attachShadow({ mode: 'open' });\n * await setShadowStyles({\n * shadowRoot,\n * styles: '.my-class { color: red; }'\n * });\n * ```\n */\nexport const setShadowStyles = async ({\n shadowRoot,\n styles,\n}: {\n shadowRoot: ShadowRoot;\n styles: string;\n}): Promise<void> => {\n const styleElement = document.createElement('style');\n const optimizedCss = await Styles.utilities.transform.css.removeDuplicates(\n styles,\n );\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n};\n\n/**\n * Updates shadow root styles by replacing or appending\n *\n * This function can either replace all existing styles or append new styles\n * to an existing shadow root.\n *\n * @param shadowRoot - The shadow root to update\n * @param styles - CSS string to optimize and inject\n * @param replace - If true, removes all existing style elements first\n *\n * @example\n * ```typescript\n * // Append additional styles\n * await updateShadowStyles({\n * shadowRoot,\n * styles: '.new-class { color: blue; }',\n * replace: false\n * });\n *\n * // Replace all styles\n * await updateShadowStyles({\n * shadowRoot,\n * styles: '.only-class { color: green; }',\n * replace: true\n * });\n * ```\n */\nexport const updateShadowStyles = async ({\n shadowRoot,\n styles,\n replace = false,\n}: {\n shadowRoot: ShadowRoot;\n styles: string;\n replace?: boolean;\n}): Promise<void> => {\n if (replace) {\n // Remove all existing style elements\n const existingStyles = shadowRoot.querySelectorAll('style');\n existingStyles.forEach((style) => style.remove());\n }\n\n await setShadowStyles({ shadowRoot, styles });\n};\n"],"names":["Styles"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,kBAAkB,OAAO;AAAA,EACpC;AAAA,EACA;AACF,MAGqB;AACnB,QAAM,eAAe,SAAS,cAAc,OAAO;AACnD,QAAM,eAAe,MAAMA,kBAAO,UAAU,UAAU,IAAI;AAAA,IACxD;AAAA,EAAA;AAEF,eAAa,cAAc;AAC3B,aAAW,YAAY,YAAY;AACrC;;"}
@@ -0,0 +1,16 @@
1
+ import * as Styles from "@universityofmaryland/web-styles-library";
2
+ const setShadowStyles = async ({
3
+ shadowRoot,
4
+ styles
5
+ }) => {
6
+ const styleElement = document.createElement("style");
7
+ const optimizedCss = await Styles.utilities.transform.css.removeDuplicates(
8
+ styles
9
+ );
10
+ styleElement.textContent = optimizedCss;
11
+ shadowRoot.appendChild(styleElement);
12
+ };
13
+ export {
14
+ setShadowStyles
15
+ };
16
+ //# sourceMappingURL=shadow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.mjs","sources":["../../../source/helpers/styles/shadow.ts"],"sourcesContent":["/**\n * Shadow DOM Styles Utility\n *\n * Utilities for managing styles within Shadow DOM contexts.\n *\n * @module utilities/styles/shadow\n */\n\nimport * as Styles from '@universityofmaryland/web-styles-library';\n\n/**\n * Sets optimized styles on a shadow root\n *\n * This function takes a CSS string, removes duplicate rules for optimization,\n * and injects it into a shadow root via a style element.\n *\n * @param shadowRoot - The shadow root to inject styles into\n * @param styles - CSS string to optimize and inject\n *\n * @example\n * ```typescript\n * const shadowRoot = element.attachShadow({ mode: 'open' });\n * await setShadowStyles({\n * shadowRoot,\n * styles: '.my-class { color: red; }'\n * });\n * ```\n */\nexport const setShadowStyles = async ({\n shadowRoot,\n styles,\n}: {\n shadowRoot: ShadowRoot;\n styles: string;\n}): Promise<void> => {\n const styleElement = document.createElement('style');\n const optimizedCss = await Styles.utilities.transform.css.removeDuplicates(\n styles,\n );\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n};\n\n/**\n * Updates shadow root styles by replacing or appending\n *\n * This function can either replace all existing styles or append new styles\n * to an existing shadow root.\n *\n * @param shadowRoot - The shadow root to update\n * @param styles - CSS string to optimize and inject\n * @param replace - If true, removes all existing style elements first\n *\n * @example\n * ```typescript\n * // Append additional styles\n * await updateShadowStyles({\n * shadowRoot,\n * styles: '.new-class { color: blue; }',\n * replace: false\n * });\n *\n * // Replace all styles\n * await updateShadowStyles({\n * shadowRoot,\n * styles: '.only-class { color: green; }',\n * replace: true\n * });\n * ```\n */\nexport const updateShadowStyles = async ({\n shadowRoot,\n styles,\n replace = false,\n}: {\n shadowRoot: ShadowRoot;\n styles: string;\n replace?: boolean;\n}): Promise<void> => {\n if (replace) {\n // Remove all existing style elements\n const existingStyles = shadowRoot.querySelectorAll('style');\n existingStyles.forEach((style) => style.remove());\n }\n\n await setShadowStyles({ shadowRoot, styles });\n};\n"],"names":[],"mappings":";AA4BO,MAAM,kBAAkB,OAAO;AAAA,EACpC;AAAA,EACA;AACF,MAGqB;AACnB,QAAM,eAAe,SAAS,cAAc,OAAO;AACnD,QAAM,eAAe,MAAM,OAAO,UAAU,UAAU,IAAI;AAAA,IACxD;AAAA,EAAA;AAEF,eAAa,cAAc;AAC3B,aAAW,YAAY,YAAY;AACrC;"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export * as academic from './composite/academic';
2
- export * as events from './composite/events';
3
- export * as news from './composite/news';
1
+ export * as academic from './feeds/academic';
2
+ export * as experts from './feeds/experts';
3
+ export * as events from './feeds/events';
4
+ export * as news from './feeds/news';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAWjD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAW7C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAW7C,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAW3C,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAWzC,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const academic = require("./academic.js");
4
+ const experts = require("./experts.js");
4
5
  const events = require("./events.js");
5
6
  const news = require("./news.js");
6
7
  exports.academic = academic;
8
+ exports.experts = experts;
7
9
  exports.events = events;
8
10
  exports.news = news;
9
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -1,9 +1,11 @@
1
1
  import * as academic from "./academic.mjs";
2
+ import * as experts from "./experts.mjs";
2
3
  import * as events from "./events.mjs";
3
4
  import * as news from "./news.mjs";
4
5
  export {
5
6
  academic,
6
7
  events,
8
+ experts,
7
9
  news
8
10
  };
9
11
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/dist/news.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './composite/news/index'
1
+ export * from './feeds/news/index'
2
2
  export {}
package/dist/news.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const featured = require("./composite/news/featured.js");
4
- const grid = require("./composite/news/grid.js");
5
- const list = require("./composite/news/list.js");
3
+ const featured = require("./feeds/news/featured.js");
4
+ const grid = require("./feeds/news/grid.js");
5
+ const list = require("./feeds/news/list.js");
6
6
  exports.featured = featured;
7
7
  exports.grid = grid;
8
8
  exports.list = list;
package/dist/news.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { default as default2 } from "./composite/news/featured.mjs";
2
- import { default as default3 } from "./composite/news/grid.mjs";
3
- import { default as default4 } from "./composite/news/list.mjs";
1
+ import { default as default2 } from "./feeds/news/featured.mjs";
2
+ import { default as default3 } from "./feeds/news/grid.mjs";
3
+ import { default as default4 } from "./feeds/news/list.mjs";
4
4
  export {
5
5
  default2 as featured,
6
6
  default3 as grid,
@@ -0,0 +1,60 @@
1
+ import { ElementModel } from '../_types';
2
+ export interface LoadingStateConfig {
3
+ isThemeDark?: boolean;
4
+ }
5
+ export interface EmptyStateConfig {
6
+ message?: string;
7
+ linkUrl?: string;
8
+ linkText?: string;
9
+ isThemeDark?: boolean;
10
+ isAlignedCenter?: boolean;
11
+ }
12
+ export interface PaginationStateConfig {
13
+ callback: () => void;
14
+ isThemeDark?: boolean;
15
+ isLazyLoad: boolean;
16
+ totalEntries: number | null;
17
+ offset: number;
18
+ }
19
+ export interface AnnouncerConfig {
20
+ message: string;
21
+ politeness?: 'polite' | 'assertive';
22
+ }
23
+ export declare enum FeedStateEvent {
24
+ LOADING_START = "feed:loading:start",
25
+ LOADING_END = "feed:loading:end",
26
+ EMPTY_SHOWN = "feed:empty:shown",
27
+ PAGINATION_LOADED = "feed:pagination:loaded",
28
+ ANNOUNCEMENT = "feed:announcement"
29
+ }
30
+ export interface FeedState {
31
+ element: HTMLElement;
32
+ styles: string;
33
+ show?: (container: HTMLElement) => void;
34
+ hide?: () => void;
35
+ destroy?: () => void;
36
+ }
37
+ export interface LoaderLegacyAPI {
38
+ create: (config: LoadingStateConfig) => ElementModel;
39
+ display: (props: {
40
+ container: HTMLElement;
41
+ isThemeDark?: boolean;
42
+ }) => void;
43
+ remove: (props: {
44
+ container: HTMLElement;
45
+ }) => void;
46
+ }
47
+ export interface AnnouncerLegacyAPI {
48
+ create: (config: AnnouncerConfig) => HTMLElement;
49
+ update: (props: {
50
+ container: HTMLElement;
51
+ message: string;
52
+ }) => void;
53
+ }
54
+ export interface PaginationLegacyAPI {
55
+ create: (config: PaginationStateConfig) => ElementModel | undefined;
56
+ remove: (props: {
57
+ container: HTMLElement;
58
+ }) => void;
59
+ }
60
+ //# sourceMappingURL=_types.d.ts.map