@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
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const webBuilderLibrary = require("@universityofmaryland/web-builder-library");
4
+ const Styles = require("@universityofmaryland/web-styles-library");
5
+ const _types = require("./_types.js");
6
+ const ID_UMD_LOADER = "umd-loader-container";
7
+ const keyframes = `
8
+ @keyframes loader-first-animation {
9
+ 0% {
10
+ transform: scale(0);
11
+ }
12
+ 100% {
13
+ transform: scale(1);
14
+ }
15
+ }
16
+
17
+ @keyframes loader-last-animation {
18
+ 0% {
19
+ transform: scale(1);
20
+ }
21
+ 100% {
22
+ transform: scale(0);
23
+ }
24
+ }
25
+
26
+ @keyframes loader-middle-animation {
27
+ 0% {
28
+ transform: translate(0, 0);
29
+ }
30
+ 100% {
31
+ transform: translate(24px, 0);
32
+ }
33
+ }
34
+ `;
35
+ function createLoadingElement(config = {}) {
36
+ const { isThemeDark = false } = config;
37
+ const defaultDotStyles = {
38
+ position: "absolute",
39
+ top: "50%",
40
+ transform: "translateY(-50%)",
41
+ width: "8px",
42
+ height: "8px",
43
+ borderRadius: "50%",
44
+ background: isThemeDark ? Styles.token.color.gray.light : Styles.token.color.gray.dark,
45
+ animationTimingFunction: "cubic-bezier(0, 1, 1, 0)"
46
+ };
47
+ const innerElmOne = new webBuilderLibrary.ElementBuilder().withClassName(`${ID_UMD_LOADER}-one`).withStyles({
48
+ element: {
49
+ ...defaultDotStyles,
50
+ left: "5px",
51
+ animation: "loader-first-animation 0.6s infinite"
52
+ }
53
+ }).build();
54
+ const innerElmTwo = new webBuilderLibrary.ElementBuilder().withClassName(`${ID_UMD_LOADER}-two`).withStyles({
55
+ element: {
56
+ ...defaultDotStyles,
57
+ left: "5px",
58
+ animation: "loader-middle-animation 0.6s infinite"
59
+ }
60
+ }).build();
61
+ const innerElmThree = new webBuilderLibrary.ElementBuilder().withClassName(`${ID_UMD_LOADER}-three`).withStyles({
62
+ element: {
63
+ ...defaultDotStyles,
64
+ left: "24px",
65
+ animation: "loader-middle-animation 0.6s infinite"
66
+ }
67
+ }).build();
68
+ const innerElmFour = new webBuilderLibrary.ElementBuilder().withClassName(`${ID_UMD_LOADER}-four`).withStyles({
69
+ element: {
70
+ ...defaultDotStyles,
71
+ left: "45px",
72
+ animation: "loader-last-animation 0.6s infinite"
73
+ }
74
+ }).build();
75
+ const wrapper = new webBuilderLibrary.ElementBuilder().withClassName(`${ID_UMD_LOADER}-wrapper`).withChild(innerElmOne).withChild(innerElmTwo).withChild(innerElmThree).withChild(innerElmFour).withStyles({
76
+ element: {
77
+ position: "relative"
78
+ }
79
+ }).build();
80
+ const composite = new webBuilderLibrary.ElementBuilder().withClassName(ID_UMD_LOADER).withChild(wrapper).withStyles({
81
+ element: {
82
+ display: "flex",
83
+ justifyContent: "center",
84
+ alignItems: "center",
85
+ padding: "10px 0",
86
+ minHeight: "40px",
87
+ position: "relative",
88
+ gridColumn: "1 / -1"
89
+ }
90
+ }).build();
91
+ composite.styles += keyframes;
92
+ return composite;
93
+ }
94
+ class LoadingState {
95
+ constructor(config = {}) {
96
+ this.container = null;
97
+ this.isVisible = false;
98
+ this.model = createLoadingElement(config);
99
+ }
100
+ /**
101
+ * Show the loading spinner in a container
102
+ */
103
+ show(container) {
104
+ if (!this.isVisible) {
105
+ this.container = container;
106
+ container.appendChild(this.model.element);
107
+ this.isVisible = true;
108
+ container.dispatchEvent(
109
+ new CustomEvent(_types.FeedStateEvent.LOADING_START, {
110
+ bubbles: true,
111
+ detail: { timestamp: Date.now() }
112
+ })
113
+ );
114
+ }
115
+ }
116
+ /**
117
+ * Hide and remove the loading spinner
118
+ */
119
+ hide() {
120
+ if (this.isVisible && this.model.element.parentNode) {
121
+ this.model.element.remove();
122
+ this.isVisible = false;
123
+ if (this.container) {
124
+ this.container.dispatchEvent(
125
+ new CustomEvent(_types.FeedStateEvent.LOADING_END, {
126
+ bubbles: true,
127
+ detail: { timestamp: Date.now() }
128
+ })
129
+ );
130
+ }
131
+ }
132
+ }
133
+ /**
134
+ * Cleanup and remove the loading spinner
135
+ */
136
+ destroy() {
137
+ this.hide();
138
+ this.container = null;
139
+ }
140
+ /**
141
+ * Get the loading spinner element
142
+ */
143
+ get element() {
144
+ return this.model.element;
145
+ }
146
+ /**
147
+ * Get the loading spinner styles
148
+ */
149
+ get styles() {
150
+ return this.model.styles;
151
+ }
152
+ }
153
+ exports.LoadingState = LoadingState;
154
+ exports.createLoadingElement = createLoadingElement;
155
+ //# sourceMappingURL=loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.js","sources":["../../source/states/loading.ts"],"sourcesContent":["import { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { token } from '@universityofmaryland/web-styles-library';\n\nimport { type ElementModel } from '../_types';\nimport {\n type LoadingStateConfig,\n type LoaderLegacyAPI,\n FeedStateEvent,\n} from './_types';\n\nconst ID_UMD_LOADER = 'umd-loader-container';\n\nconst keyframes = `\n @keyframes loader-first-animation {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n\n @keyframes loader-last-animation {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n\n @keyframes loader-middle-animation {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n }\n`;\n\n/**\n * Creates a loading spinner element model\n *\n * @param config - Loading state configuration\n * @returns ElementModel with loading spinner\n *\n * @example\n * ```typescript\n * const loading = createLoadingElement({ isThemeDark: false });\n * container.appendChild(loading.element);\n * ```\n */\nexport function createLoadingElement(config: LoadingStateConfig = {}): ElementModel {\n const { isThemeDark = false } = config;\n\n const defaultDotStyles = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n background: isThemeDark ? token.color.gray.light : token.color.gray.dark,\n animationTimingFunction: 'cubic-bezier(0, 1, 1, 0)',\n };\n\n const innerElmOne = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-one`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '5px',\n animation: 'loader-first-animation 0.6s infinite',\n },\n })\n .build();\n\n const innerElmTwo = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-two`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '5px',\n animation: 'loader-middle-animation 0.6s infinite',\n },\n })\n .build();\n\n const innerElmThree = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-three`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '24px',\n animation: 'loader-middle-animation 0.6s infinite',\n },\n })\n .build();\n\n const innerElmFour = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-four`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '45px',\n animation: 'loader-last-animation 0.6s infinite',\n },\n })\n .build();\n\n const wrapper = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-wrapper`)\n .withChild(innerElmOne)\n .withChild(innerElmTwo)\n .withChild(innerElmThree)\n .withChild(innerElmFour)\n .withStyles({\n element: {\n position: 'relative',\n },\n })\n .build();\n\n const composite = new ElementBuilder()\n .withClassName(ID_UMD_LOADER)\n .withChild(wrapper)\n .withStyles({\n element: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '10px 0',\n minHeight: '40px',\n position: 'relative',\n gridColumn: '1 / -1',\n },\n })\n .build();\n\n composite.styles += keyframes;\n\n return composite;\n}\n\n/**\n * Loading state manager class\n *\n * Manages the lifecycle of a loading spinner with show/hide functionality.\n *\n * @example\n * ```typescript\n * const loading = new LoadingState({ isThemeDark: false });\n * loading.show(container);\n * // ... async operation\n * loading.hide();\n * ```\n */\nexport class LoadingState {\n private model: ElementModel;\n private container: HTMLElement | null = null;\n private isVisible: boolean = false;\n\n constructor(config: LoadingStateConfig = {}) {\n this.model = createLoadingElement(config);\n }\n\n /**\n * Show the loading spinner in a container\n */\n show(container: HTMLElement): void {\n if (!this.isVisible) {\n this.container = container;\n container.appendChild(this.model.element);\n this.isVisible = true;\n\n container.dispatchEvent(\n new CustomEvent(FeedStateEvent.LOADING_START, {\n bubbles: true,\n detail: { timestamp: Date.now() },\n })\n );\n }\n }\n\n /**\n * Hide and remove the loading spinner\n */\n hide(): void {\n if (this.isVisible && this.model.element.parentNode) {\n this.model.element.remove();\n this.isVisible = false;\n\n if (this.container) {\n this.container.dispatchEvent(\n new CustomEvent(FeedStateEvent.LOADING_END, {\n bubbles: true,\n detail: { timestamp: Date.now() },\n })\n );\n }\n }\n }\n\n /**\n * Cleanup and remove the loading spinner\n */\n destroy(): void {\n this.hide();\n this.container = null;\n }\n\n /**\n * Get the loading spinner element\n */\n get element(): HTMLElement {\n return this.model.element;\n }\n\n /**\n * Get the loading spinner styles\n */\n get styles(): string {\n return this.model.styles;\n }\n}\n\n// =============================================================================\n// Backwards Compatible Exports (Legacy API)\n// =============================================================================\n\n/**\n * @deprecated Use LoadingState class instead\n */\nconst create = (config: LoadingStateConfig = {}): ElementModel => {\n return createLoadingElement(config);\n};\n\n/**\n * @deprecated Use LoadingState.show() instead\n */\nconst display = ({\n container,\n isThemeDark,\n}: {\n container: HTMLElement;\n isThemeDark?: boolean;\n}): void => {\n const loading = createLoadingElement({ isThemeDark });\n container.appendChild(loading.element);\n};\n\n/**\n * @deprecated Use LoadingState.hide() instead\n */\nconst remove = ({ container }: { container: HTMLElement }): void => {\n const loader = container.querySelector(`.${ID_UMD_LOADER}`) as HTMLDivElement;\n if (loader) loader.remove();\n};\n\n/**\n * Legacy API for backwards compatibility\n * @deprecated Use LoadingState class instead\n */\nexport default {\n create,\n display,\n remove,\n} as LoaderLegacyAPI;\n"],"names":["token","ElementBuilder","FeedStateEvent"],"mappings":";;;;;AAUA,MAAM,gBAAgB;AAEtB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCX,SAAS,qBAAqB,SAA6B,IAAkB;AAClF,QAAM,EAAE,cAAc,MAAA,IAAU;AAEhC,QAAM,mBAAmB;AAAA,IACvB,UAAU;AAAA,IACV,KAAK;AAAA,IACL,WAAW;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,cAAcA,OAAAA,MAAM,MAAM,KAAK,QAAQA,OAAAA,MAAM,MAAM,KAAK;AAAA,IACpE,yBAAyB;AAAA,EAAA;AAG3B,QAAM,cAAc,IAAIC,kBAAAA,eAAA,EACrB,cAAc,GAAG,aAAa,MAAM,EACpC,WAAW;AAAA,IACV,SAAS;AAAA,MACP,GAAG;AAAA,MACH,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb,CACD,EACA,MAAA;AAEH,QAAM,cAAc,IAAIA,kBAAAA,eAAA,EACrB,cAAc,GAAG,aAAa,MAAM,EACpC,WAAW;AAAA,IACV,SAAS;AAAA,MACP,GAAG;AAAA,MACH,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb,CACD,EACA,MAAA;AAEH,QAAM,gBAAgB,IAAIA,kBAAAA,eAAA,EACvB,cAAc,GAAG,aAAa,QAAQ,EACtC,WAAW;AAAA,IACV,SAAS;AAAA,MACP,GAAG;AAAA,MACH,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb,CACD,EACA,MAAA;AAEH,QAAM,eAAe,IAAIA,kBAAAA,eAAA,EACtB,cAAc,GAAG,aAAa,OAAO,EACrC,WAAW;AAAA,IACV,SAAS;AAAA,MACP,GAAG;AAAA,MACH,MAAM;AAAA,MACN,WAAW;AAAA,IAAA;AAAA,EACb,CACD,EACA,MAAA;AAEH,QAAM,UAAU,IAAIA,kBAAAA,iBACjB,cAAc,GAAG,aAAa,UAAU,EACxC,UAAU,WAAW,EACrB,UAAU,WAAW,EACrB,UAAU,aAAa,EACvB,UAAU,YAAY,EACtB,WAAW;AAAA,IACV,SAAS;AAAA,MACP,UAAU;AAAA,IAAA;AAAA,EACZ,CACD,EACA,MAAA;AAEH,QAAM,YAAY,IAAIA,kBAAAA,eAAA,EACnB,cAAc,aAAa,EAC3B,UAAU,OAAO,EACjB,WAAW;AAAA,IACV,SAAS;AAAA,MACP,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,MACV,YAAY;AAAA,IAAA;AAAA,EACd,CACD,EACA,MAAA;AAEH,YAAU,UAAU;AAEpB,SAAO;AACT;AAeO,MAAM,aAAa;AAAA,EAKxB,YAAY,SAA6B,IAAI;AAH7C,SAAQ,YAAgC;AACxC,SAAQ,YAAqB;AAG3B,SAAK,QAAQ,qBAAqB,MAAM;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,WAA8B;AACjC,QAAI,CAAC,KAAK,WAAW;AACnB,WAAK,YAAY;AACjB,gBAAU,YAAY,KAAK,MAAM,OAAO;AACxC,WAAK,YAAY;AAEjB,gBAAU;AAAA,QACR,IAAI,YAAYC,OAAAA,eAAe,eAAe;AAAA,UAC5C,SAAS;AAAA,UACT,QAAQ,EAAE,WAAW,KAAK,MAAI;AAAA,QAAE,CACjC;AAAA,MAAA;AAAA,IAEL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAa;AACX,QAAI,KAAK,aAAa,KAAK,MAAM,QAAQ,YAAY;AACnD,WAAK,MAAM,QAAQ,OAAA;AACnB,WAAK,YAAY;AAEjB,UAAI,KAAK,WAAW;AAClB,aAAK,UAAU;AAAA,UACb,IAAI,YAAYA,OAAAA,eAAe,aAAa;AAAA,YAC1C,SAAS;AAAA,YACT,QAAQ,EAAE,WAAW,KAAK,MAAI;AAAA,UAAE,CACjC;AAAA,QAAA;AAAA,MAEL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,KAAA;AACL,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAuB;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;;;"}
@@ -0,0 +1,155 @@
1
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
2
+ import { token } from "@universityofmaryland/web-styles-library";
3
+ import { FeedStateEvent } from "./_types.mjs";
4
+ const ID_UMD_LOADER = "umd-loader-container";
5
+ const keyframes = `
6
+ @keyframes loader-first-animation {
7
+ 0% {
8
+ transform: scale(0);
9
+ }
10
+ 100% {
11
+ transform: scale(1);
12
+ }
13
+ }
14
+
15
+ @keyframes loader-last-animation {
16
+ 0% {
17
+ transform: scale(1);
18
+ }
19
+ 100% {
20
+ transform: scale(0);
21
+ }
22
+ }
23
+
24
+ @keyframes loader-middle-animation {
25
+ 0% {
26
+ transform: translate(0, 0);
27
+ }
28
+ 100% {
29
+ transform: translate(24px, 0);
30
+ }
31
+ }
32
+ `;
33
+ function createLoadingElement(config = {}) {
34
+ const { isThemeDark = false } = config;
35
+ const defaultDotStyles = {
36
+ position: "absolute",
37
+ top: "50%",
38
+ transform: "translateY(-50%)",
39
+ width: "8px",
40
+ height: "8px",
41
+ borderRadius: "50%",
42
+ background: isThemeDark ? token.color.gray.light : token.color.gray.dark,
43
+ animationTimingFunction: "cubic-bezier(0, 1, 1, 0)"
44
+ };
45
+ const innerElmOne = new ElementBuilder().withClassName(`${ID_UMD_LOADER}-one`).withStyles({
46
+ element: {
47
+ ...defaultDotStyles,
48
+ left: "5px",
49
+ animation: "loader-first-animation 0.6s infinite"
50
+ }
51
+ }).build();
52
+ const innerElmTwo = new ElementBuilder().withClassName(`${ID_UMD_LOADER}-two`).withStyles({
53
+ element: {
54
+ ...defaultDotStyles,
55
+ left: "5px",
56
+ animation: "loader-middle-animation 0.6s infinite"
57
+ }
58
+ }).build();
59
+ const innerElmThree = new ElementBuilder().withClassName(`${ID_UMD_LOADER}-three`).withStyles({
60
+ element: {
61
+ ...defaultDotStyles,
62
+ left: "24px",
63
+ animation: "loader-middle-animation 0.6s infinite"
64
+ }
65
+ }).build();
66
+ const innerElmFour = new ElementBuilder().withClassName(`${ID_UMD_LOADER}-four`).withStyles({
67
+ element: {
68
+ ...defaultDotStyles,
69
+ left: "45px",
70
+ animation: "loader-last-animation 0.6s infinite"
71
+ }
72
+ }).build();
73
+ const wrapper = new ElementBuilder().withClassName(`${ID_UMD_LOADER}-wrapper`).withChild(innerElmOne).withChild(innerElmTwo).withChild(innerElmThree).withChild(innerElmFour).withStyles({
74
+ element: {
75
+ position: "relative"
76
+ }
77
+ }).build();
78
+ const composite = new ElementBuilder().withClassName(ID_UMD_LOADER).withChild(wrapper).withStyles({
79
+ element: {
80
+ display: "flex",
81
+ justifyContent: "center",
82
+ alignItems: "center",
83
+ padding: "10px 0",
84
+ minHeight: "40px",
85
+ position: "relative",
86
+ gridColumn: "1 / -1"
87
+ }
88
+ }).build();
89
+ composite.styles += keyframes;
90
+ return composite;
91
+ }
92
+ class LoadingState {
93
+ constructor(config = {}) {
94
+ this.container = null;
95
+ this.isVisible = false;
96
+ this.model = createLoadingElement(config);
97
+ }
98
+ /**
99
+ * Show the loading spinner in a container
100
+ */
101
+ show(container) {
102
+ if (!this.isVisible) {
103
+ this.container = container;
104
+ container.appendChild(this.model.element);
105
+ this.isVisible = true;
106
+ container.dispatchEvent(
107
+ new CustomEvent(FeedStateEvent.LOADING_START, {
108
+ bubbles: true,
109
+ detail: { timestamp: Date.now() }
110
+ })
111
+ );
112
+ }
113
+ }
114
+ /**
115
+ * Hide and remove the loading spinner
116
+ */
117
+ hide() {
118
+ if (this.isVisible && this.model.element.parentNode) {
119
+ this.model.element.remove();
120
+ this.isVisible = false;
121
+ if (this.container) {
122
+ this.container.dispatchEvent(
123
+ new CustomEvent(FeedStateEvent.LOADING_END, {
124
+ bubbles: true,
125
+ detail: { timestamp: Date.now() }
126
+ })
127
+ );
128
+ }
129
+ }
130
+ }
131
+ /**
132
+ * Cleanup and remove the loading spinner
133
+ */
134
+ destroy() {
135
+ this.hide();
136
+ this.container = null;
137
+ }
138
+ /**
139
+ * Get the loading spinner element
140
+ */
141
+ get element() {
142
+ return this.model.element;
143
+ }
144
+ /**
145
+ * Get the loading spinner styles
146
+ */
147
+ get styles() {
148
+ return this.model.styles;
149
+ }
150
+ }
151
+ export {
152
+ LoadingState,
153
+ createLoadingElement
154
+ };
155
+ //# sourceMappingURL=loading.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.mjs","sources":["../../source/states/loading.ts"],"sourcesContent":["import { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { token } from '@universityofmaryland/web-styles-library';\n\nimport { type ElementModel } from '../_types';\nimport {\n type LoadingStateConfig,\n type LoaderLegacyAPI,\n FeedStateEvent,\n} from './_types';\n\nconst ID_UMD_LOADER = 'umd-loader-container';\n\nconst keyframes = `\n @keyframes loader-first-animation {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n\n @keyframes loader-last-animation {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n\n @keyframes loader-middle-animation {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n }\n`;\n\n/**\n * Creates a loading spinner element model\n *\n * @param config - Loading state configuration\n * @returns ElementModel with loading spinner\n *\n * @example\n * ```typescript\n * const loading = createLoadingElement({ isThemeDark: false });\n * container.appendChild(loading.element);\n * ```\n */\nexport function createLoadingElement(config: LoadingStateConfig = {}): ElementModel {\n const { isThemeDark = false } = config;\n\n const defaultDotStyles = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n background: isThemeDark ? token.color.gray.light : token.color.gray.dark,\n animationTimingFunction: 'cubic-bezier(0, 1, 1, 0)',\n };\n\n const innerElmOne = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-one`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '5px',\n animation: 'loader-first-animation 0.6s infinite',\n },\n })\n .build();\n\n const innerElmTwo = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-two`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '5px',\n animation: 'loader-middle-animation 0.6s infinite',\n },\n })\n .build();\n\n const innerElmThree = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-three`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '24px',\n animation: 'loader-middle-animation 0.6s infinite',\n },\n })\n .build();\n\n const innerElmFour = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-four`)\n .withStyles({\n element: {\n ...defaultDotStyles,\n left: '45px',\n animation: 'loader-last-animation 0.6s infinite',\n },\n })\n .build();\n\n const wrapper = new ElementBuilder()\n .withClassName(`${ID_UMD_LOADER}-wrapper`)\n .withChild(innerElmOne)\n .withChild(innerElmTwo)\n .withChild(innerElmThree)\n .withChild(innerElmFour)\n .withStyles({\n element: {\n position: 'relative',\n },\n })\n .build();\n\n const composite = new ElementBuilder()\n .withClassName(ID_UMD_LOADER)\n .withChild(wrapper)\n .withStyles({\n element: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '10px 0',\n minHeight: '40px',\n position: 'relative',\n gridColumn: '1 / -1',\n },\n })\n .build();\n\n composite.styles += keyframes;\n\n return composite;\n}\n\n/**\n * Loading state manager class\n *\n * Manages the lifecycle of a loading spinner with show/hide functionality.\n *\n * @example\n * ```typescript\n * const loading = new LoadingState({ isThemeDark: false });\n * loading.show(container);\n * // ... async operation\n * loading.hide();\n * ```\n */\nexport class LoadingState {\n private model: ElementModel;\n private container: HTMLElement | null = null;\n private isVisible: boolean = false;\n\n constructor(config: LoadingStateConfig = {}) {\n this.model = createLoadingElement(config);\n }\n\n /**\n * Show the loading spinner in a container\n */\n show(container: HTMLElement): void {\n if (!this.isVisible) {\n this.container = container;\n container.appendChild(this.model.element);\n this.isVisible = true;\n\n container.dispatchEvent(\n new CustomEvent(FeedStateEvent.LOADING_START, {\n bubbles: true,\n detail: { timestamp: Date.now() },\n })\n );\n }\n }\n\n /**\n * Hide and remove the loading spinner\n */\n hide(): void {\n if (this.isVisible && this.model.element.parentNode) {\n this.model.element.remove();\n this.isVisible = false;\n\n if (this.container) {\n this.container.dispatchEvent(\n new CustomEvent(FeedStateEvent.LOADING_END, {\n bubbles: true,\n detail: { timestamp: Date.now() },\n })\n );\n }\n }\n }\n\n /**\n * Cleanup and remove the loading spinner\n */\n destroy(): void {\n this.hide();\n this.container = null;\n }\n\n /**\n * Get the loading spinner element\n */\n get element(): HTMLElement {\n return this.model.element;\n }\n\n /**\n * Get the loading spinner styles\n */\n get styles(): string {\n return this.model.styles;\n }\n}\n\n// =============================================================================\n// Backwards Compatible Exports (Legacy API)\n// =============================================================================\n\n/**\n * @deprecated Use LoadingState class instead\n */\nconst create = (config: LoadingStateConfig = {}): ElementModel => {\n return createLoadingElement(config);\n};\n\n/**\n * @deprecated Use LoadingState.show() instead\n */\nconst display = ({\n container,\n isThemeDark,\n}: {\n container: HTMLElement;\n isThemeDark?: boolean;\n}): void => {\n const loading = createLoadingElement({ isThemeDark });\n container.appendChild(loading.element);\n};\n\n/**\n * @deprecated Use LoadingState.hide() instead\n */\nconst remove = ({ container }: { container: HTMLElement }): void => {\n const loader = container.querySelector(`.${ID_UMD_LOADER}`) as HTMLDivElement;\n if (loader) loader.remove();\n};\n\n/**\n * Legacy API for backwards compatibility\n * @deprecated Use LoadingState class instead\n */\nexport default {\n create,\n display,\n remove,\n} as LoaderLegacyAPI;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ElementModel } from '../_types';
2
+ import { PaginationStateConfig, PaginationLegacyAPI } from './_types';
3
+ export declare function createPaginationElement(config: PaginationStateConfig): ElementModel | undefined;
4
+ export declare class PaginationState {
5
+ private config;
6
+ private model;
7
+ private container;
8
+ constructor(config: PaginationStateConfig);
9
+ render(container: HTMLElement): ElementModel | undefined;
10
+ remove(): void;
11
+ updateState(offset: number, totalEntries: number): void;
12
+ hasMore(): boolean;
13
+ destroy(): void;
14
+ get element(): HTMLElement | undefined;
15
+ get styles(): string | undefined;
16
+ }
17
+ declare const _default: PaginationLegacyAPI;
18
+ export default _default;
19
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../source/states/pagination.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAEzB,MAAM,UAAU,CAAC;AAsBlB,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,qBAAqB,GAC5B,YAAY,GAAG,SAAS,CAuC1B;AAyBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,SAAS,CAA4B;gBAEjC,MAAM,EAAE,qBAAqB;IASzC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS;IAWxD,MAAM,IAAI,IAAI;IAUd,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAmBvD,OAAO,IAAI,OAAO;IAQlB,OAAO,IAAI,IAAI;IAQf,IAAI,OAAO,IAAI,WAAW,GAAG,SAAS,CAErC;IAKD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;CACF;wBA+BI,mBAAmB;AAHxB,wBAGyB"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const Styles = require("@universityofmaryland/web-styles-library");
4
+ const webBuilderLibrary = require("@universityofmaryland/web-builder-library");
5
+ const _types = require("./_types.js");
6
+ function _interopNamespaceDefault(e) {
7
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
+ if (e) {
9
+ for (const k in e) {
10
+ if (k !== "default") {
11
+ const d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: () => e[k]
15
+ });
16
+ }
17
+ }
18
+ }
19
+ n.default = e;
20
+ return Object.freeze(n);
21
+ }
22
+ const Styles__namespace = /* @__PURE__ */ _interopNamespaceDefault(Styles);
23
+ function createPaginationElement(config) {
24
+ const { callback, isLazyLoad, totalEntries, offset } = config;
25
+ if (!isLazyLoad) return;
26
+ if (!totalEntries) return;
27
+ if (!offset) return;
28
+ if (!callback) return;
29
+ if (offset >= totalEntries) return;
30
+ const button = document.createElement("button");
31
+ button.textContent = "Load more";
32
+ button.addEventListener("click", () => {
33
+ callback();
34
+ button.dispatchEvent(
35
+ new CustomEvent(_types.FeedStateEvent.PAGINATION_LOADED, {
36
+ bubbles: true,
37
+ detail: {
38
+ offset,
39
+ totalEntries,
40
+ timestamp: Date.now()
41
+ }
42
+ })
43
+ );
44
+ });
45
+ const ctaButton = new webBuilderLibrary.ElementBuilder(button).styled(Styles__namespace.element.action.outline.normal).build();
46
+ return new webBuilderLibrary.ElementBuilder().styled(Styles__namespace.layout.alignment.block.center).withChild(ctaButton).withStyles({
47
+ element: {
48
+ marginTop: `${Styles__namespace.token.spacing.lg}`
49
+ }
50
+ }).build();
51
+ }
52
+ class PaginationState {
53
+ constructor(config) {
54
+ this.container = null;
55
+ this.config = config;
56
+ this.model = createPaginationElement(config);
57
+ }
58
+ /**
59
+ * Render the pagination button if applicable
60
+ * @returns ElementModel if rendered, undefined otherwise
61
+ */
62
+ render(container) {
63
+ if (this.model) {
64
+ this.container = container;
65
+ container.appendChild(this.model.element);
66
+ }
67
+ return this.model;
68
+ }
69
+ /**
70
+ * Remove the pagination button from DOM
71
+ */
72
+ remove() {
73
+ if (this.model && this.model.element.parentNode) {
74
+ this.model.element.remove();
75
+ }
76
+ }
77
+ /**
78
+ * Update pagination state with new offset and total
79
+ * Re-creates button if needed
80
+ */
81
+ updateState(offset, totalEntries) {
82
+ this.config.offset = offset;
83
+ this.config.totalEntries = totalEntries;
84
+ this.remove();
85
+ this.model = createPaginationElement(this.config);
86
+ if (this.container && this.model) {
87
+ this.container.appendChild(this.model.element);
88
+ }
89
+ }
90
+ /**
91
+ * Check if more items are available to load
92
+ */
93
+ hasMore() {
94
+ const { offset, totalEntries } = this.config;
95
+ return !!(totalEntries && offset < totalEntries);
96
+ }
97
+ /**
98
+ * Cleanup and remove pagination
99
+ */
100
+ destroy() {
101
+ this.remove();
102
+ this.container = null;
103
+ }
104
+ /**
105
+ * Get the pagination element if it exists
106
+ */
107
+ get element() {
108
+ return this.model?.element;
109
+ }
110
+ /**
111
+ * Get the pagination styles if element exists
112
+ */
113
+ get styles() {
114
+ return this.model?.styles;
115
+ }
116
+ }
117
+ exports.PaginationState = PaginationState;
118
+ exports.createPaginationElement = createPaginationElement;
119
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sources":["../../source/states/pagination.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\n\nimport { type ElementModel } from '../_types';\nimport {\n type PaginationStateConfig,\n type PaginationLegacyAPI,\n FeedStateEvent,\n} from './_types';\n\n/**\n * Creates a pagination \"Load more\" button element\n *\n * @param config - Pagination state configuration\n * @returns ElementModel with load more button, or undefined if pagination not needed\n *\n * @example\n * ```typescript\n * const pagination = createPaginationElement({\n * callback: () => loadMoreItems(),\n * isThemeDark: false,\n * isLazyLoad: true,\n * totalEntries: 50,\n * offset: 10\n * });\n * if (pagination) {\n * container.appendChild(pagination.element);\n * }\n * ```\n */\nexport function createPaginationElement(\n config: PaginationStateConfig\n): ElementModel | undefined {\n const { callback, isLazyLoad, totalEntries, offset } = config;\n\n // Guard clauses for when pagination is not needed\n if (!isLazyLoad) return;\n if (!totalEntries) return;\n if (!offset) return;\n if (!callback) return;\n if (offset >= totalEntries) return;\n\n const button = document.createElement('button');\n button.textContent = 'Load more'; // Use textContent for security\n button.addEventListener('click', () => {\n callback();\n button.dispatchEvent(\n new CustomEvent(FeedStateEvent.PAGINATION_LOADED, {\n bubbles: true,\n detail: {\n offset,\n totalEntries,\n timestamp: Date.now(),\n },\n })\n );\n });\n\n const ctaButton = new ElementBuilder(button)\n .styled(Styles.element.action.outline.normal)\n .build();\n\n return new ElementBuilder()\n .styled(Styles.layout.alignment.block.center)\n .withChild(ctaButton)\n .withStyles({\n element: {\n marginTop: `${Styles.token.spacing.lg}`,\n },\n })\n .build();\n}\n\n/**\n * Pagination state manager class\n *\n * Manages a \"Load more\" button for paginated feed content.\n *\n * @example\n * ```typescript\n * const pagination = new PaginationState({\n * callback: () => loadMore(),\n * isLazyLoad: true,\n * totalEntries: 50,\n * offset: 10\n * });\n *\n * const button = pagination.render(container);\n * if (button) {\n * // Pagination was rendered\n * }\n *\n * // Later, update state\n * pagination.updateState(20, 50);\n * ```\n */\nexport class PaginationState {\n private config: PaginationStateConfig;\n private model: ElementModel | undefined;\n private container: HTMLElement | null = null;\n\n constructor(config: PaginationStateConfig) {\n this.config = config;\n this.model = createPaginationElement(config);\n }\n\n /**\n * Render the pagination button if applicable\n * @returns ElementModel if rendered, undefined otherwise\n */\n render(container: HTMLElement): ElementModel | undefined {\n if (this.model) {\n this.container = container;\n container.appendChild(this.model.element);\n }\n return this.model;\n }\n\n /**\n * Remove the pagination button from DOM\n */\n remove(): void {\n if (this.model && this.model.element.parentNode) {\n this.model.element.remove();\n }\n }\n\n /**\n * Update pagination state with new offset and total\n * Re-creates button if needed\n */\n updateState(offset: number, totalEntries: number): void {\n this.config.offset = offset;\n this.config.totalEntries = totalEntries;\n\n // Remove old button\n this.remove();\n\n // Create new button if still needed\n this.model = createPaginationElement(this.config);\n\n // Re-render if we have a container\n if (this.container && this.model) {\n this.container.appendChild(this.model.element);\n }\n }\n\n /**\n * Check if more items are available to load\n */\n hasMore(): boolean {\n const { offset, totalEntries } = this.config;\n return !!(totalEntries && offset < totalEntries);\n }\n\n /**\n * Cleanup and remove pagination\n */\n destroy(): void {\n this.remove();\n this.container = null;\n }\n\n /**\n * Get the pagination element if it exists\n */\n get element(): HTMLElement | undefined {\n return this.model?.element;\n }\n\n /**\n * Get the pagination styles if element exists\n */\n get styles(): string | undefined {\n return this.model?.styles;\n }\n}\n\n// =============================================================================\n// Backwards Compatible Exports (Legacy API)\n// =============================================================================\n\n/**\n * @deprecated Use PaginationState class or createPaginationElement instead\n */\nconst create = (config: PaginationStateConfig): ElementModel | undefined => {\n return createPaginationElement(config);\n};\n\n/**\n * @deprecated Use PaginationState.remove() instead\n */\nconst remove = ({ container }: { container: HTMLElement }): void => {\n const button = container.querySelector(\n `.${Styles.layout.alignment.block.center.className}`\n ) as HTMLDivElement;\n\n if (button) button.remove();\n};\n\n/**\n * Legacy API for backwards compatibility\n * @deprecated Use PaginationState class instead\n */\nexport default {\n remove,\n create,\n} as PaginationLegacyAPI;\n"],"names":["FeedStateEvent","ElementBuilder","Styles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA8BO,SAAS,wBACd,QAC0B;AAC1B,QAAM,EAAE,UAAU,YAAY,cAAc,WAAW;AAGvD,MAAI,CAAC,WAAY;AACjB,MAAI,CAAC,aAAc;AACnB,MAAI,CAAC,OAAQ;AACb,MAAI,CAAC,SAAU;AACf,MAAI,UAAU,aAAc;AAE5B,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,cAAc;AACrB,SAAO,iBAAiB,SAAS,MAAM;AACrC,aAAA;AACA,WAAO;AAAA,MACL,IAAI,YAAYA,OAAAA,eAAe,mBAAmB;AAAA,QAChD,SAAS;AAAA,QACT,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA,WAAW,KAAK,IAAA;AAAA,QAAI;AAAA,MACtB,CACD;AAAA,IAAA;AAAA,EAEL,CAAC;AAED,QAAM,YAAY,IAAIC,iCAAe,MAAM,EACxC,OAAOC,kBAAO,QAAQ,OAAO,QAAQ,MAAM,EAC3C,MAAA;AAEH,SAAO,IAAID,kBAAAA,eAAA,EACR,OAAOC,kBAAO,OAAO,UAAU,MAAM,MAAM,EAC3C,UAAU,SAAS,EACnB,WAAW;AAAA,IACV,SAAS;AAAA,MACP,WAAW,GAAGA,kBAAO,MAAM,QAAQ,EAAE;AAAA,IAAA;AAAA,EACvC,CACD,EACA,MAAA;AACL;AAyBO,MAAM,gBAAgB;AAAA,EAK3B,YAAY,QAA+B;AAF3C,SAAQ,YAAgC;AAGtC,SAAK,SAAS;AACd,SAAK,QAAQ,wBAAwB,MAAM;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,WAAkD;AACvD,QAAI,KAAK,OAAO;AACd,WAAK,YAAY;AACjB,gBAAU,YAAY,KAAK,MAAM,OAAO;AAAA,IAC1C;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,SAAe;AACb,QAAI,KAAK,SAAS,KAAK,MAAM,QAAQ,YAAY;AAC/C,WAAK,MAAM,QAAQ,OAAA;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,QAAgB,cAA4B;AACtD,SAAK,OAAO,SAAS;AACrB,SAAK,OAAO,eAAe;AAG3B,SAAK,OAAA;AAGL,SAAK,QAAQ,wBAAwB,KAAK,MAAM;AAGhD,QAAI,KAAK,aAAa,KAAK,OAAO;AAChC,WAAK,UAAU,YAAY,KAAK,MAAM,OAAO;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAmB;AACjB,UAAM,EAAE,QAAQ,aAAA,IAAiB,KAAK;AACtC,WAAO,CAAC,EAAE,gBAAgB,SAAS;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,OAAA;AACL,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAmC;AACrC,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAA6B;AAC/B,WAAO,KAAK,OAAO;AAAA,EACrB;AACF;;;"}
@@ -0,0 +1,102 @@
1
+ import * as Styles from "@universityofmaryland/web-styles-library";
2
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
3
+ import { FeedStateEvent } from "./_types.mjs";
4
+ function createPaginationElement(config) {
5
+ const { callback, isLazyLoad, totalEntries, offset } = config;
6
+ if (!isLazyLoad) return;
7
+ if (!totalEntries) return;
8
+ if (!offset) return;
9
+ if (!callback) return;
10
+ if (offset >= totalEntries) return;
11
+ const button = document.createElement("button");
12
+ button.textContent = "Load more";
13
+ button.addEventListener("click", () => {
14
+ callback();
15
+ button.dispatchEvent(
16
+ new CustomEvent(FeedStateEvent.PAGINATION_LOADED, {
17
+ bubbles: true,
18
+ detail: {
19
+ offset,
20
+ totalEntries,
21
+ timestamp: Date.now()
22
+ }
23
+ })
24
+ );
25
+ });
26
+ const ctaButton = new ElementBuilder(button).styled(Styles.element.action.outline.normal).build();
27
+ return new ElementBuilder().styled(Styles.layout.alignment.block.center).withChild(ctaButton).withStyles({
28
+ element: {
29
+ marginTop: `${Styles.token.spacing.lg}`
30
+ }
31
+ }).build();
32
+ }
33
+ class PaginationState {
34
+ constructor(config) {
35
+ this.container = null;
36
+ this.config = config;
37
+ this.model = createPaginationElement(config);
38
+ }
39
+ /**
40
+ * Render the pagination button if applicable
41
+ * @returns ElementModel if rendered, undefined otherwise
42
+ */
43
+ render(container) {
44
+ if (this.model) {
45
+ this.container = container;
46
+ container.appendChild(this.model.element);
47
+ }
48
+ return this.model;
49
+ }
50
+ /**
51
+ * Remove the pagination button from DOM
52
+ */
53
+ remove() {
54
+ if (this.model && this.model.element.parentNode) {
55
+ this.model.element.remove();
56
+ }
57
+ }
58
+ /**
59
+ * Update pagination state with new offset and total
60
+ * Re-creates button if needed
61
+ */
62
+ updateState(offset, totalEntries) {
63
+ this.config.offset = offset;
64
+ this.config.totalEntries = totalEntries;
65
+ this.remove();
66
+ this.model = createPaginationElement(this.config);
67
+ if (this.container && this.model) {
68
+ this.container.appendChild(this.model.element);
69
+ }
70
+ }
71
+ /**
72
+ * Check if more items are available to load
73
+ */
74
+ hasMore() {
75
+ const { offset, totalEntries } = this.config;
76
+ return !!(totalEntries && offset < totalEntries);
77
+ }
78
+ /**
79
+ * Cleanup and remove pagination
80
+ */
81
+ destroy() {
82
+ this.remove();
83
+ this.container = null;
84
+ }
85
+ /**
86
+ * Get the pagination element if it exists
87
+ */
88
+ get element() {
89
+ return this.model?.element;
90
+ }
91
+ /**
92
+ * Get the pagination styles if element exists
93
+ */
94
+ get styles() {
95
+ return this.model?.styles;
96
+ }
97
+ }
98
+ export {
99
+ PaginationState,
100
+ createPaginationElement
101
+ };
102
+ //# sourceMappingURL=pagination.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.mjs","sources":["../../source/states/pagination.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\n\nimport { type ElementModel } from '../_types';\nimport {\n type PaginationStateConfig,\n type PaginationLegacyAPI,\n FeedStateEvent,\n} from './_types';\n\n/**\n * Creates a pagination \"Load more\" button element\n *\n * @param config - Pagination state configuration\n * @returns ElementModel with load more button, or undefined if pagination not needed\n *\n * @example\n * ```typescript\n * const pagination = createPaginationElement({\n * callback: () => loadMoreItems(),\n * isThemeDark: false,\n * isLazyLoad: true,\n * totalEntries: 50,\n * offset: 10\n * });\n * if (pagination) {\n * container.appendChild(pagination.element);\n * }\n * ```\n */\nexport function createPaginationElement(\n config: PaginationStateConfig\n): ElementModel | undefined {\n const { callback, isLazyLoad, totalEntries, offset } = config;\n\n // Guard clauses for when pagination is not needed\n if (!isLazyLoad) return;\n if (!totalEntries) return;\n if (!offset) return;\n if (!callback) return;\n if (offset >= totalEntries) return;\n\n const button = document.createElement('button');\n button.textContent = 'Load more'; // Use textContent for security\n button.addEventListener('click', () => {\n callback();\n button.dispatchEvent(\n new CustomEvent(FeedStateEvent.PAGINATION_LOADED, {\n bubbles: true,\n detail: {\n offset,\n totalEntries,\n timestamp: Date.now(),\n },\n })\n );\n });\n\n const ctaButton = new ElementBuilder(button)\n .styled(Styles.element.action.outline.normal)\n .build();\n\n return new ElementBuilder()\n .styled(Styles.layout.alignment.block.center)\n .withChild(ctaButton)\n .withStyles({\n element: {\n marginTop: `${Styles.token.spacing.lg}`,\n },\n })\n .build();\n}\n\n/**\n * Pagination state manager class\n *\n * Manages a \"Load more\" button for paginated feed content.\n *\n * @example\n * ```typescript\n * const pagination = new PaginationState({\n * callback: () => loadMore(),\n * isLazyLoad: true,\n * totalEntries: 50,\n * offset: 10\n * });\n *\n * const button = pagination.render(container);\n * if (button) {\n * // Pagination was rendered\n * }\n *\n * // Later, update state\n * pagination.updateState(20, 50);\n * ```\n */\nexport class PaginationState {\n private config: PaginationStateConfig;\n private model: ElementModel | undefined;\n private container: HTMLElement | null = null;\n\n constructor(config: PaginationStateConfig) {\n this.config = config;\n this.model = createPaginationElement(config);\n }\n\n /**\n * Render the pagination button if applicable\n * @returns ElementModel if rendered, undefined otherwise\n */\n render(container: HTMLElement): ElementModel | undefined {\n if (this.model) {\n this.container = container;\n container.appendChild(this.model.element);\n }\n return this.model;\n }\n\n /**\n * Remove the pagination button from DOM\n */\n remove(): void {\n if (this.model && this.model.element.parentNode) {\n this.model.element.remove();\n }\n }\n\n /**\n * Update pagination state with new offset and total\n * Re-creates button if needed\n */\n updateState(offset: number, totalEntries: number): void {\n this.config.offset = offset;\n this.config.totalEntries = totalEntries;\n\n // Remove old button\n this.remove();\n\n // Create new button if still needed\n this.model = createPaginationElement(this.config);\n\n // Re-render if we have a container\n if (this.container && this.model) {\n this.container.appendChild(this.model.element);\n }\n }\n\n /**\n * Check if more items are available to load\n */\n hasMore(): boolean {\n const { offset, totalEntries } = this.config;\n return !!(totalEntries && offset < totalEntries);\n }\n\n /**\n * Cleanup and remove pagination\n */\n destroy(): void {\n this.remove();\n this.container = null;\n }\n\n /**\n * Get the pagination element if it exists\n */\n get element(): HTMLElement | undefined {\n return this.model?.element;\n }\n\n /**\n * Get the pagination styles if element exists\n */\n get styles(): string | undefined {\n return this.model?.styles;\n }\n}\n\n// =============================================================================\n// Backwards Compatible Exports (Legacy API)\n// =============================================================================\n\n/**\n * @deprecated Use PaginationState class or createPaginationElement instead\n */\nconst create = (config: PaginationStateConfig): ElementModel | undefined => {\n return createPaginationElement(config);\n};\n\n/**\n * @deprecated Use PaginationState.remove() instead\n */\nconst remove = ({ container }: { container: HTMLElement }): void => {\n const button = container.querySelector(\n `.${Styles.layout.alignment.block.center.className}`\n ) as HTMLDivElement;\n\n if (button) button.remove();\n};\n\n/**\n * Legacy API for backwards compatibility\n * @deprecated Use PaginationState class instead\n */\nexport default {\n remove,\n create,\n} as PaginationLegacyAPI;\n"],"names":[],"mappings":";;;AA8BO,SAAS,wBACd,QAC0B;AAC1B,QAAM,EAAE,UAAU,YAAY,cAAc,WAAW;AAGvD,MAAI,CAAC,WAAY;AACjB,MAAI,CAAC,aAAc;AACnB,MAAI,CAAC,OAAQ;AACb,MAAI,CAAC,SAAU;AACf,MAAI,UAAU,aAAc;AAE5B,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,cAAc;AACrB,SAAO,iBAAiB,SAAS,MAAM;AACrC,aAAA;AACA,WAAO;AAAA,MACL,IAAI,YAAY,eAAe,mBAAmB;AAAA,QAChD,SAAS;AAAA,QACT,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA,WAAW,KAAK,IAAA;AAAA,QAAI;AAAA,MACtB,CACD;AAAA,IAAA;AAAA,EAEL,CAAC;AAED,QAAM,YAAY,IAAI,eAAe,MAAM,EACxC,OAAO,OAAO,QAAQ,OAAO,QAAQ,MAAM,EAC3C,MAAA;AAEH,SAAO,IAAI,eAAA,EACR,OAAO,OAAO,OAAO,UAAU,MAAM,MAAM,EAC3C,UAAU,SAAS,EACnB,WAAW;AAAA,IACV,SAAS;AAAA,MACP,WAAW,GAAG,OAAO,MAAM,QAAQ,EAAE;AAAA,IAAA;AAAA,EACvC,CACD,EACA,MAAA;AACL;AAyBO,MAAM,gBAAgB;AAAA,EAK3B,YAAY,QAA+B;AAF3C,SAAQ,YAAgC;AAGtC,SAAK,SAAS;AACd,SAAK,QAAQ,wBAAwB,MAAM;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,WAAkD;AACvD,QAAI,KAAK,OAAO;AACd,WAAK,YAAY;AACjB,gBAAU,YAAY,KAAK,MAAM,OAAO;AAAA,IAC1C;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,SAAe;AACb,QAAI,KAAK,SAAS,KAAK,MAAM,QAAQ,YAAY;AAC/C,WAAK,MAAM,QAAQ,OAAA;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,QAAgB,cAA4B;AACtD,SAAK,OAAO,SAAS;AACrB,SAAK,OAAO,eAAe;AAG3B,SAAK,OAAA;AAGL,SAAK,QAAQ,wBAAwB,KAAK,MAAM;AAGhD,QAAI,KAAK,aAAa,KAAK,OAAO;AAChC,WAAK,UAAU,YAAY,KAAK,MAAM,OAAO;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAmB;AACjB,UAAM,EAAE,QAAQ,aAAA,IAAiB,KAAK;AACtC,WAAO,CAAC,EAAE,gBAAgB,SAAS;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,OAAA;AACL,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAmC;AACrC,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAA6B;AAC/B,WAAO,KAAK,OAAO;AAAA,EACrB;AACF;"}
@@ -0,0 +1,4 @@
1
+ import { DisplayStrategy } from '../../factory/core/types';
2
+ import { EventEntry } from '../../types/data';
3
+ export declare const eventsDisplayStrategy: DisplayStrategy<EventEntry>;
4
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../source/strategies/display/events.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAsB,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqBxC,eAAO,MAAM,qBAAqB,EAAE,eAAe,CAAC,UAAU,CA4E7D,CAAC"}