@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,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const composite = require("@universityofmaryland/web-elements-library/composite");
4
+ const atomic = require("@universityofmaryland/web-elements-library/atomic");
5
+ const elements = require("@universityofmaryland/web-utilities-library/elements");
6
+ const eventsDisplayStrategy = {
7
+ layoutType: "grid",
8
+ mapEntryToCard: (entry, options) => {
9
+ const {
10
+ isThemeDark = false,
11
+ isTransparent = false,
12
+ isAligned = false,
13
+ imageConfig,
14
+ cardType = "block"
15
+ } = options;
16
+ const headline = elements.createTextWithLink({
17
+ text: entry.title,
18
+ url: entry.url
19
+ });
20
+ const text = elements.createTextContainer({
21
+ text: entry.summary,
22
+ allowHTML: true
23
+ });
24
+ const eventMeta = atomic.events.meta({
25
+ ...entry,
26
+ isThemeDark
27
+ });
28
+ const image = imageConfig ? elements.createImageOrLinkedImage(imageConfig(entry)) : void 0;
29
+ const dateSign = cardType === "list" ? atomic.events.sign({
30
+ startMonth: entry.startMonth,
31
+ startDay: entry.startDay,
32
+ endMonth: entry.endMonth,
33
+ endDay: entry.endDay,
34
+ isThemeDark,
35
+ isLargeSize: true
36
+ }) : void 0;
37
+ if (cardType === "list") {
38
+ return composite.card.list({
39
+ headline,
40
+ text,
41
+ eventMeta,
42
+ dateSign,
43
+ image,
44
+ isAligned,
45
+ isThemeDark
46
+ });
47
+ }
48
+ return composite.card.block({
49
+ headline,
50
+ text,
51
+ eventMeta,
52
+ image,
53
+ isAligned,
54
+ isTransparent,
55
+ isThemeDark
56
+ });
57
+ }
58
+ };
59
+ exports.eventsDisplayStrategy = eventsDisplayStrategy;
60
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sources":["../../../source/strategies/display/events.ts"],"sourcesContent":["/**\n * Events Display Strategy\n *\n * Strategy for displaying event entries as cards.\n * Maps event data to card elements with event-specific metadata.\n *\n * @module strategies/display/events\n */\n\nimport { card } from '@universityofmaryland/web-elements-library/composite';\nimport { events as eventElements } from '@universityofmaryland/web-elements-library/atomic';\nimport {\n createTextWithLink,\n createTextContainer,\n createImageOrLinkedImage,\n} from '@universityofmaryland/web-utilities-library/elements';\nimport { DisplayStrategy, CardMappingOptions } from '../../factory/core/types';\nimport { ElementModel } from '../../_types';\nimport { EventEntry } from 'types/data';\n\n/**\n * Events display strategy\n *\n * Maps event entries to card elements with event metadata.\n * Supports both block and list card layouts.\n *\n * @example\n * ```typescript\n * const feed = createBaseFeed({\n * displayStrategy: eventsDisplayStrategy,\n * imageConfig: (entry) => ({\n * imageUrl: entry.image[0].url,\n * altText: entry.image[0].altText || 'Event Image',\n * linkUrl: entry.url,\n * }),\n * // ...\n * });\n * ```\n */\nexport const eventsDisplayStrategy: DisplayStrategy<EventEntry> = {\n layoutType: 'grid',\n\n mapEntryToCard: (\n entry: EventEntry,\n options: CardMappingOptions,\n ): ElementModel => {\n const {\n isThemeDark = false,\n isTransparent = false,\n isAligned = false,\n imageConfig,\n cardType = 'block',\n } = options;\n\n // Create headline\n const headline = createTextWithLink({\n text: entry.title,\n url: entry.url,\n });\n\n // Create summary text\n const text = createTextContainer({\n text: entry.summary,\n allowHTML: true,\n });\n\n // Create event metadata\n // Pass all entry data to events.meta() - it will handle missing fields gracefully\n const eventMeta = eventElements.meta({\n ...entry,\n isThemeDark,\n } as any);\n\n // Create image (if imageConfig provided)\n const image = imageConfig\n ? createImageOrLinkedImage(imageConfig(entry))\n : undefined;\n\n // Create date sign for list layout\n const dateSign =\n cardType === 'list'\n ? eventElements.sign({\n startMonth: entry.startMonth,\n startDay: entry.startDay,\n endMonth: entry.endMonth,\n endDay: entry.endDay,\n isThemeDark,\n isLargeSize: true,\n })\n : undefined;\n\n // Create card based on type\n if (cardType === 'list') {\n return card.list({\n headline,\n text,\n eventMeta,\n dateSign,\n image,\n isAligned,\n isThemeDark,\n });\n }\n\n // Default to block card\n return card.block({\n headline,\n text,\n eventMeta,\n image,\n isAligned,\n isTransparent,\n isThemeDark,\n });\n },\n};\n"],"names":["createTextWithLink","createTextContainer","eventElements","createImageOrLinkedImage","card"],"mappings":";;;;;AAuCO,MAAM,wBAAqD;AAAA,EAChE,YAAY;AAAA,EAEZ,gBAAgB,CACd,OACA,YACiB;AACjB,UAAM;AAAA,MACJ,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ;AAAA,MACA,WAAW;AAAA,IAAA,IACT;AAGJ,UAAM,WAAWA,SAAAA,mBAAmB;AAAA,MAClC,MAAM,MAAM;AAAA,MACZ,KAAK,MAAM;AAAA,IAAA,CACZ;AAGD,UAAM,OAAOC,SAAAA,oBAAoB;AAAA,MAC/B,MAAM,MAAM;AAAA,MACZ,WAAW;AAAA,IAAA,CACZ;AAID,UAAM,YAAYC,OAAAA,OAAc,KAAK;AAAA,MACnC,GAAG;AAAA,MACH;AAAA,IAAA,CACM;AAGR,UAAM,QAAQ,cACVC,SAAAA,yBAAyB,YAAY,KAAK,CAAC,IAC3C;AAGJ,UAAM,WACJ,aAAa,SACTD,OAAAA,OAAc,KAAK;AAAA,MACjB,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM;AAAA,MACd;AAAA,MACA,aAAa;AAAA,IAAA,CACd,IACD;AAGN,QAAI,aAAa,QAAQ;AACvB,aAAOE,UAAAA,KAAK,KAAK;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAGA,WAAOA,UAAAA,KAAK,MAAM;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AACF;;"}
@@ -0,0 +1,60 @@
1
+ import { card } from "@universityofmaryland/web-elements-library/composite";
2
+ import { events } from "@universityofmaryland/web-elements-library/atomic";
3
+ import { createTextWithLink, createTextContainer, createImageOrLinkedImage } from "@universityofmaryland/web-utilities-library/elements";
4
+ const eventsDisplayStrategy = {
5
+ layoutType: "grid",
6
+ mapEntryToCard: (entry, options) => {
7
+ const {
8
+ isThemeDark = false,
9
+ isTransparent = false,
10
+ isAligned = false,
11
+ imageConfig,
12
+ cardType = "block"
13
+ } = options;
14
+ const headline = createTextWithLink({
15
+ text: entry.title,
16
+ url: entry.url
17
+ });
18
+ const text = createTextContainer({
19
+ text: entry.summary,
20
+ allowHTML: true
21
+ });
22
+ const eventMeta = events.meta({
23
+ ...entry,
24
+ isThemeDark
25
+ });
26
+ const image = imageConfig ? createImageOrLinkedImage(imageConfig(entry)) : void 0;
27
+ const dateSign = cardType === "list" ? events.sign({
28
+ startMonth: entry.startMonth,
29
+ startDay: entry.startDay,
30
+ endMonth: entry.endMonth,
31
+ endDay: entry.endDay,
32
+ isThemeDark,
33
+ isLargeSize: true
34
+ }) : void 0;
35
+ if (cardType === "list") {
36
+ return card.list({
37
+ headline,
38
+ text,
39
+ eventMeta,
40
+ dateSign,
41
+ image,
42
+ isAligned,
43
+ isThemeDark
44
+ });
45
+ }
46
+ return card.block({
47
+ headline,
48
+ text,
49
+ eventMeta,
50
+ image,
51
+ isAligned,
52
+ isTransparent,
53
+ isThemeDark
54
+ });
55
+ }
56
+ };
57
+ export {
58
+ eventsDisplayStrategy
59
+ };
60
+ //# sourceMappingURL=events.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.mjs","sources":["../../../source/strategies/display/events.ts"],"sourcesContent":["/**\n * Events Display Strategy\n *\n * Strategy for displaying event entries as cards.\n * Maps event data to card elements with event-specific metadata.\n *\n * @module strategies/display/events\n */\n\nimport { card } from '@universityofmaryland/web-elements-library/composite';\nimport { events as eventElements } from '@universityofmaryland/web-elements-library/atomic';\nimport {\n createTextWithLink,\n createTextContainer,\n createImageOrLinkedImage,\n} from '@universityofmaryland/web-utilities-library/elements';\nimport { DisplayStrategy, CardMappingOptions } from '../../factory/core/types';\nimport { ElementModel } from '../../_types';\nimport { EventEntry } from 'types/data';\n\n/**\n * Events display strategy\n *\n * Maps event entries to card elements with event metadata.\n * Supports both block and list card layouts.\n *\n * @example\n * ```typescript\n * const feed = createBaseFeed({\n * displayStrategy: eventsDisplayStrategy,\n * imageConfig: (entry) => ({\n * imageUrl: entry.image[0].url,\n * altText: entry.image[0].altText || 'Event Image',\n * linkUrl: entry.url,\n * }),\n * // ...\n * });\n * ```\n */\nexport const eventsDisplayStrategy: DisplayStrategy<EventEntry> = {\n layoutType: 'grid',\n\n mapEntryToCard: (\n entry: EventEntry,\n options: CardMappingOptions,\n ): ElementModel => {\n const {\n isThemeDark = false,\n isTransparent = false,\n isAligned = false,\n imageConfig,\n cardType = 'block',\n } = options;\n\n // Create headline\n const headline = createTextWithLink({\n text: entry.title,\n url: entry.url,\n });\n\n // Create summary text\n const text = createTextContainer({\n text: entry.summary,\n allowHTML: true,\n });\n\n // Create event metadata\n // Pass all entry data to events.meta() - it will handle missing fields gracefully\n const eventMeta = eventElements.meta({\n ...entry,\n isThemeDark,\n } as any);\n\n // Create image (if imageConfig provided)\n const image = imageConfig\n ? createImageOrLinkedImage(imageConfig(entry))\n : undefined;\n\n // Create date sign for list layout\n const dateSign =\n cardType === 'list'\n ? eventElements.sign({\n startMonth: entry.startMonth,\n startDay: entry.startDay,\n endMonth: entry.endMonth,\n endDay: entry.endDay,\n isThemeDark,\n isLargeSize: true,\n })\n : undefined;\n\n // Create card based on type\n if (cardType === 'list') {\n return card.list({\n headline,\n text,\n eventMeta,\n dateSign,\n image,\n isAligned,\n isThemeDark,\n });\n }\n\n // Default to block card\n return card.block({\n headline,\n text,\n eventMeta,\n image,\n isAligned,\n isTransparent,\n isThemeDark,\n });\n },\n};\n"],"names":["eventElements"],"mappings":";;;AAuCO,MAAM,wBAAqD;AAAA,EAChE,YAAY;AAAA,EAEZ,gBAAgB,CACd,OACA,YACiB;AACjB,UAAM;AAAA,MACJ,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ;AAAA,MACA,WAAW;AAAA,IAAA,IACT;AAGJ,UAAM,WAAW,mBAAmB;AAAA,MAClC,MAAM,MAAM;AAAA,MACZ,KAAK,MAAM;AAAA,IAAA,CACZ;AAGD,UAAM,OAAO,oBAAoB;AAAA,MAC/B,MAAM,MAAM;AAAA,MACZ,WAAW;AAAA,IAAA,CACZ;AAID,UAAM,YAAYA,OAAc,KAAK;AAAA,MACnC,GAAG;AAAA,MACH;AAAA,IAAA,CACM;AAGR,UAAM,QAAQ,cACV,yBAAyB,YAAY,KAAK,CAAC,IAC3C;AAGJ,UAAM,WACJ,aAAa,SACTA,OAAc,KAAK;AAAA,MACjB,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM;AAAA,MACd;AAAA,MACA,aAAa;AAAA,IAAA,CACd,IACD;AAGN,QAAI,aAAa,QAAQ;AACvB,aAAO,KAAK,KAAK;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAGA,WAAO,KAAK,MAAM;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AACF;"}
@@ -0,0 +1,19 @@
1
+ import { DisplayStrategy } from '../../factory/core/types';
2
+ import { ExpertEntry } from '../../types/data';
3
+ export declare const buildFullName: (entry: ExpertEntry) => string;
4
+ export declare const mapExpertToBioProps: (entry: ExpertEntry, displayType: "small" | "full", isThemeDark?: boolean) => {
5
+ name: HTMLElement | null;
6
+ pronouns: HTMLElement | null;
7
+ job: HTMLElement | null;
8
+ association: HTMLElement | null;
9
+ email: HTMLElement | null;
10
+ linkedin: HTMLElement | null;
11
+ phone: null;
12
+ address: null;
13
+ additionalContact: null;
14
+ image: HTMLAnchorElement | HTMLImageElement | null;
15
+ description: HTMLElement | null;
16
+ isThemeDark: boolean;
17
+ };
18
+ export declare const expertsDisplayStrategy: DisplayStrategy<ExpertEntry>;
19
+ //# sourceMappingURL=experts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experts.d.ts","sourceRoot":"","sources":["../../../source/strategies/display/experts.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,eAAe,EAAsB,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqFzC,eAAO,MAAM,aAAa,GAAI,OAAO,WAAW,KAAG,MAUlD,CAAC;AAqZF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,WAAW,EAClB,aAAa,OAAO,GAAG,MAAM,EAC7B,cAAa,OAAe;;;;;;;;;;;;;CAmC7B,CAAC;AAqBF,eAAO,MAAM,sBAAsB,EAAE,eAAe,CAAC,WAAW,CAwB/D,CAAC"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const composite = require("@universityofmaryland/web-elements-library/composite");
4
+ const elements = require("@universityofmaryland/web-utilities-library/elements");
5
+ const CONTACT_CONFIGS = [
6
+ {
7
+ key: "email",
8
+ label: () => "Email",
9
+ url: (value) => `mailto:${value}`
10
+ },
11
+ {
12
+ key: "website",
13
+ label: (value) => value,
14
+ url: (value) => value
15
+ },
16
+ {
17
+ key: "linkedin",
18
+ label: (value) => value,
19
+ url: (value) => value
20
+ },
21
+ {
22
+ key: "twitter",
23
+ label: (value) => value,
24
+ url: (value) => value
25
+ }
26
+ ];
27
+ const buildFullName = (entry) => {
28
+ const parts = [
29
+ entry.prefix,
30
+ entry.firstName,
31
+ entry.middleName,
32
+ entry.lastName,
33
+ entry.suffix
34
+ ].filter(Boolean);
35
+ return parts.join(" ");
36
+ };
37
+ const buildProfileUrl = (entry) => {
38
+ return `https://umdrightnow.umd.edu/expert/${entry.slug}`;
39
+ };
40
+ const extractPrimaryJobTitle = (entry) => {
41
+ return entry.organizations?.[0]?.jobs?.[0]?.title || null;
42
+ };
43
+ const extractPrimaryAssociation = (entry) => {
44
+ const campusUnit = entry.organizations?.[0]?.jobs?.[0]?.campusUnits?.[0];
45
+ if (!campusUnit) return null;
46
+ return {
47
+ title: campusUnit.title,
48
+ url: campusUnit.link?.url
49
+ };
50
+ };
51
+ const extractImageData = (entry, fullName) => {
52
+ const headshotUrl = entry.headshot?.[0]?.url;
53
+ if (!headshotUrl) return null;
54
+ return {
55
+ url: headshotUrl,
56
+ altText: fullName
57
+ };
58
+ };
59
+ const extractContactData = (entry) => {
60
+ return {
61
+ email: entry.email || null,
62
+ website: entry.website || null,
63
+ linkedin: entry.linkedin || null,
64
+ twitter: entry.twitter || null
65
+ };
66
+ };
67
+ const extractDescription = (entry, displayType) => {
68
+ return entry.summary?.html || null;
69
+ };
70
+ const extractPronouns = (entry) => {
71
+ return entry.pronouns || null;
72
+ };
73
+ const createNameElement = (fullName, url, containerTag) => {
74
+ return elements.createTextWithLink({
75
+ text: fullName,
76
+ url,
77
+ containerTag
78
+ });
79
+ };
80
+ const createJobElement = (jobTitle) => {
81
+ if (!jobTitle) return null;
82
+ return elements.createTextContainer({ text: jobTitle });
83
+ };
84
+ const createAssociationElement = (association) => {
85
+ if (!association) return null;
86
+ if (association.url) {
87
+ return elements.createTextWithLink({
88
+ text: association.title,
89
+ url: association.url
90
+ });
91
+ }
92
+ return elements.createTextContainer({ text: association.title });
93
+ };
94
+ const createImageElement = (imageData, linkUrl, linkLabel) => {
95
+ if (!imageData) return null;
96
+ return elements.createImageOrLinkedImage({
97
+ imageUrl: imageData.url,
98
+ altText: imageData.altText,
99
+ linkUrl,
100
+ linkLabel
101
+ });
102
+ };
103
+ const createDescriptionElement = (description) => {
104
+ if (!description) return null;
105
+ return elements.createTextContainer({ text: description, allowHTML: true });
106
+ };
107
+ const createPronounsElement = (pronouns) => {
108
+ if (!pronouns) return null;
109
+ return elements.createTextContainer({ text: pronouns });
110
+ };
111
+ const createContactElements = (contactData) => {
112
+ return CONTACT_CONFIGS.reduce(
113
+ (elements$1, config) => {
114
+ const value = contactData[config.key];
115
+ if (!value) return elements$1;
116
+ const element = elements.createTextWithLink({
117
+ text: config.label(value),
118
+ url: config.url(value)
119
+ });
120
+ elements$1[config.key] = element;
121
+ return elements$1;
122
+ },
123
+ {}
124
+ );
125
+ };
126
+ const createBlockCardProps = (entry, options) => {
127
+ const { isThemeDark = false } = options;
128
+ const fullName = buildFullName(entry);
129
+ const profileUrl = buildProfileUrl(entry);
130
+ const jobTitle = extractPrimaryJobTitle(entry);
131
+ const association = extractPrimaryAssociation(entry);
132
+ const imageData = extractImageData(entry, fullName);
133
+ const pronouns = extractPronouns(entry);
134
+ const name = createNameElement(fullName, profileUrl);
135
+ const job = createJobElement(jobTitle);
136
+ const associationElement = createAssociationElement(association);
137
+ const image = createImageElement(imageData, profileUrl, `View profile for ${fullName}`);
138
+ const pronounsElement = createPronounsElement(pronouns);
139
+ return composite.person.block({
140
+ name,
141
+ pronouns: pronounsElement,
142
+ job,
143
+ association: associationElement,
144
+ image,
145
+ isThemeDark
146
+ });
147
+ };
148
+ const createListCardProps = (entry, options) => {
149
+ const { isThemeDark = false } = options;
150
+ const fullName = buildFullName(entry);
151
+ const profileUrl = buildProfileUrl(entry);
152
+ const jobTitle = extractPrimaryJobTitle(entry);
153
+ const association = extractPrimaryAssociation(entry);
154
+ const imageData = extractImageData(entry, fullName);
155
+ const pronouns = extractPronouns(entry);
156
+ const name = createNameElement(fullName, profileUrl);
157
+ const job = createJobElement(jobTitle);
158
+ const associationElement = createAssociationElement(association);
159
+ const image = createImageElement(imageData, profileUrl, `View profile for ${fullName}`);
160
+ const pronounsElement = createPronounsElement(pronouns);
161
+ return composite.person.list({
162
+ name,
163
+ pronouns: pronounsElement,
164
+ job,
165
+ association: associationElement,
166
+ image,
167
+ isThemeDark
168
+ });
169
+ };
170
+ const createTabularCardProps = (entry, options) => {
171
+ const { isThemeDark = false } = options;
172
+ const fullName = buildFullName(entry);
173
+ const profileUrl = buildProfileUrl(entry);
174
+ const jobTitle = extractPrimaryJobTitle(entry);
175
+ const association = extractPrimaryAssociation(entry);
176
+ const imageData = extractImageData(entry, fullName);
177
+ const contactData = extractContactData(entry);
178
+ const pronouns = extractPronouns(entry);
179
+ const name = createNameElement(fullName, profileUrl);
180
+ const job = createJobElement(jobTitle);
181
+ const associationElement = createAssociationElement(association);
182
+ const image = createImageElement(imageData, profileUrl, `View profile for ${fullName}`);
183
+ const contactElements = createContactElements(contactData);
184
+ const pronounsElement = createPronounsElement(pronouns);
185
+ return composite.person.tabular({
186
+ name,
187
+ pronouns: pronounsElement,
188
+ job,
189
+ association: associationElement,
190
+ image,
191
+ ...contactElements,
192
+ isThemeDark
193
+ });
194
+ };
195
+ const createOverlayCardProps = (entry, options) => {
196
+ const { isThemeDark = false } = options;
197
+ const fullName = buildFullName(entry);
198
+ const profileUrl = buildProfileUrl(entry);
199
+ const jobTitle = extractPrimaryJobTitle(entry);
200
+ const imageData = extractImageData(entry, fullName);
201
+ const headline = createNameElement(fullName, profileUrl);
202
+ const text = createJobElement(jobTitle);
203
+ const backgroundImage = createImageElement(
204
+ imageData,
205
+ profileUrl,
206
+ `View profile for ${fullName}`
207
+ );
208
+ return composite.card.overlay.image({
209
+ headline,
210
+ text,
211
+ backgroundImage,
212
+ isThemeDark
213
+ });
214
+ };
215
+ const mapExpertToBioProps = (entry, displayType, isThemeDark = false) => {
216
+ const fullName = buildFullName(entry);
217
+ const profileUrl = buildProfileUrl(entry);
218
+ const jobTitle = extractPrimaryJobTitle(entry);
219
+ const association = extractPrimaryAssociation(entry);
220
+ const imageData = extractImageData(entry, fullName);
221
+ const contactData = extractContactData(entry);
222
+ const description = extractDescription(entry);
223
+ const pronouns = extractPronouns(entry);
224
+ const name = createNameElement(fullName, profileUrl, "h1");
225
+ const job = createJobElement(jobTitle);
226
+ const associationElement = createAssociationElement(association);
227
+ const image = createImageElement(imageData);
228
+ const descriptionElement = createDescriptionElement(description);
229
+ const contactElements = createContactElements(contactData);
230
+ const pronounsElement = createPronounsElement(pronouns);
231
+ return {
232
+ name,
233
+ pronouns: pronounsElement,
234
+ job,
235
+ association: associationElement,
236
+ email: contactElements.email || null,
237
+ linkedin: contactElements.linkedin || null,
238
+ phone: null,
239
+ address: null,
240
+ additionalContact: null,
241
+ image,
242
+ description: descriptionElement,
243
+ isThemeDark
244
+ };
245
+ };
246
+ const expertsDisplayStrategy = {
247
+ layoutType: "list",
248
+ mapEntryToCard: (entry, options) => {
249
+ const { isOverlay = false, cardType = "block" } = options;
250
+ if (isOverlay && entry.headshot?.[0]?.url) {
251
+ return createOverlayCardProps(entry, options);
252
+ }
253
+ switch (cardType) {
254
+ case "list":
255
+ return createListCardProps(entry, options);
256
+ case "tabular":
257
+ return createTabularCardProps(entry, options);
258
+ default:
259
+ return createBlockCardProps(entry, options);
260
+ }
261
+ }
262
+ };
263
+ exports.buildFullName = buildFullName;
264
+ exports.expertsDisplayStrategy = expertsDisplayStrategy;
265
+ exports.mapExpertToBioProps = mapExpertToBioProps;
266
+ //# sourceMappingURL=experts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experts.js","sources":["../../../source/strategies/display/experts.ts"],"sourcesContent":["/**\n * Experts Display Strategy\n *\n * Strategy for displaying expert entries using person or card elements.\n * Uses a functional composition approach with pure data extraction,\n * element creation, and card composition functions.\n *\n * @module strategies/display/experts\n */\n\nimport {\n person,\n card,\n} from '@universityofmaryland/web-elements-library/composite';\nimport {\n createTextWithLink,\n createTextContainer,\n createImageOrLinkedImage,\n} from '@universityofmaryland/web-utilities-library/elements';\nimport { DisplayStrategy, CardMappingOptions } from '../../factory/core/types';\nimport { ElementModel } from '../../_types';\nimport { ExpertEntry } from 'types/data';\n\n// ============================================================================\n// TYPE DEFINITIONS\n// ============================================================================\n\n/**\n * Contact field configuration\n */\ninterface ContactConfig {\n key: keyof Pick<ExpertEntry, 'email' | 'website' | 'linkedin' | 'twitter'>;\n label: (value: string) => string;\n url: (value: string) => string;\n}\n\n/**\n * Extracted association data\n */\ninterface AssociationData {\n title: string;\n url?: string | null;\n}\n\n/**\n * Extracted image data\n */\ninterface ImageData {\n url: string;\n altText: string;\n}\n\n/**\n * Extracted contact data\n */\ninterface ContactData {\n email?: string | null;\n website?: string | null;\n linkedin?: string | null;\n twitter?: string | null;\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\n/**\n * Contact field configuration\n *\n * Defines how each contact type should be rendered as a link.\n */\nconst CONTACT_CONFIGS: ContactConfig[] = [\n {\n key: 'email',\n label: () => 'Email',\n url: (value) => `mailto:${value}`,\n },\n {\n key: 'website',\n label: (value) => value,\n url: (value) => value,\n },\n {\n key: 'linkedin',\n label: (value) => value,\n url: (value) => value,\n },\n {\n key: 'twitter',\n label: (value) => value,\n url: (value) => value,\n },\n];\n\n// ============================================================================\n// PURE DATA EXTRACTION FUNCTIONS\n// ============================================================================\n\n/**\n * Build full name from expert entry\n *\n * Combines prefix (optional), first, middle (optional), last name, and suffix (optional).\n *\n * @param entry - Expert entry\n * @returns Full name string\n */\nexport const buildFullName = (entry: ExpertEntry): string => {\n const parts = [\n entry.prefix,\n entry.firstName,\n entry.middleName,\n entry.lastName,\n entry.suffix,\n ].filter(Boolean);\n\n return parts.join(' ');\n};\n\n/**\n * Build expert profile URL\n *\n * @param entry - Expert entry\n * @returns Profile URL string\n */\nconst buildProfileUrl = (entry: ExpertEntry): string => {\n return `https://umdrightnow.umd.edu/expert/${entry.slug}`;\n};\n\n/**\n * Extract primary job title\n *\n * @param entry - Expert entry\n * @returns Job title string or null\n */\nconst extractPrimaryJobTitle = (entry: ExpertEntry): string | null => {\n return entry.organizations?.[0]?.jobs?.[0]?.title || null;\n};\n\n/**\n * Extract primary association (campus unit)\n *\n * @param entry - Expert entry\n * @returns Association data or null\n */\nconst extractPrimaryAssociation = (\n entry: ExpertEntry,\n): AssociationData | null => {\n const campusUnit = entry.organizations?.[0]?.jobs?.[0]?.campusUnits?.[0];\n if (!campusUnit) return null;\n\n return {\n title: campusUnit.title,\n url: campusUnit.link?.url,\n };\n};\n\n/**\n * Extract image data from headshot\n *\n * @param entry - Expert entry\n * @param fullName - Full name for alt text\n * @returns Image data or null\n */\nconst extractImageData = (\n entry: ExpertEntry,\n fullName: string,\n): ImageData | null => {\n const headshotUrl = entry.headshot?.[0]?.url;\n if (!headshotUrl) return null;\n\n return {\n url: headshotUrl,\n altText: fullName,\n };\n};\n\n/**\n * Extract contact data\n *\n * @param entry - Expert entry\n * @returns Contact data object\n */\nconst extractContactData = (entry: ExpertEntry): ContactData => {\n return {\n email: entry.email || null,\n website: entry.website || null,\n linkedin: entry.linkedin || null,\n twitter: entry.twitter || null,\n };\n};\n\n/**\n * Extract description based on display type\n *\n * @param entry - Expert entry\n * @param displayType - 'small' for summary, 'full' for biography\n * @returns HTML description string or null\n */\nconst extractDescription = (\n entry: ExpertEntry,\n displayType: 'small' | 'full',\n): string | null => {\n if (displayType === 'full') {\n return entry.bio?.html || null;\n }\n return entry.summary?.html || null;\n};\n\n/**\n * Extract pronouns\n *\n * @param entry - Expert entry\n * @returns Pronouns string or null\n */\nconst extractPronouns = (entry: ExpertEntry): string | null => {\n return entry.pronouns || null;\n};\n\n// ============================================================================\n// ELEMENT CREATION FUNCTIONS\n// ============================================================================\n\n/**\n * Create name element with link\n *\n * @param fullName - Full name text\n * @param url - Profile URL\n * @param containerTag - HTML tag for container (default: undefined)\n * @returns Name element or null\n */\nconst createNameElement = (\n fullName: string,\n url: string,\n containerTag?: 'h1' | 'h2' | 'h3',\n): HTMLElement | null => {\n return createTextWithLink({\n text: fullName,\n url,\n containerTag,\n });\n};\n\n/**\n * Create job title element\n *\n * @param jobTitle - Job title text\n * @returns Job element or null\n */\nconst createJobElement = (jobTitle: string | null): HTMLElement | null => {\n if (!jobTitle) return null;\n return createTextContainer({ text: jobTitle });\n};\n\n/**\n * Create association element (with optional link)\n *\n * @param association - Association data\n * @returns Association element or null\n */\nconst createAssociationElement = (\n association: AssociationData | null,\n): HTMLElement | null => {\n if (!association) return null;\n\n if (association.url) {\n return createTextWithLink({\n text: association.title,\n url: association.url,\n });\n }\n\n return createTextContainer({ text: association.title });\n};\n\n/**\n * Create image element (with optional link)\n *\n * @param imageData - Image data\n * @param linkUrl - Optional link URL\n * @param linkLabel - Optional link label\n * @returns Image element or null\n */\nconst createImageElement = (\n imageData: ImageData | null,\n linkUrl?: string,\n linkLabel?: string,\n): HTMLImageElement | HTMLAnchorElement | null => {\n if (!imageData) return null;\n\n return createImageOrLinkedImage({\n imageUrl: imageData.url,\n altText: imageData.altText,\n linkUrl,\n linkLabel,\n });\n};\n\n/**\n * Create description element\n *\n * @param description - HTML description text\n * @returns Description element or null\n */\nconst createDescriptionElement = (\n description: string | null,\n): HTMLElement | null => {\n if (!description) return null;\n return createTextContainer({ text: description, allowHTML: true });\n};\n\n/**\n * Create pronouns element\n *\n * @param pronouns - Pronouns text\n * @returns Pronouns element or null\n */\nconst createPronounsElement = (pronouns: string | null): HTMLElement | null => {\n if (!pronouns) return null;\n return createTextContainer({ text: pronouns });\n};\n\n/**\n * Create contact elements from contact data\n *\n * @param contactData - Contact data object\n * @returns Object with contact elements keyed by contact type\n */\nconst createContactElements = (\n contactData: ContactData,\n): { [key: string]: HTMLElement | null } => {\n return CONTACT_CONFIGS.reduce<{ [key: string]: HTMLElement | null }>(\n (elements, config) => {\n const value = contactData[config.key];\n if (!value) return elements;\n\n const element = createTextWithLink({\n text: config.label(value),\n url: config.url(value),\n });\n\n elements[config.key] = element;\n return elements;\n },\n {},\n );\n};\n\n// ============================================================================\n// CARD COMPOSITION FUNCTIONS\n// ============================================================================\n\n/**\n * Create props for person block card\n *\n * @param entry - Expert entry\n * @param options - Card mapping options\n * @returns Person block card element\n */\nconst createBlockCardProps = (\n entry: ExpertEntry,\n options: CardMappingOptions,\n): ElementModel => {\n const { isThemeDark = false } = options;\n\n // Extract data\n const fullName = buildFullName(entry);\n const profileUrl = buildProfileUrl(entry);\n const jobTitle = extractPrimaryJobTitle(entry);\n const association = extractPrimaryAssociation(entry);\n const imageData = extractImageData(entry, fullName);\n const pronouns = extractPronouns(entry);\n\n // Create elements\n const name = createNameElement(fullName, profileUrl);\n const job = createJobElement(jobTitle);\n const associationElement = createAssociationElement(association);\n const image = createImageElement(imageData, profileUrl, `View profile for ${fullName}`);\n const pronounsElement = createPronounsElement(pronouns);\n\n return person.block({\n name,\n pronouns: pronounsElement,\n job,\n association: associationElement,\n image,\n isThemeDark,\n });\n};\n\n/**\n * Create props for person list card\n *\n * @param entry - Expert entry\n * @param options - Card mapping options\n * @returns Person list card element\n */\nconst createListCardProps = (\n entry: ExpertEntry,\n options: CardMappingOptions,\n): ElementModel => {\n const { isThemeDark = false } = options;\n\n // Extract data\n const fullName = buildFullName(entry);\n const profileUrl = buildProfileUrl(entry);\n const jobTitle = extractPrimaryJobTitle(entry);\n const association = extractPrimaryAssociation(entry);\n const imageData = extractImageData(entry, fullName);\n const pronouns = extractPronouns(entry);\n\n // Create elements\n const name = createNameElement(fullName, profileUrl);\n const job = createJobElement(jobTitle);\n const associationElement = createAssociationElement(association);\n const image = createImageElement(imageData, profileUrl, `View profile for ${fullName}`);\n const pronounsElement = createPronounsElement(pronouns);\n\n return person.list({\n name,\n pronouns: pronounsElement,\n job,\n association: associationElement,\n image,\n isThemeDark,\n });\n};\n\n/**\n * Create props for person tabular card\n *\n * @param entry - Expert entry\n * @param options - Card mapping options\n * @returns Person tabular card element\n */\nconst createTabularCardProps = (\n entry: ExpertEntry,\n options: CardMappingOptions,\n): ElementModel => {\n const { isThemeDark = false } = options;\n\n // Extract data\n const fullName = buildFullName(entry);\n const profileUrl = buildProfileUrl(entry);\n const jobTitle = extractPrimaryJobTitle(entry);\n const association = extractPrimaryAssociation(entry);\n const imageData = extractImageData(entry, fullName);\n const contactData = extractContactData(entry);\n const pronouns = extractPronouns(entry);\n\n // Create elements\n const name = createNameElement(fullName, profileUrl);\n const job = createJobElement(jobTitle);\n const associationElement = createAssociationElement(association);\n const image = createImageElement(imageData, profileUrl, `View profile for ${fullName}`);\n const contactElements = createContactElements(contactData);\n const pronounsElement = createPronounsElement(pronouns);\n\n return person.tabular({\n name,\n pronouns: pronounsElement,\n job,\n association: associationElement,\n image,\n ...contactElements,\n isThemeDark,\n });\n};\n\n/**\n * Create props for overlay card\n *\n * @param entry - Expert entry\n * @param options - Card mapping options\n * @returns Overlay card element\n */\nconst createOverlayCardProps = (\n entry: ExpertEntry,\n options: CardMappingOptions,\n): ElementModel => {\n const { isThemeDark = false } = options;\n\n // Extract data\n const fullName = buildFullName(entry);\n const profileUrl = buildProfileUrl(entry);\n const jobTitle = extractPrimaryJobTitle(entry);\n const imageData = extractImageData(entry, fullName);\n\n // Create elements\n const headline = createNameElement(fullName, profileUrl);\n const text = createJobElement(jobTitle);\n const backgroundImage = createImageElement(\n imageData,\n profileUrl,\n `View profile for ${fullName}`,\n );\n\n return card.overlay.image({\n headline,\n text,\n backgroundImage,\n isThemeDark,\n });\n};\n\n/**\n * Map expert entry to PersonBio props\n *\n * Shared helper for creating PersonBio props from expert data.\n * Used by both the display strategy and bio feed for consistency.\n *\n * @param entry - Expert entry from API\n * @param displayType - 'small' for summary, 'full' for biography\n * @param isThemeDark - Dark theme flag\n * @returns Props for person.bio.full() or person.bio.small()\n *\n * @example\n * ```typescript\n * const bioProps = mapExpertToBioProps(expert, 'full', false);\n * const bioElement = person.bio.full(bioProps);\n * ```\n */\nexport const mapExpertToBioProps = (\n entry: ExpertEntry,\n displayType: 'small' | 'full',\n isThemeDark: boolean = false,\n) => {\n // Extract data\n const fullName = buildFullName(entry);\n const profileUrl = buildProfileUrl(entry);\n const jobTitle = extractPrimaryJobTitle(entry);\n const association = extractPrimaryAssociation(entry);\n const imageData = extractImageData(entry, fullName);\n const contactData = extractContactData(entry);\n const description = extractDescription(entry, displayType);\n const pronouns = extractPronouns(entry);\n\n // Create elements\n const name = createNameElement(fullName, profileUrl, 'h1');\n const job = createJobElement(jobTitle);\n const associationElement = createAssociationElement(association);\n const image = createImageElement(imageData); // No link for bio display\n const descriptionElement = createDescriptionElement(description);\n const contactElements = createContactElements(contactData);\n const pronounsElement = createPronounsElement(pronouns);\n\n return {\n name,\n pronouns: pronounsElement,\n job,\n association: associationElement,\n email: contactElements.email || null,\n linkedin: contactElements.linkedin || null,\n phone: null,\n address: null,\n additionalContact: null,\n image,\n description: descriptionElement,\n isThemeDark,\n };\n};\n\n// ============================================================================\n// DISPLAY STRATEGY\n// ============================================================================\n\n/**\n * Experts display strategy\n *\n * Maps expert entries to person elements for profile display.\n * Optimized for displaying faculty and expert profiles with contact\n * information and skills.\n *\n * @example\n * ```typescript\n * const feed = createBaseFeed({\n * displayStrategy: expertsDisplayStrategy,\n * // ...\n * });\n * ```\n */\nexport const expertsDisplayStrategy: DisplayStrategy<ExpertEntry> = {\n layoutType: 'list',\n\n mapEntryToCard: (\n entry: ExpertEntry,\n options: CardMappingOptions,\n ): ElementModel => {\n const { isOverlay = false, cardType = 'block' } = options;\n\n // Handle overlay card type (requires headshot)\n if (isOverlay && entry.headshot?.[0]?.url) {\n return createOverlayCardProps(entry, options);\n }\n\n // Route to appropriate card type\n switch (cardType) {\n case 'list':\n return createListCardProps(entry, options);\n case 'tabular':\n return createTabularCardProps(entry, options);\n default:\n return createBlockCardProps(entry, options);\n }\n },\n};\n"],"names":["createTextWithLink","createTextContainer","createImageOrLinkedImage","elements","person","card"],"mappings":";;;;AAuEA,MAAM,kBAAmC;AAAA,EACvC;AAAA,IACE,KAAK;AAAA,IACL,OAAO,MAAM;AAAA,IACb,KAAK,CAAC,UAAU,UAAU,KAAK;AAAA,EAAA;AAAA,EAEjC;AAAA,IACE,KAAK;AAAA,IACL,OAAO,CAAC,UAAU;AAAA,IAClB,KAAK,CAAC,UAAU;AAAA,EAAA;AAAA,EAElB;AAAA,IACE,KAAK;AAAA,IACL,OAAO,CAAC,UAAU;AAAA,IAClB,KAAK,CAAC,UAAU;AAAA,EAAA;AAAA,EAElB;AAAA,IACE,KAAK;AAAA,IACL,OAAO,CAAC,UAAU;AAAA,IAClB,KAAK,CAAC,UAAU;AAAA,EAAA;AAEpB;AAcO,MAAM,gBAAgB,CAAC,UAA+B;AAC3D,QAAM,QAAQ;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EAAA,EACN,OAAO,OAAO;AAEhB,SAAO,MAAM,KAAK,GAAG;AACvB;AAQA,MAAM,kBAAkB,CAAC,UAA+B;AACtD,SAAO,sCAAsC,MAAM,IAAI;AACzD;AAQA,MAAM,yBAAyB,CAAC,UAAsC;AACpE,SAAO,MAAM,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,SAAS;AACvD;AAQA,MAAM,4BAA4B,CAChC,UAC2B;AAC3B,QAAM,aAAa,MAAM,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,cAAc,CAAC;AACvE,MAAI,CAAC,WAAY,QAAO;AAExB,SAAO;AAAA,IACL,OAAO,WAAW;AAAA,IAClB,KAAK,WAAW,MAAM;AAAA,EAAA;AAE1B;AASA,MAAM,mBAAmB,CACvB,OACA,aACqB;AACrB,QAAM,cAAc,MAAM,WAAW,CAAC,GAAG;AACzC,MAAI,CAAC,YAAa,QAAO;AAEzB,SAAO;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,EAAA;AAEb;AAQA,MAAM,qBAAqB,CAAC,UAAoC;AAC9D,SAAO;AAAA,IACL,OAAO,MAAM,SAAS;AAAA,IACtB,SAAS,MAAM,WAAW;AAAA,IAC1B,UAAU,MAAM,YAAY;AAAA,IAC5B,SAAS,MAAM,WAAW;AAAA,EAAA;AAE9B;AASA,MAAM,qBAAqB,CACzB,OACA,gBACkB;AAIlB,SAAO,MAAM,SAAS,QAAQ;AAChC;AAQA,MAAM,kBAAkB,CAAC,UAAsC;AAC7D,SAAO,MAAM,YAAY;AAC3B;AAcA,MAAM,oBAAoB,CACxB,UACA,KACA,iBACuB;AACvB,SAAOA,4BAAmB;AAAA,IACxB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EAAA,CACD;AACH;AAQA,MAAM,mBAAmB,CAAC,aAAgD;AACxE,MAAI,CAAC,SAAU,QAAO;AACtB,SAAOC,6BAAoB,EAAE,MAAM,UAAU;AAC/C;AAQA,MAAM,2BAA2B,CAC/B,gBACuB;AACvB,MAAI,CAAC,YAAa,QAAO;AAEzB,MAAI,YAAY,KAAK;AACnB,WAAOD,4BAAmB;AAAA,MACxB,MAAM,YAAY;AAAA,MAClB,KAAK,YAAY;AAAA,IAAA,CAClB;AAAA,EACH;AAEA,SAAOC,SAAAA,oBAAoB,EAAE,MAAM,YAAY,OAAO;AACxD;AAUA,MAAM,qBAAqB,CACzB,WACA,SACA,cACgD;AAChD,MAAI,CAAC,UAAW,QAAO;AAEvB,SAAOC,kCAAyB;AAAA,IAC9B,UAAU,UAAU;AAAA,IACpB,SAAS,UAAU;AAAA,IACnB;AAAA,IACA;AAAA,EAAA,CACD;AACH;AAQA,MAAM,2BAA2B,CAC/B,gBACuB;AACvB,MAAI,CAAC,YAAa,QAAO;AACzB,SAAOD,SAAAA,oBAAoB,EAAE,MAAM,aAAa,WAAW,MAAM;AACnE;AAQA,MAAM,wBAAwB,CAAC,aAAgD;AAC7E,MAAI,CAAC,SAAU,QAAO;AACtB,SAAOA,6BAAoB,EAAE,MAAM,UAAU;AAC/C;AAQA,MAAM,wBAAwB,CAC5B,gBAC0C;AAC1C,SAAO,gBAAgB;AAAA,IACrB,CAACE,YAAU,WAAW;AACpB,YAAM,QAAQ,YAAY,OAAO,GAAG;AACpC,UAAI,CAAC,MAAO,QAAOA;AAEnB,YAAM,UAAUH,SAAAA,mBAAmB;AAAA,QACjC,MAAM,OAAO,MAAM,KAAK;AAAA,QACxB,KAAK,OAAO,IAAI,KAAK;AAAA,MAAA,CACtB;AAEDG,iBAAS,OAAO,GAAG,IAAI;AACvB,aAAOA;AAAAA,IACT;AAAA,IACA,CAAA;AAAA,EAAC;AAEL;AAaA,MAAM,uBAAuB,CAC3B,OACA,YACiB;AACjB,QAAM,EAAE,cAAc,MAAA,IAAU;AAGhC,QAAM,WAAW,cAAc,KAAK;AACpC,QAAM,aAAa,gBAAgB,KAAK;AACxC,QAAM,WAAW,uBAAuB,KAAK;AAC7C,QAAM,cAAc,0BAA0B,KAAK;AACnD,QAAM,YAAY,iBAAiB,OAAO,QAAQ;AAClD,QAAM,WAAW,gBAAgB,KAAK;AAGtC,QAAM,OAAO,kBAAkB,UAAU,UAAU;AACnD,QAAM,MAAM,iBAAiB,QAAQ;AACrC,QAAM,qBAAqB,yBAAyB,WAAW;AAC/D,QAAM,QAAQ,mBAAmB,WAAW,YAAY,oBAAoB,QAAQ,EAAE;AACtF,QAAM,kBAAkB,sBAAsB,QAAQ;AAEtD,SAAOC,UAAAA,OAAO,MAAM;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EAAA,CACD;AACH;AASA,MAAM,sBAAsB,CAC1B,OACA,YACiB;AACjB,QAAM,EAAE,cAAc,MAAA,IAAU;AAGhC,QAAM,WAAW,cAAc,KAAK;AACpC,QAAM,aAAa,gBAAgB,KAAK;AACxC,QAAM,WAAW,uBAAuB,KAAK;AAC7C,QAAM,cAAc,0BAA0B,KAAK;AACnD,QAAM,YAAY,iBAAiB,OAAO,QAAQ;AAClD,QAAM,WAAW,gBAAgB,KAAK;AAGtC,QAAM,OAAO,kBAAkB,UAAU,UAAU;AACnD,QAAM,MAAM,iBAAiB,QAAQ;AACrC,QAAM,qBAAqB,yBAAyB,WAAW;AAC/D,QAAM,QAAQ,mBAAmB,WAAW,YAAY,oBAAoB,QAAQ,EAAE;AACtF,QAAM,kBAAkB,sBAAsB,QAAQ;AAEtD,SAAOA,UAAAA,OAAO,KAAK;AAAA,IACjB;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EAAA,CACD;AACH;AASA,MAAM,yBAAyB,CAC7B,OACA,YACiB;AACjB,QAAM,EAAE,cAAc,MAAA,IAAU;AAGhC,QAAM,WAAW,cAAc,KAAK;AACpC,QAAM,aAAa,gBAAgB,KAAK;AACxC,QAAM,WAAW,uBAAuB,KAAK;AAC7C,QAAM,cAAc,0BAA0B,KAAK;AACnD,QAAM,YAAY,iBAAiB,OAAO,QAAQ;AAClD,QAAM,cAAc,mBAAmB,KAAK;AAC5C,QAAM,WAAW,gBAAgB,KAAK;AAGtC,QAAM,OAAO,kBAAkB,UAAU,UAAU;AACnD,QAAM,MAAM,iBAAiB,QAAQ;AACrC,QAAM,qBAAqB,yBAAyB,WAAW;AAC/D,QAAM,QAAQ,mBAAmB,WAAW,YAAY,oBAAoB,QAAQ,EAAE;AACtF,QAAM,kBAAkB,sBAAsB,WAAW;AACzD,QAAM,kBAAkB,sBAAsB,QAAQ;AAEtD,SAAOA,UAAAA,OAAO,QAAQ;AAAA,IACpB;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,GAAG;AAAA,IACH;AAAA,EAAA,CACD;AACH;AASA,MAAM,yBAAyB,CAC7B,OACA,YACiB;AACjB,QAAM,EAAE,cAAc,MAAA,IAAU;AAGhC,QAAM,WAAW,cAAc,KAAK;AACpC,QAAM,aAAa,gBAAgB,KAAK;AACxC,QAAM,WAAW,uBAAuB,KAAK;AAC7C,QAAM,YAAY,iBAAiB,OAAO,QAAQ;AAGlD,QAAM,WAAW,kBAAkB,UAAU,UAAU;AACvD,QAAM,OAAO,iBAAiB,QAAQ;AACtC,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,oBAAoB,QAAQ;AAAA,EAAA;AAG9B,SAAOC,UAAAA,KAAK,QAAQ,MAAM;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACH;AAmBO,MAAM,sBAAsB,CACjC,OACA,aACA,cAAuB,UACpB;AAEH,QAAM,WAAW,cAAc,KAAK;AACpC,QAAM,aAAa,gBAAgB,KAAK;AACxC,QAAM,WAAW,uBAAuB,KAAK;AAC7C,QAAM,cAAc,0BAA0B,KAAK;AACnD,QAAM,YAAY,iBAAiB,OAAO,QAAQ;AAClD,QAAM,cAAc,mBAAmB,KAAK;AAC5C,QAAM,cAAc,mBAAmB,KAAkB;AACzD,QAAM,WAAW,gBAAgB,KAAK;AAGtC,QAAM,OAAO,kBAAkB,UAAU,YAAY,IAAI;AACzD,QAAM,MAAM,iBAAiB,QAAQ;AACrC,QAAM,qBAAqB,yBAAyB,WAAW;AAC/D,QAAM,QAAQ,mBAAmB,SAAS;AAC1C,QAAM,qBAAqB,yBAAyB,WAAW;AAC/D,QAAM,kBAAkB,sBAAsB,WAAW;AACzD,QAAM,kBAAkB,sBAAsB,QAAQ;AAEtD,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,aAAa;AAAA,IACb,OAAO,gBAAgB,SAAS;AAAA,IAChC,UAAU,gBAAgB,YAAY;AAAA,IACtC,OAAO;AAAA,IACP,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EAAA;AAEJ;AAqBO,MAAM,yBAAuD;AAAA,EAClE,YAAY;AAAA,EAEZ,gBAAgB,CACd,OACA,YACiB;AACjB,UAAM,EAAE,YAAY,OAAO,WAAW,YAAY;AAGlD,QAAI,aAAa,MAAM,WAAW,CAAC,GAAG,KAAK;AACzC,aAAO,uBAAuB,OAAO,OAAO;AAAA,IAC9C;AAGA,YAAQ,UAAA;AAAA,MACN,KAAK;AACH,eAAO,oBAAoB,OAAO,OAAO;AAAA,MAC3C,KAAK;AACH,eAAO,uBAAuB,OAAO,OAAO;AAAA,MAC9C;AACE,eAAO,qBAAqB,OAAO,OAAO;AAAA,IAAA;AAAA,EAEhD;AACF;;;;"}