@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.
- package/README.md +1 -1
- package/dist/academic.d.ts +1 -1
- package/dist/academic.js +1 -1
- package/dist/academic.mjs +1 -1
- package/dist/events.d.ts +1 -1
- package/dist/events.js +4 -4
- package/dist/events.mjs +4 -4
- package/dist/experts.d.ts +2 -0
- package/dist/experts.js +9 -0
- package/dist/experts.js.map +1 -0
- package/dist/experts.mjs +9 -0
- package/dist/experts.mjs.map +1 -0
- package/dist/factory/core/createBaseFeed.d.ts +3 -0
- package/dist/factory/core/createBaseFeed.d.ts.map +1 -0
- package/dist/factory/core/createBaseFeed.js +114 -0
- package/dist/factory/core/createBaseFeed.js.map +1 -0
- package/dist/factory/core/createBaseFeed.mjs +114 -0
- package/dist/factory/core/createBaseFeed.mjs.map +1 -0
- package/dist/factory/core/index.d.ts +3 -0
- package/dist/factory/core/index.d.ts.map +1 -0
- package/dist/factory/core/types.d.ts +91 -0
- package/dist/factory/core/types.d.ts.map +1 -0
- package/dist/factory/helpers/displayHandler.d.ts +29 -0
- package/dist/factory/helpers/displayHandler.d.ts.map +1 -0
- package/dist/factory/helpers/displayHandler.js +187 -0
- package/dist/factory/helpers/displayHandler.js.map +1 -0
- package/dist/factory/helpers/displayHandler.mjs +169 -0
- package/dist/factory/helpers/displayHandler.mjs.map +1 -0
- package/dist/factory/helpers/feedHelpers.d.ts +10 -0
- package/dist/factory/helpers/feedHelpers.d.ts.map +1 -0
- package/dist/factory/helpers/feedHelpers.js +32 -0
- package/dist/factory/helpers/feedHelpers.js.map +1 -0
- package/dist/factory/helpers/feedHelpers.mjs +32 -0
- package/dist/factory/helpers/feedHelpers.mjs.map +1 -0
- package/dist/factory/helpers/fetchHandler.d.ts +22 -0
- package/dist/factory/helpers/fetchHandler.d.ts.map +1 -0
- package/dist/factory/helpers/fetchHandler.js +140 -0
- package/dist/factory/helpers/fetchHandler.js.map +1 -0
- package/dist/factory/helpers/fetchHandler.mjs +123 -0
- package/dist/factory/helpers/fetchHandler.mjs.map +1 -0
- package/dist/factory/helpers/index.d.ts +4 -0
- package/dist/factory/helpers/index.d.ts.map +1 -0
- package/dist/factory/index.d.ts +4 -0
- package/dist/factory/index.d.ts.map +1 -0
- package/dist/feeds/academic/_types.d.ts.map +1 -0
- package/dist/feeds/academic/index.d.ts.map +1 -0
- package/dist/feeds/academic/slider.d.ts.map +1 -0
- package/dist/feeds/academic/slider.js +10 -0
- package/dist/feeds/academic/slider.js.map +1 -0
- package/dist/feeds/academic/slider.mjs +11 -0
- package/dist/feeds/academic/slider.mjs.map +1 -0
- package/dist/feeds/events/_types.d.ts.map +1 -0
- package/dist/feeds/events/grid.d.ts.map +1 -0
- package/dist/feeds/events/grid.js +31 -0
- package/dist/feeds/events/grid.js.map +1 -0
- package/dist/feeds/events/grid.mjs +32 -0
- package/dist/feeds/events/grid.mjs.map +1 -0
- package/dist/feeds/events/grouped.d.ts.map +1 -0
- package/dist/feeds/events/grouped.js +353 -0
- package/dist/feeds/events/grouped.js.map +1 -0
- package/dist/feeds/events/grouped.mjs +337 -0
- package/dist/feeds/events/grouped.mjs.map +1 -0
- package/dist/feeds/events/index.d.ts.map +1 -0
- package/dist/feeds/events/list.d.ts.map +1 -0
- package/dist/feeds/events/list.js +32 -0
- package/dist/feeds/events/list.js.map +1 -0
- package/dist/feeds/events/list.mjs +33 -0
- package/dist/feeds/events/list.mjs.map +1 -0
- package/dist/feeds/events/slider.d.ts.map +1 -0
- package/dist/feeds/events/slider.js +10 -0
- package/dist/feeds/events/slider.js.map +1 -0
- package/dist/feeds/events/slider.mjs +11 -0
- package/dist/feeds/events/slider.mjs.map +1 -0
- package/dist/feeds/experts/_types.d.ts +22 -0
- package/dist/feeds/experts/_types.d.ts.map +1 -0
- package/dist/feeds/experts/bio.d.ts +5 -0
- package/dist/feeds/experts/bio.d.ts.map +1 -0
- package/dist/feeds/experts/bio.js +146 -0
- package/dist/feeds/experts/bio.js.map +1 -0
- package/dist/feeds/experts/bio.mjs +147 -0
- package/dist/feeds/experts/bio.mjs.map +1 -0
- package/dist/feeds/experts/grid.d.ts +5 -0
- package/dist/feeds/experts/grid.d.ts.map +1 -0
- package/dist/feeds/experts/grid.js +36 -0
- package/dist/feeds/experts/grid.js.map +1 -0
- package/dist/feeds/experts/grid.mjs +37 -0
- package/dist/feeds/experts/grid.mjs.map +1 -0
- package/dist/feeds/experts/index.d.ts +4 -0
- package/dist/feeds/experts/index.d.ts.map +1 -0
- package/dist/feeds/experts/list.d.ts.map +1 -0
- package/dist/feeds/experts/list.js +25 -0
- package/dist/feeds/experts/list.js.map +1 -0
- package/dist/feeds/experts/list.mjs +26 -0
- package/dist/feeds/experts/list.mjs.map +1 -0
- package/dist/feeds/news/_types.d.ts.map +1 -0
- package/dist/feeds/news/featured.d.ts.map +1 -0
- package/dist/feeds/news/featured.js +378 -0
- package/dist/feeds/news/featured.js.map +1 -0
- package/dist/feeds/news/featured.mjs +379 -0
- package/dist/feeds/news/featured.mjs.map +1 -0
- package/dist/feeds/news/grid.d.ts.map +1 -0
- package/dist/feeds/news/grid.js +36 -0
- package/dist/feeds/news/grid.js.map +1 -0
- package/dist/feeds/news/grid.mjs +37 -0
- package/dist/feeds/news/grid.mjs.map +1 -0
- package/dist/feeds/news/index.d.ts.map +1 -0
- package/dist/feeds/news/list.d.ts +5 -0
- package/dist/feeds/news/list.d.ts.map +1 -0
- package/dist/feeds/news/list.js +33 -0
- package/dist/feeds/news/list.js.map +1 -0
- package/dist/feeds/news/list.mjs +34 -0
- package/dist/feeds/news/list.mjs.map +1 -0
- package/dist/{utilities → helpers}/events/index.d.ts +1 -0
- package/dist/helpers/events/index.d.ts.map +1 -0
- package/dist/{utilities → helpers}/events/index.js +2 -0
- package/dist/helpers/events/index.js.map +1 -0
- package/dist/{utilities → helpers}/events/index.mjs +2 -0
- package/dist/helpers/events/index.mjs.map +1 -0
- package/dist/helpers/grouping/events.d.ts +14 -0
- package/dist/helpers/grouping/events.d.ts.map +1 -0
- package/dist/helpers/grouping/events.js +147 -0
- package/dist/helpers/grouping/events.js.map +1 -0
- package/dist/helpers/grouping/events.mjs +147 -0
- package/dist/helpers/grouping/events.mjs.map +1 -0
- package/dist/helpers/grouping/index.d.ts +2 -0
- package/dist/helpers/grouping/index.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +5 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/network/fetch.d.ts.map +1 -0
- package/dist/helpers/network/index.d.ts.map +1 -0
- package/dist/helpers/styles/index.d.ts +2 -0
- package/dist/helpers/styles/index.d.ts.map +1 -0
- package/dist/helpers/styles/shadow.d.ts +10 -0
- package/dist/helpers/styles/shadow.d.ts.map +1 -0
- package/dist/helpers/styles/shadow.js +33 -0
- package/dist/helpers/styles/shadow.js.map +1 -0
- package/dist/helpers/styles/shadow.mjs +16 -0
- package/dist/helpers/styles/shadow.mjs.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/news.d.ts +1 -1
- package/dist/news.js +3 -3
- package/dist/news.mjs +3 -3
- package/dist/states/_types.d.ts +60 -0
- package/dist/states/_types.d.ts.map +1 -0
- package/dist/states/_types.js +12 -0
- package/dist/states/_types.js.map +1 -0
- package/dist/states/_types.mjs +12 -0
- package/dist/states/_types.mjs.map +1 -0
- package/dist/states/announcer.d.ts +16 -0
- package/dist/states/announcer.d.ts.map +1 -0
- package/dist/states/announcer.js +62 -0
- package/dist/states/announcer.js.map +1 -0
- package/dist/states/announcer.mjs +62 -0
- package/dist/states/announcer.mjs.map +1 -0
- package/dist/states/empty.d.ts +17 -0
- package/dist/states/empty.d.ts.map +1 -0
- package/dist/states/empty.js +121 -0
- package/dist/states/empty.js.map +1 -0
- package/dist/states/empty.mjs +104 -0
- package/dist/states/empty.mjs.map +1 -0
- package/dist/states/index.d.ts +10 -0
- package/dist/states/index.d.ts.map +1 -0
- package/dist/states/loading.d.ts +17 -0
- package/dist/states/loading.d.ts.map +1 -0
- package/dist/states/loading.js +155 -0
- package/dist/states/loading.js.map +1 -0
- package/dist/states/loading.mjs +155 -0
- package/dist/states/loading.mjs.map +1 -0
- package/dist/states/pagination.d.ts +19 -0
- package/dist/states/pagination.d.ts.map +1 -0
- package/dist/states/pagination.js +119 -0
- package/dist/states/pagination.js.map +1 -0
- package/dist/states/pagination.mjs +102 -0
- package/dist/states/pagination.mjs.map +1 -0
- package/dist/strategies/display/events.d.ts +4 -0
- package/dist/strategies/display/events.d.ts.map +1 -0
- package/dist/strategies/display/events.js +60 -0
- package/dist/strategies/display/events.js.map +1 -0
- package/dist/strategies/display/events.mjs +60 -0
- package/dist/strategies/display/events.mjs.map +1 -0
- package/dist/strategies/display/experts.d.ts +19 -0
- package/dist/strategies/display/experts.d.ts.map +1 -0
- package/dist/strategies/display/experts.js +266 -0
- package/dist/strategies/display/experts.js.map +1 -0
- package/dist/strategies/display/experts.mjs +266 -0
- package/dist/strategies/display/experts.mjs.map +1 -0
- package/dist/strategies/display/index.d.ts +5 -0
- package/dist/strategies/display/index.d.ts.map +1 -0
- package/dist/strategies/display/news.d.ts +4 -0
- package/dist/strategies/display/news.d.ts.map +1 -0
- package/dist/strategies/display/news.js +58 -0
- package/dist/strategies/display/news.js.map +1 -0
- package/dist/strategies/display/news.mjs +58 -0
- package/dist/strategies/display/news.mjs.map +1 -0
- package/dist/strategies/fetch/academic.d.ts +2 -0
- package/dist/strategies/fetch/academic.d.ts.map +1 -0
- package/dist/strategies/fetch/academic.js +30 -0
- package/dist/strategies/fetch/academic.js.map +1 -0
- package/dist/strategies/fetch/academic.mjs +30 -0
- package/dist/strategies/fetch/academic.mjs.map +1 -0
- package/dist/strategies/fetch/events.d.ts +20 -0
- package/dist/strategies/fetch/events.d.ts.map +1 -0
- package/dist/strategies/fetch/events.js +223 -0
- package/dist/strategies/fetch/events.js.map +1 -0
- package/dist/strategies/fetch/events.mjs +223 -0
- package/dist/strategies/fetch/events.mjs.map +1 -0
- package/dist/strategies/fetch/experts.d.ts +4 -0
- package/dist/strategies/fetch/experts.d.ts.map +1 -0
- package/dist/strategies/fetch/experts.js +189 -0
- package/dist/strategies/fetch/experts.js.map +1 -0
- package/dist/strategies/fetch/experts.mjs +189 -0
- package/dist/strategies/fetch/experts.mjs.map +1 -0
- package/dist/strategies/fetch/graphql.d.ts +13 -0
- package/dist/strategies/fetch/graphql.d.ts.map +1 -0
- package/dist/strategies/fetch/graphql.js +100 -0
- package/dist/strategies/fetch/graphql.js.map +1 -0
- package/dist/strategies/fetch/graphql.mjs +100 -0
- package/dist/strategies/fetch/graphql.mjs.map +1 -0
- package/dist/strategies/fetch/index.d.ts +10 -0
- package/dist/strategies/fetch/index.d.ts.map +1 -0
- package/dist/strategies/fetch/news.d.ts +4 -0
- package/dist/strategies/fetch/news.d.ts.map +1 -0
- package/dist/strategies/fetch/news.js +95 -0
- package/dist/strategies/fetch/news.js.map +1 -0
- package/dist/strategies/fetch/news.mjs +95 -0
- package/dist/strategies/fetch/news.mjs.map +1 -0
- package/dist/strategies/index.d.ts +7 -0
- package/dist/strategies/index.d.ts.map +1 -0
- package/dist/strategies/layout/featured.d.ts +8 -0
- package/dist/strategies/layout/featured.d.ts.map +1 -0
- package/dist/strategies/layout/grid.d.ts +7 -0
- package/dist/strategies/layout/grid.d.ts.map +1 -0
- package/dist/strategies/layout/grid.js +36 -0
- package/dist/strategies/layout/grid.js.map +1 -0
- package/dist/strategies/layout/grid.mjs +36 -0
- package/dist/strategies/layout/grid.mjs.map +1 -0
- package/dist/strategies/layout/index.d.ts +4 -0
- package/dist/strategies/layout/index.d.ts.map +1 -0
- package/dist/types/api.d.ts +34 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/core.d.ts +40 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/data/academic.d.ts +6 -0
- package/dist/types/data/academic.d.ts.map +1 -0
- package/dist/types/data/events.d.ts +21 -0
- package/dist/types/data/events.d.ts.map +1 -0
- package/dist/types/data/experts.d.ts +53 -0
- package/dist/types/data/experts.d.ts.map +1 -0
- package/dist/types/data/index.d.ts +5 -0
- package/dist/types/data/index.d.ts.map +1 -0
- package/dist/types/data/news.d.ts +6 -0
- package/dist/types/data/news.d.ts.map +1 -0
- package/dist/types/feeds.d.ts +35 -0
- package/dist/types/feeds.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/widgets/index.d.ts +2 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/slider.d.ts.map +1 -0
- package/dist/{macros → widgets}/slider.js +2 -4
- package/dist/{macros/slider.mjs.map → widgets/slider.js.map} +1 -1
- package/dist/{macros → widgets}/slider.mjs +2 -4
- package/dist/widgets/slider.mjs.map +1 -0
- package/package.json +17 -3
- package/dist/composite/academic/_types.d.ts.map +0 -1
- package/dist/composite/academic/index.d.ts.map +0 -1
- package/dist/composite/academic/slider.d.ts.map +0 -1
- package/dist/composite/academic/slider.js +0 -34
- package/dist/composite/academic/slider.js.map +0 -1
- package/dist/composite/academic/slider.mjs +0 -35
- package/dist/composite/academic/slider.mjs.map +0 -1
- package/dist/composite/events/_types.d.ts.map +0 -1
- package/dist/composite/events/common/data.d.ts +0 -48
- package/dist/composite/events/common/data.d.ts.map +0 -1
- package/dist/composite/events/common/data.js +0 -53
- package/dist/composite/events/common/data.js.map +0 -1
- package/dist/composite/events/common/data.mjs +0 -53
- package/dist/composite/events/common/data.mjs.map +0 -1
- package/dist/composite/events/common/display.d.ts +0 -18
- package/dist/composite/events/common/display.d.ts.map +0 -1
- package/dist/composite/events/common/display.js +0 -147
- package/dist/composite/events/common/display.js.map +0 -1
- package/dist/composite/events/common/display.mjs +0 -130
- package/dist/composite/events/common/display.mjs.map +0 -1
- package/dist/composite/events/common/fetch.d.ts +0 -24
- package/dist/composite/events/common/fetch.d.ts.map +0 -1
- package/dist/composite/events/common/fetch.js +0 -117
- package/dist/composite/events/common/fetch.js.map +0 -1
- package/dist/composite/events/common/fetch.mjs +0 -117
- package/dist/composite/events/common/fetch.mjs.map +0 -1
- package/dist/composite/events/common/queries.d.ts +0 -5
- package/dist/composite/events/common/queries.d.ts.map +0 -1
- package/dist/composite/events/common/queries.js +0 -113
- package/dist/composite/events/common/queries.js.map +0 -1
- package/dist/composite/events/common/queries.mjs +0 -113
- package/dist/composite/events/common/queries.mjs.map +0 -1
- package/dist/composite/events/grid.d.ts.map +0 -1
- package/dist/composite/events/grid.js +0 -90
- package/dist/composite/events/grid.js.map +0 -1
- package/dist/composite/events/grid.mjs +0 -91
- package/dist/composite/events/grid.mjs.map +0 -1
- package/dist/composite/events/grouped.d.ts.map +0 -1
- package/dist/composite/events/grouped.js +0 -300
- package/dist/composite/events/grouped.js.map +0 -1
- package/dist/composite/events/grouped.mjs +0 -284
- package/dist/composite/events/grouped.mjs.map +0 -1
- package/dist/composite/events/index.d.ts.map +0 -1
- package/dist/composite/events/list.d.ts.map +0 -1
- package/dist/composite/events/list.js +0 -90
- package/dist/composite/events/list.js.map +0 -1
- package/dist/composite/events/list.mjs +0 -91
- package/dist/composite/events/list.mjs.map +0 -1
- package/dist/composite/events/slider.d.ts.map +0 -1
- package/dist/composite/events/slider.js +0 -35
- package/dist/composite/events/slider.js.map +0 -1
- package/dist/composite/events/slider.mjs +0 -36
- package/dist/composite/events/slider.mjs.map +0 -1
- package/dist/composite/news/_types.d.ts.map +0 -1
- package/dist/composite/news/common/data.d.ts +0 -47
- package/dist/composite/news/common/data.d.ts.map +0 -1
- package/dist/composite/news/common/data.js +0 -62
- package/dist/composite/news/common/data.js.map +0 -1
- package/dist/composite/news/common/data.mjs +0 -62
- package/dist/composite/news/common/data.mjs.map +0 -1
- package/dist/composite/news/common/display.d.ts +0 -17
- package/dist/composite/news/common/display.d.ts.map +0 -1
- package/dist/composite/news/common/display.js +0 -147
- package/dist/composite/news/common/display.js.map +0 -1
- package/dist/composite/news/common/display.mjs +0 -130
- package/dist/composite/news/common/display.mjs.map +0 -1
- package/dist/composite/news/common/fetch.d.ts +0 -22
- package/dist/composite/news/common/fetch.d.ts.map +0 -1
- package/dist/composite/news/common/fetch.js +0 -87
- package/dist/composite/news/common/fetch.js.map +0 -1
- package/dist/composite/news/common/fetch.mjs +0 -87
- package/dist/composite/news/common/fetch.mjs.map +0 -1
- package/dist/composite/news/common/queries.d.ts +0 -2
- package/dist/composite/news/common/queries.d.ts.map +0 -1
- package/dist/composite/news/common/queries.js +0 -37
- package/dist/composite/news/common/queries.js.map +0 -1
- package/dist/composite/news/common/queries.mjs +0 -37
- package/dist/composite/news/common/queries.mjs.map +0 -1
- package/dist/composite/news/featured.d.ts.map +0 -1
- package/dist/composite/news/featured.js +0 -182
- package/dist/composite/news/featured.js.map +0 -1
- package/dist/composite/news/featured.mjs +0 -183
- package/dist/composite/news/featured.mjs.map +0 -1
- package/dist/composite/news/grid.d.ts.map +0 -1
- package/dist/composite/news/grid.js +0 -98
- package/dist/composite/news/grid.js.map +0 -1
- package/dist/composite/news/grid.mjs +0 -99
- package/dist/composite/news/grid.mjs.map +0 -1
- package/dist/composite/news/index.d.ts.map +0 -1
- package/dist/composite/news/list.d.ts.map +0 -1
- package/dist/composite/news/list.js +0 -85
- package/dist/composite/news/list.js.map +0 -1
- package/dist/composite/news/list.mjs +0 -86
- package/dist/composite/news/list.mjs.map +0 -1
- package/dist/elements/asset.d.ts +0 -10
- package/dist/elements/asset.d.ts.map +0 -1
- package/dist/elements/asset.js +0 -27
- package/dist/elements/asset.js.map +0 -1
- package/dist/elements/asset.mjs +0 -27
- package/dist/elements/asset.mjs.map +0 -1
- package/dist/elements/index.d.ts +0 -4
- package/dist/elements/index.d.ts.map +0 -1
- package/dist/elements/layout.d.ts +0 -27
- package/dist/elements/layout.d.ts.map +0 -1
- package/dist/elements/layout.js +0 -121
- package/dist/elements/layout.js.map +0 -1
- package/dist/elements/layout.mjs +0 -104
- package/dist/elements/layout.mjs.map +0 -1
- package/dist/elements/text.d.ts +0 -12
- package/dist/elements/text.d.ts.map +0 -1
- package/dist/elements/text.js +0 -41
- package/dist/elements/text.js.map +0 -1
- package/dist/elements/text.mjs +0 -41
- package/dist/elements/text.mjs.map +0 -1
- package/dist/macros/aria-live.d.ts +0 -11
- package/dist/macros/aria-live.d.ts.map +0 -1
- package/dist/macros/aria-live.js +0 -25
- package/dist/macros/aria-live.js.map +0 -1
- package/dist/macros/aria-live.mjs +0 -26
- package/dist/macros/aria-live.mjs.map +0 -1
- package/dist/macros/index.d.ts +0 -6
- package/dist/macros/index.d.ts.map +0 -1
- package/dist/macros/lazy-load.d.ts +0 -19
- package/dist/macros/lazy-load.d.ts.map +0 -1
- package/dist/macros/lazy-load.js +0 -63
- package/dist/macros/lazy-load.js.map +0 -1
- package/dist/macros/lazy-load.mjs +0 -47
- package/dist/macros/lazy-load.mjs.map +0 -1
- package/dist/macros/loader.d.ts +0 -18
- package/dist/macros/loader.d.ts.map +0 -1
- package/dist/macros/loader.js +0 -148
- package/dist/macros/loader.js.map +0 -1
- package/dist/macros/loader.mjs +0 -132
- package/dist/macros/loader.mjs.map +0 -1
- package/dist/macros/no-results.d.ts +0 -15
- package/dist/macros/no-results.d.ts.map +0 -1
- package/dist/macros/no-results.js +0 -71
- package/dist/macros/no-results.js.map +0 -1
- package/dist/macros/no-results.mjs +0 -55
- package/dist/macros/no-results.mjs.map +0 -1
- package/dist/macros/slider.d.ts.map +0 -1
- package/dist/macros/slider.js.map +0 -1
- package/dist/utilities/events/index.d.ts.map +0 -1
- package/dist/utilities/events/index.js.map +0 -1
- package/dist/utilities/events/index.mjs.map +0 -1
- package/dist/utilities/index.d.ts +0 -3
- package/dist/utilities/index.d.ts.map +0 -1
- package/dist/utilities/network/fetch.d.ts.map +0 -1
- package/dist/utilities/network/index.d.ts.map +0 -1
- /package/dist/{composite → feeds}/academic/_types.d.ts +0 -0
- /package/dist/{composite → feeds}/academic/index.d.ts +0 -0
- /package/dist/{composite → feeds}/academic/slider.d.ts +0 -0
- /package/dist/{composite → feeds}/events/_types.d.ts +0 -0
- /package/dist/{composite → feeds}/events/grid.d.ts +0 -0
- /package/dist/{composite → feeds}/events/grouped.d.ts +0 -0
- /package/dist/{composite → feeds}/events/index.d.ts +0 -0
- /package/dist/{composite → feeds}/events/list.d.ts +0 -0
- /package/dist/{composite → feeds}/events/slider.d.ts +0 -0
- /package/dist/{composite/news → feeds/experts}/list.d.ts +0 -0
- /package/dist/{composite → feeds}/news/_types.d.ts +0 -0
- /package/dist/{composite → feeds}/news/featured.d.ts +0 -0
- /package/dist/{composite → feeds}/news/grid.d.ts +0 -0
- /package/dist/{composite → feeds}/news/index.d.ts +0 -0
- /package/dist/{utilities → helpers}/network/fetch.d.ts +0 -0
- /package/dist/{utilities → helpers}/network/index.d.ts +0 -0
- /package/dist/{macros → widgets}/slider.d.ts +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const webBuilderLibrary = require("@universityofmaryland/web-builder-library");
|
|
3
|
+
const composite = require("@universityofmaryland/web-elements-library/composite");
|
|
4
|
+
const loading = require("../../states/loading.js");
|
|
5
|
+
require("@universityofmaryland/web-elements-library");
|
|
6
|
+
require("@universityofmaryland/web-styles-library");
|
|
7
|
+
require("@universityofmaryland/web-utilities-library/theme");
|
|
8
|
+
const announcer = require("../../states/announcer.js");
|
|
9
|
+
const experts = require("../../strategies/fetch/experts.js");
|
|
10
|
+
const experts$1 = require("../../strategies/display/experts.js");
|
|
11
|
+
const shadow = require("../../helpers/styles/shadow.js");
|
|
12
|
+
const createFetchProps = (token, expertId) => ({
|
|
13
|
+
token,
|
|
14
|
+
limit: 1,
|
|
15
|
+
offset: 0,
|
|
16
|
+
id: expertId
|
|
17
|
+
});
|
|
18
|
+
const createSuccessAnnouncer = (expert) => {
|
|
19
|
+
const fullName = experts$1.buildFullName(expert);
|
|
20
|
+
const message = `Loaded profile for ${fullName}`;
|
|
21
|
+
return new announcer.Announcer({ message });
|
|
22
|
+
};
|
|
23
|
+
class BioFeedState {
|
|
24
|
+
/**
|
|
25
|
+
* Initialize state with initial styles
|
|
26
|
+
*
|
|
27
|
+
* @param initialStyles - Initial CSS styles
|
|
28
|
+
*/
|
|
29
|
+
constructor(initialStyles) {
|
|
30
|
+
this.stylesArray = [];
|
|
31
|
+
this.shadowRoot = null;
|
|
32
|
+
this.stylesArray.push(initialStyles);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Add styles to the accumulated styles
|
|
36
|
+
*
|
|
37
|
+
* @param styles - CSS styles to add
|
|
38
|
+
*/
|
|
39
|
+
addStyles(styles) {
|
|
40
|
+
this.stylesArray.push(styles);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Set shadow root reference for style updates
|
|
44
|
+
*
|
|
45
|
+
* @param shadow - Shadow root element
|
|
46
|
+
*/
|
|
47
|
+
setShadowRoot(shadow2) {
|
|
48
|
+
this.shadowRoot = shadow2;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Update shadow DOM styles
|
|
52
|
+
*
|
|
53
|
+
* @returns Promise that resolves when styles are updated
|
|
54
|
+
*/
|
|
55
|
+
async updateShadowStyles() {
|
|
56
|
+
if (!this.shadowRoot) return;
|
|
57
|
+
await shadow.setShadowStyles({
|
|
58
|
+
shadowRoot: this.shadowRoot,
|
|
59
|
+
styles: this.getStyles()
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get accumulated styles as single string
|
|
64
|
+
*
|
|
65
|
+
* @returns Combined CSS styles
|
|
66
|
+
*/
|
|
67
|
+
getStyles() {
|
|
68
|
+
return this.stylesArray.join("\n");
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get shadow root callback for events
|
|
72
|
+
*
|
|
73
|
+
* @returns Callback function for shadow root
|
|
74
|
+
*/
|
|
75
|
+
getShadowCallback() {
|
|
76
|
+
return (shadow2) => this.setShadowRoot(shadow2);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const renderSuccess = async (container, expert, state, isThemeDark) => {
|
|
80
|
+
const bioProps = experts$1.mapExpertToBioProps(expert, "small", isThemeDark);
|
|
81
|
+
const bioElement = composite.person.bio.small(bioProps);
|
|
82
|
+
const announcer2 = createSuccessAnnouncer(expert);
|
|
83
|
+
const children = [bioElement.element, announcer2.getElement()];
|
|
84
|
+
children.forEach((child) => container.appendChild(child));
|
|
85
|
+
state.addStyles(bioElement.styles);
|
|
86
|
+
await state.updateShadowStyles();
|
|
87
|
+
};
|
|
88
|
+
const logError = (errorType, expertId, error) => {
|
|
89
|
+
switch (errorType) {
|
|
90
|
+
case "not_found":
|
|
91
|
+
console.warn(
|
|
92
|
+
`[Expert Bio Feed] No expert found with ID "${expertId}". Please verify the expert ID is correct and the expert exists in the system.`
|
|
93
|
+
);
|
|
94
|
+
break;
|
|
95
|
+
case "graphql_error":
|
|
96
|
+
console.warn(
|
|
97
|
+
`[Expert Bio Feed] GraphQL error occurred while fetching expert "${expertId}". Check network connection and API availability.`,
|
|
98
|
+
error
|
|
99
|
+
);
|
|
100
|
+
break;
|
|
101
|
+
case "invalid_request":
|
|
102
|
+
console.warn(
|
|
103
|
+
`[Expert Bio Feed] Invalid request for expert "${expertId}". Ensure both data-token and data-id attributes are provided.`
|
|
104
|
+
);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const bio = (props) => {
|
|
109
|
+
const { token, expertId, isThemeDark = false } = props;
|
|
110
|
+
const containerBuilder = new webBuilderLibrary.ElementBuilder("div").withClassName(
|
|
111
|
+
"expert-bio-feed"
|
|
112
|
+
);
|
|
113
|
+
const container = containerBuilder.getElement();
|
|
114
|
+
const loading$1 = new loading.LoadingState({ isThemeDark });
|
|
115
|
+
const state = new BioFeedState(loading$1.styles);
|
|
116
|
+
const initialize = async () => {
|
|
117
|
+
loading$1.show(container);
|
|
118
|
+
try {
|
|
119
|
+
const fetchProps = createFetchProps(token, expertId);
|
|
120
|
+
const variables = experts.expertsFetchStrategy.composeApiVariables(fetchProps);
|
|
121
|
+
const entries = await experts.expertsFetchStrategy.fetchEntries(variables);
|
|
122
|
+
loading$1.hide();
|
|
123
|
+
if (!entries || entries.length === 0) {
|
|
124
|
+
logError("not_found", expertId);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
await renderSuccess(container, entries[0], state, isThemeDark);
|
|
128
|
+
} catch (error) {
|
|
129
|
+
loading$1.hide();
|
|
130
|
+
logError("graphql_error", expertId, error);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
initialize();
|
|
134
|
+
const model = containerBuilder.build();
|
|
135
|
+
return {
|
|
136
|
+
element: model.element,
|
|
137
|
+
get styles() {
|
|
138
|
+
return state.getStyles();
|
|
139
|
+
},
|
|
140
|
+
events: {
|
|
141
|
+
callback: state.getShadowCallback()
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
module.exports = bio;
|
|
146
|
+
//# sourceMappingURL=bio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bio.js","sources":["../../../source/feeds/experts/bio.ts"],"sourcesContent":["/**\n * Expert Bio Feed (Refactored with Element Builder)\n *\n * Displays a single expert's profile with summary.\n * Uses element builder pattern for clean, declarative construction.\n *\n * @module feeds/experts/bio\n */\n\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { person } from '@universityofmaryland/web-elements-library/composite';\nimport { LoadingState, Announcer } from '../../states';\nimport { expertsFetchStrategy } from '../../strategies/fetch/experts';\nimport {\n mapExpertToBioProps,\n buildFullName,\n} from '../../strategies/display/experts';\nimport { styles as styleUtilities } from '../../helpers';\nimport { type ExpertEntry } from 'types/data';\nimport { type BioProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n// ============================================================================\n// PURE HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Create base props for fetch strategy\n *\n * @param token - API authentication token\n * @param expertId - Expert ID to fetch\n * @returns Base props object for strategy's composeApiVariables\n */\nconst createFetchProps = (token: string, expertId: string) => ({\n token,\n limit: 1,\n offset: 0,\n id: expertId,\n});\n\n/**\n * Create accessibility announcer for loaded expert\n *\n * @param expert - Expert entry\n * @returns Announcer element model\n */\nconst createSuccessAnnouncer = (expert: ExpertEntry): Announcer => {\n const fullName = buildFullName(expert);\n const message = `Loaded profile for ${fullName}`;\n return new Announcer({ message });\n};\n\n// ============================================================================\n// STATE MANAGER CLASS\n// ============================================================================\n\n/**\n * Manages bio feed state and shadow DOM synchronization\n *\n * Encapsulates style accumulation and shadow DOM updates.\n * Provides immutable-style API for adding styles.\n */\nclass BioFeedState {\n private stylesArray: string[] = [];\n private shadowRoot: ShadowRoot | null = null;\n\n /**\n * Initialize state with initial styles\n *\n * @param initialStyles - Initial CSS styles\n */\n constructor(initialStyles: string) {\n this.stylesArray.push(initialStyles);\n }\n\n /**\n * Add styles to the accumulated styles\n *\n * @param styles - CSS styles to add\n */\n addStyles(styles: string): void {\n this.stylesArray.push(styles);\n }\n\n /**\n * Set shadow root reference for style updates\n *\n * @param shadow - Shadow root element\n */\n setShadowRoot(shadow: ShadowRoot): void {\n this.shadowRoot = shadow;\n }\n\n /**\n * Update shadow DOM styles\n *\n * @returns Promise that resolves when styles are updated\n */\n async updateShadowStyles(): Promise<void> {\n if (!this.shadowRoot) return;\n await styleUtilities.setShadowStyles({\n shadowRoot: this.shadowRoot,\n styles: this.getStyles(),\n });\n }\n\n /**\n * Get accumulated styles as single string\n *\n * @returns Combined CSS styles\n */\n getStyles(): string {\n return this.stylesArray.join('\\n');\n }\n\n /**\n * Get shadow root callback for events\n *\n * @returns Callback function for shadow root\n */\n getShadowCallback(): (shadow: ShadowRoot) => void {\n return (shadow) => this.setShadowRoot(shadow);\n }\n}\n\n// ============================================================================\n// RENDERING FUNCTIONS\n// ============================================================================\n\n/**\n * Render successful bio with expert data\n *\n * @param container - Container element to render into\n * @param expert - Expert entry data\n * @param state - State manager instance\n * @param isThemeDark - Dark theme flag\n * @returns Promise that resolves when rendering is complete\n */\nconst renderSuccess = async (\n container: HTMLElement,\n expert: ExpertEntry,\n state: BioFeedState,\n isThemeDark: boolean,\n): Promise<void> => {\n const bioProps = mapExpertToBioProps(expert, 'small', isThemeDark);\n const bioElement = person.bio.small(bioProps);\n const announcer = createSuccessAnnouncer(expert);\n const children = [bioElement.element, announcer.getElement()];\n\n children.forEach((child) => container.appendChild(child));\n\n state.addStyles(bioElement.styles);\n await state.updateShadowStyles();\n};\n\n/**\n * Error types for expert bio feed\n */\ntype BioErrorType = 'not_found' | 'graphql_error' | 'invalid_request';\n\n/**\n * Log error to console with specific warning message\n *\n * @param errorType - Type of error that occurred\n * @param expertId - Expert ID that was requested\n * @param error - Optional error object for GraphQL errors\n */\nconst logError = (\n errorType: BioErrorType,\n expertId: string,\n error?: any,\n): void => {\n switch (errorType) {\n case 'not_found':\n console.warn(\n `[Expert Bio Feed] No expert found with ID \"${expertId}\". ` +\n `Please verify the expert ID is correct and the expert exists in the system.`,\n );\n break;\n case 'graphql_error':\n console.warn(\n `[Expert Bio Feed] GraphQL error occurred while fetching expert \"${expertId}\". ` +\n `Check network connection and API availability.`,\n error,\n );\n break;\n case 'invalid_request':\n console.warn(\n `[Expert Bio Feed] Invalid request for expert \"${expertId}\". ` +\n `Ensure both data-token and data-id attributes are provided.`,\n );\n break;\n }\n};\n\n// ============================================================================\n// MAIN EXPORT\n// ============================================================================\n\n/**\n * Create an expert bio feed\n *\n * Fetches and displays a single expert's bio with summary.\n * Uses element builder pattern for clean construction.\n *\n * @param props - Feed configuration\n * @returns ElementModel with bio element, styles, and events\n *\n * @example\n * ```typescript\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'john-doe',\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With dark theme\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'jane-smith',\n * isThemeDark: true,\n * });\n * ```\n */\nexport default (props: BioProps): ElementModel => {\n const { token, expertId, isThemeDark = false } = props;\n\n // Create container using ElementBuilder\n const containerBuilder = new ElementBuilder('div').withClassName(\n 'expert-bio-feed',\n );\n\n // Get element for manipulation (non-destructive)\n const container = containerBuilder.getElement();\n\n // Initialize state management\n const loading = new LoadingState({ isThemeDark });\n const state = new BioFeedState(loading.styles);\n\n /**\n * Fetch expert data and render\n */\n const initialize = async (): Promise<void> => {\n loading.show(container);\n\n try {\n const fetchProps = createFetchProps(token, expertId);\n const variables = expertsFetchStrategy.composeApiVariables(fetchProps);\n const entries = await expertsFetchStrategy.fetchEntries(variables);\n\n loading.hide();\n\n if (!entries || entries.length === 0) {\n logError('not_found', expertId);\n return;\n }\n\n await renderSuccess(container, entries[0], state, isThemeDark);\n } catch (error) {\n loading.hide();\n logError('graphql_error', expertId, error);\n }\n };\n\n // Start initialization\n initialize();\n\n // Build and return element model\n const model = containerBuilder.build();\n\n return {\n element: model.element,\n get styles() {\n return state.getStyles();\n },\n events: {\n callback: state.getShadowCallback(),\n },\n };\n};\n"],"names":["buildFullName","Announcer","shadow","styleUtilities.setShadowStyles","mapExpertToBioProps","person","announcer","ElementBuilder","loading","LoadingState","expertsFetchStrategy"],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { ElementBuilder } from "@universityofmaryland/web-builder-library";
|
|
2
|
+
import { person } from "@universityofmaryland/web-elements-library/composite";
|
|
3
|
+
import { LoadingState } from "../../states/loading.mjs";
|
|
4
|
+
import "@universityofmaryland/web-elements-library";
|
|
5
|
+
import "@universityofmaryland/web-styles-library";
|
|
6
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
7
|
+
import { Announcer } from "../../states/announcer.mjs";
|
|
8
|
+
import { expertsFetchStrategy } from "../../strategies/fetch/experts.mjs";
|
|
9
|
+
import { mapExpertToBioProps, buildFullName } from "../../strategies/display/experts.mjs";
|
|
10
|
+
import { setShadowStyles } from "../../helpers/styles/shadow.mjs";
|
|
11
|
+
const createFetchProps = (token, expertId) => ({
|
|
12
|
+
token,
|
|
13
|
+
limit: 1,
|
|
14
|
+
offset: 0,
|
|
15
|
+
id: expertId
|
|
16
|
+
});
|
|
17
|
+
const createSuccessAnnouncer = (expert) => {
|
|
18
|
+
const fullName = buildFullName(expert);
|
|
19
|
+
const message = `Loaded profile for ${fullName}`;
|
|
20
|
+
return new Announcer({ message });
|
|
21
|
+
};
|
|
22
|
+
class BioFeedState {
|
|
23
|
+
/**
|
|
24
|
+
* Initialize state with initial styles
|
|
25
|
+
*
|
|
26
|
+
* @param initialStyles - Initial CSS styles
|
|
27
|
+
*/
|
|
28
|
+
constructor(initialStyles) {
|
|
29
|
+
this.stylesArray = [];
|
|
30
|
+
this.shadowRoot = null;
|
|
31
|
+
this.stylesArray.push(initialStyles);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Add styles to the accumulated styles
|
|
35
|
+
*
|
|
36
|
+
* @param styles - CSS styles to add
|
|
37
|
+
*/
|
|
38
|
+
addStyles(styles) {
|
|
39
|
+
this.stylesArray.push(styles);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Set shadow root reference for style updates
|
|
43
|
+
*
|
|
44
|
+
* @param shadow - Shadow root element
|
|
45
|
+
*/
|
|
46
|
+
setShadowRoot(shadow) {
|
|
47
|
+
this.shadowRoot = shadow;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Update shadow DOM styles
|
|
51
|
+
*
|
|
52
|
+
* @returns Promise that resolves when styles are updated
|
|
53
|
+
*/
|
|
54
|
+
async updateShadowStyles() {
|
|
55
|
+
if (!this.shadowRoot) return;
|
|
56
|
+
await setShadowStyles({
|
|
57
|
+
shadowRoot: this.shadowRoot,
|
|
58
|
+
styles: this.getStyles()
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get accumulated styles as single string
|
|
63
|
+
*
|
|
64
|
+
* @returns Combined CSS styles
|
|
65
|
+
*/
|
|
66
|
+
getStyles() {
|
|
67
|
+
return this.stylesArray.join("\n");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get shadow root callback for events
|
|
71
|
+
*
|
|
72
|
+
* @returns Callback function for shadow root
|
|
73
|
+
*/
|
|
74
|
+
getShadowCallback() {
|
|
75
|
+
return (shadow) => this.setShadowRoot(shadow);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const renderSuccess = async (container, expert, state, isThemeDark) => {
|
|
79
|
+
const bioProps = mapExpertToBioProps(expert, "small", isThemeDark);
|
|
80
|
+
const bioElement = person.bio.small(bioProps);
|
|
81
|
+
const announcer = createSuccessAnnouncer(expert);
|
|
82
|
+
const children = [bioElement.element, announcer.getElement()];
|
|
83
|
+
children.forEach((child) => container.appendChild(child));
|
|
84
|
+
state.addStyles(bioElement.styles);
|
|
85
|
+
await state.updateShadowStyles();
|
|
86
|
+
};
|
|
87
|
+
const logError = (errorType, expertId, error) => {
|
|
88
|
+
switch (errorType) {
|
|
89
|
+
case "not_found":
|
|
90
|
+
console.warn(
|
|
91
|
+
`[Expert Bio Feed] No expert found with ID "${expertId}". Please verify the expert ID is correct and the expert exists in the system.`
|
|
92
|
+
);
|
|
93
|
+
break;
|
|
94
|
+
case "graphql_error":
|
|
95
|
+
console.warn(
|
|
96
|
+
`[Expert Bio Feed] GraphQL error occurred while fetching expert "${expertId}". Check network connection and API availability.`,
|
|
97
|
+
error
|
|
98
|
+
);
|
|
99
|
+
break;
|
|
100
|
+
case "invalid_request":
|
|
101
|
+
console.warn(
|
|
102
|
+
`[Expert Bio Feed] Invalid request for expert "${expertId}". Ensure both data-token and data-id attributes are provided.`
|
|
103
|
+
);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const bio = (props) => {
|
|
108
|
+
const { token, expertId, isThemeDark = false } = props;
|
|
109
|
+
const containerBuilder = new ElementBuilder("div").withClassName(
|
|
110
|
+
"expert-bio-feed"
|
|
111
|
+
);
|
|
112
|
+
const container = containerBuilder.getElement();
|
|
113
|
+
const loading = new LoadingState({ isThemeDark });
|
|
114
|
+
const state = new BioFeedState(loading.styles);
|
|
115
|
+
const initialize = async () => {
|
|
116
|
+
loading.show(container);
|
|
117
|
+
try {
|
|
118
|
+
const fetchProps = createFetchProps(token, expertId);
|
|
119
|
+
const variables = expertsFetchStrategy.composeApiVariables(fetchProps);
|
|
120
|
+
const entries = await expertsFetchStrategy.fetchEntries(variables);
|
|
121
|
+
loading.hide();
|
|
122
|
+
if (!entries || entries.length === 0) {
|
|
123
|
+
logError("not_found", expertId);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
await renderSuccess(container, entries[0], state, isThemeDark);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
loading.hide();
|
|
129
|
+
logError("graphql_error", expertId, error);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
initialize();
|
|
133
|
+
const model = containerBuilder.build();
|
|
134
|
+
return {
|
|
135
|
+
element: model.element,
|
|
136
|
+
get styles() {
|
|
137
|
+
return state.getStyles();
|
|
138
|
+
},
|
|
139
|
+
events: {
|
|
140
|
+
callback: state.getShadowCallback()
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
export {
|
|
145
|
+
bio as default
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=bio.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bio.mjs","sources":["../../../source/feeds/experts/bio.ts"],"sourcesContent":["/**\n * Expert Bio Feed (Refactored with Element Builder)\n *\n * Displays a single expert's profile with summary.\n * Uses element builder pattern for clean, declarative construction.\n *\n * @module feeds/experts/bio\n */\n\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { person } from '@universityofmaryland/web-elements-library/composite';\nimport { LoadingState, Announcer } from '../../states';\nimport { expertsFetchStrategy } from '../../strategies/fetch/experts';\nimport {\n mapExpertToBioProps,\n buildFullName,\n} from '../../strategies/display/experts';\nimport { styles as styleUtilities } from '../../helpers';\nimport { type ExpertEntry } from 'types/data';\nimport { type BioProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n// ============================================================================\n// PURE HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Create base props for fetch strategy\n *\n * @param token - API authentication token\n * @param expertId - Expert ID to fetch\n * @returns Base props object for strategy's composeApiVariables\n */\nconst createFetchProps = (token: string, expertId: string) => ({\n token,\n limit: 1,\n offset: 0,\n id: expertId,\n});\n\n/**\n * Create accessibility announcer for loaded expert\n *\n * @param expert - Expert entry\n * @returns Announcer element model\n */\nconst createSuccessAnnouncer = (expert: ExpertEntry): Announcer => {\n const fullName = buildFullName(expert);\n const message = `Loaded profile for ${fullName}`;\n return new Announcer({ message });\n};\n\n// ============================================================================\n// STATE MANAGER CLASS\n// ============================================================================\n\n/**\n * Manages bio feed state and shadow DOM synchronization\n *\n * Encapsulates style accumulation and shadow DOM updates.\n * Provides immutable-style API for adding styles.\n */\nclass BioFeedState {\n private stylesArray: string[] = [];\n private shadowRoot: ShadowRoot | null = null;\n\n /**\n * Initialize state with initial styles\n *\n * @param initialStyles - Initial CSS styles\n */\n constructor(initialStyles: string) {\n this.stylesArray.push(initialStyles);\n }\n\n /**\n * Add styles to the accumulated styles\n *\n * @param styles - CSS styles to add\n */\n addStyles(styles: string): void {\n this.stylesArray.push(styles);\n }\n\n /**\n * Set shadow root reference for style updates\n *\n * @param shadow - Shadow root element\n */\n setShadowRoot(shadow: ShadowRoot): void {\n this.shadowRoot = shadow;\n }\n\n /**\n * Update shadow DOM styles\n *\n * @returns Promise that resolves when styles are updated\n */\n async updateShadowStyles(): Promise<void> {\n if (!this.shadowRoot) return;\n await styleUtilities.setShadowStyles({\n shadowRoot: this.shadowRoot,\n styles: this.getStyles(),\n });\n }\n\n /**\n * Get accumulated styles as single string\n *\n * @returns Combined CSS styles\n */\n getStyles(): string {\n return this.stylesArray.join('\\n');\n }\n\n /**\n * Get shadow root callback for events\n *\n * @returns Callback function for shadow root\n */\n getShadowCallback(): (shadow: ShadowRoot) => void {\n return (shadow) => this.setShadowRoot(shadow);\n }\n}\n\n// ============================================================================\n// RENDERING FUNCTIONS\n// ============================================================================\n\n/**\n * Render successful bio with expert data\n *\n * @param container - Container element to render into\n * @param expert - Expert entry data\n * @param state - State manager instance\n * @param isThemeDark - Dark theme flag\n * @returns Promise that resolves when rendering is complete\n */\nconst renderSuccess = async (\n container: HTMLElement,\n expert: ExpertEntry,\n state: BioFeedState,\n isThemeDark: boolean,\n): Promise<void> => {\n const bioProps = mapExpertToBioProps(expert, 'small', isThemeDark);\n const bioElement = person.bio.small(bioProps);\n const announcer = createSuccessAnnouncer(expert);\n const children = [bioElement.element, announcer.getElement()];\n\n children.forEach((child) => container.appendChild(child));\n\n state.addStyles(bioElement.styles);\n await state.updateShadowStyles();\n};\n\n/**\n * Error types for expert bio feed\n */\ntype BioErrorType = 'not_found' | 'graphql_error' | 'invalid_request';\n\n/**\n * Log error to console with specific warning message\n *\n * @param errorType - Type of error that occurred\n * @param expertId - Expert ID that was requested\n * @param error - Optional error object for GraphQL errors\n */\nconst logError = (\n errorType: BioErrorType,\n expertId: string,\n error?: any,\n): void => {\n switch (errorType) {\n case 'not_found':\n console.warn(\n `[Expert Bio Feed] No expert found with ID \"${expertId}\". ` +\n `Please verify the expert ID is correct and the expert exists in the system.`,\n );\n break;\n case 'graphql_error':\n console.warn(\n `[Expert Bio Feed] GraphQL error occurred while fetching expert \"${expertId}\". ` +\n `Check network connection and API availability.`,\n error,\n );\n break;\n case 'invalid_request':\n console.warn(\n `[Expert Bio Feed] Invalid request for expert \"${expertId}\". ` +\n `Ensure both data-token and data-id attributes are provided.`,\n );\n break;\n }\n};\n\n// ============================================================================\n// MAIN EXPORT\n// ============================================================================\n\n/**\n * Create an expert bio feed\n *\n * Fetches and displays a single expert's bio with summary.\n * Uses element builder pattern for clean construction.\n *\n * @param props - Feed configuration\n * @returns ElementModel with bio element, styles, and events\n *\n * @example\n * ```typescript\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'john-doe',\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With dark theme\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'jane-smith',\n * isThemeDark: true,\n * });\n * ```\n */\nexport default (props: BioProps): ElementModel => {\n const { token, expertId, isThemeDark = false } = props;\n\n // Create container using ElementBuilder\n const containerBuilder = new ElementBuilder('div').withClassName(\n 'expert-bio-feed',\n );\n\n // Get element for manipulation (non-destructive)\n const container = containerBuilder.getElement();\n\n // Initialize state management\n const loading = new LoadingState({ isThemeDark });\n const state = new BioFeedState(loading.styles);\n\n /**\n * Fetch expert data and render\n */\n const initialize = async (): Promise<void> => {\n loading.show(container);\n\n try {\n const fetchProps = createFetchProps(token, expertId);\n const variables = expertsFetchStrategy.composeApiVariables(fetchProps);\n const entries = await expertsFetchStrategy.fetchEntries(variables);\n\n loading.hide();\n\n if (!entries || entries.length === 0) {\n logError('not_found', expertId);\n return;\n }\n\n await renderSuccess(container, entries[0], state, isThemeDark);\n } catch (error) {\n loading.hide();\n logError('graphql_error', expertId, error);\n }\n };\n\n // Start initialization\n initialize();\n\n // Build and return element model\n const model = containerBuilder.build();\n\n return {\n element: model.element,\n get styles() {\n return state.getStyles();\n },\n events: {\n callback: state.getShadowCallback(),\n },\n };\n};\n"],"names":["styleUtilities.setShadowStyles"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/grid.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;yBA8BjC,OAAO,SAAS,KAAG,YAAY;AAA/C,wBAmBE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const createBaseFeed = require("../../factory/core/createBaseFeed.js");
|
|
3
|
+
require("@universityofmaryland/web-builder-library");
|
|
4
|
+
require("@universityofmaryland/web-styles-library");
|
|
5
|
+
require("@universityofmaryland/web-styles-library/typography");
|
|
6
|
+
require("@universityofmaryland/web-utilities-library/theme");
|
|
7
|
+
require("@universityofmaryland/web-elements-library");
|
|
8
|
+
require("@universityofmaryland/web-elements-library/composite");
|
|
9
|
+
require("@universityofmaryland/web-elements-library/atomic");
|
|
10
|
+
require("@universityofmaryland/web-utilities-library/elements");
|
|
11
|
+
const experts$1 = require("../../strategies/display/experts.js");
|
|
12
|
+
require("@universityofmaryland/web-utilities-library/network");
|
|
13
|
+
require("../../strategies/fetch/events.js");
|
|
14
|
+
require("../../strategies/fetch/news.js");
|
|
15
|
+
const experts = require("../../strategies/fetch/experts.js");
|
|
16
|
+
const grid$1 = require("../../strategies/layout/grid.js");
|
|
17
|
+
require("@universityofmaryland/web-elements-library/layout");
|
|
18
|
+
const grid = (props) => {
|
|
19
|
+
const { isOverlay = false } = props;
|
|
20
|
+
return createBaseFeed.createBaseFeed({
|
|
21
|
+
...props,
|
|
22
|
+
isOverlay,
|
|
23
|
+
isAligned: !isOverlay,
|
|
24
|
+
fetchStrategy: experts.expertsFetchStrategy,
|
|
25
|
+
displayStrategy: experts$1.expertsDisplayStrategy,
|
|
26
|
+
layoutStrategy: isOverlay ? grid$1.gridLayout : grid$1.gridBorderLayout,
|
|
27
|
+
imageConfig: (entry) => ({
|
|
28
|
+
imageUrl: entry.headshot?.[0]?.url || "",
|
|
29
|
+
altText: entry.middleName ? `${entry.firstName} ${entry.middleName} ${entry.lastName}` : `${entry.firstName} ${entry.lastName}`,
|
|
30
|
+
linkUrl: `https://umdrightnow.umd.edu/expert/${entry.slug}`,
|
|
31
|
+
linkLabel: `View profile for ${entry.firstName} ${entry.lastName}`
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
module.exports = grid;
|
|
36
|
+
//# sourceMappingURL=grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.js","sources":["../../../source/feeds/experts/grid.ts"],"sourcesContent":["/**\n * Experts Grid Feed (Factory Pattern)\n *\n * Grid layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a multi-column grid.\n * Supports overlay cards with gridLayout or standard cards with gridGapLayout.\n *\n * @module feeds/experts/grid\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n gridLayout,\n gridBorderLayout,\n} from 'strategies';\nimport { type GridProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts grid feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * // Standard grid with borders\n * const feed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 3,\n * numberOfRowsToStart: 2,\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * // Overlay grid\n * const overlayFeed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 4,\n * numberOfRowsToStart: 2,\n * isOverlay: true,\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport default (props: GridProps): ElementModel => {\n const { isOverlay = false } = props;\n\n return createBaseFeed({\n ...props,\n isOverlay,\n isAligned: !isOverlay,\n fetchStrategy: expertsFetchStrategy,\n displayStrategy: expertsDisplayStrategy,\n layoutStrategy: isOverlay ? gridLayout : gridBorderLayout,\n imageConfig: (entry) => ({\n imageUrl: entry.headshot?.[0]?.url || '',\n altText: entry.middleName\n ? `${entry.firstName} ${entry.middleName} ${entry.lastName}`\n : `${entry.firstName} ${entry.lastName}`,\n linkUrl: `https://umdrightnow.umd.edu/expert/${entry.slug}`,\n linkLabel: `View profile for ${entry.firstName} ${entry.lastName}`,\n }),\n });\n};\n"],"names":["createBaseFeed","expertsFetchStrategy","expertsDisplayStrategy","gridLayout","gridBorderLayout"],"mappings":";;;;;;;;;;;;;;;;;AAgDA,MAAA,OAAe,CAAC,UAAmC;AACjD,QAAM,EAAE,YAAY,MAAA,IAAU;AAE9B,SAAOA,8BAAe;AAAA,IACpB,GAAG;AAAA,IACH;AAAA,IACA,WAAW,CAAC;AAAA,IACZ,eAAeC,QAAAA;AAAAA,IACf,iBAAiBC,UAAAA;AAAAA,IACjB,gBAAgB,YAAYC,OAAAA,aAAaC,OAAAA;AAAAA,IACzC,aAAa,CAAC,WAAW;AAAA,MACvB,UAAU,MAAM,WAAW,CAAC,GAAG,OAAO;AAAA,MACtC,SAAS,MAAM,aACX,GAAG,MAAM,SAAS,IAAI,MAAM,UAAU,IAAI,MAAM,QAAQ,KACxD,GAAG,MAAM,SAAS,IAAI,MAAM,QAAQ;AAAA,MACxC,SAAS,sCAAsC,MAAM,IAAI;AAAA,MACzD,WAAW,oBAAoB,MAAM,SAAS,IAAI,MAAM,QAAQ;AAAA,IAAA;AAAA,EAClE,CACD;AACH;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createBaseFeed } from "../../factory/core/createBaseFeed.mjs";
|
|
2
|
+
import "@universityofmaryland/web-builder-library";
|
|
3
|
+
import "@universityofmaryland/web-styles-library";
|
|
4
|
+
import "@universityofmaryland/web-styles-library/typography";
|
|
5
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
6
|
+
import "@universityofmaryland/web-elements-library";
|
|
7
|
+
import "@universityofmaryland/web-elements-library/composite";
|
|
8
|
+
import "@universityofmaryland/web-elements-library/atomic";
|
|
9
|
+
import "@universityofmaryland/web-utilities-library/elements";
|
|
10
|
+
import { expertsDisplayStrategy } from "../../strategies/display/experts.mjs";
|
|
11
|
+
import "@universityofmaryland/web-utilities-library/network";
|
|
12
|
+
import "../../strategies/fetch/events.mjs";
|
|
13
|
+
import "../../strategies/fetch/news.mjs";
|
|
14
|
+
import { expertsFetchStrategy } from "../../strategies/fetch/experts.mjs";
|
|
15
|
+
import { gridLayout, gridBorderLayout } from "../../strategies/layout/grid.mjs";
|
|
16
|
+
import "@universityofmaryland/web-elements-library/layout";
|
|
17
|
+
const grid = (props) => {
|
|
18
|
+
const { isOverlay = false } = props;
|
|
19
|
+
return createBaseFeed({
|
|
20
|
+
...props,
|
|
21
|
+
isOverlay,
|
|
22
|
+
isAligned: !isOverlay,
|
|
23
|
+
fetchStrategy: expertsFetchStrategy,
|
|
24
|
+
displayStrategy: expertsDisplayStrategy,
|
|
25
|
+
layoutStrategy: isOverlay ? gridLayout : gridBorderLayout,
|
|
26
|
+
imageConfig: (entry) => ({
|
|
27
|
+
imageUrl: entry.headshot?.[0]?.url || "",
|
|
28
|
+
altText: entry.middleName ? `${entry.firstName} ${entry.middleName} ${entry.lastName}` : `${entry.firstName} ${entry.lastName}`,
|
|
29
|
+
linkUrl: `https://umdrightnow.umd.edu/expert/${entry.slug}`,
|
|
30
|
+
linkLabel: `View profile for ${entry.firstName} ${entry.lastName}`
|
|
31
|
+
})
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
grid as default
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=grid.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.mjs","sources":["../../../source/feeds/experts/grid.ts"],"sourcesContent":["/**\n * Experts Grid Feed (Factory Pattern)\n *\n * Grid layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a multi-column grid.\n * Supports overlay cards with gridLayout or standard cards with gridGapLayout.\n *\n * @module feeds/experts/grid\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n gridLayout,\n gridBorderLayout,\n} from 'strategies';\nimport { type GridProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts grid feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * // Standard grid with borders\n * const feed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 3,\n * numberOfRowsToStart: 2,\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * // Overlay grid\n * const overlayFeed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 4,\n * numberOfRowsToStart: 2,\n * isOverlay: true,\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport default (props: GridProps): ElementModel => {\n const { isOverlay = false } = props;\n\n return createBaseFeed({\n ...props,\n isOverlay,\n isAligned: !isOverlay,\n fetchStrategy: expertsFetchStrategy,\n displayStrategy: expertsDisplayStrategy,\n layoutStrategy: isOverlay ? gridLayout : gridBorderLayout,\n imageConfig: (entry) => ({\n imageUrl: entry.headshot?.[0]?.url || '',\n altText: entry.middleName\n ? `${entry.firstName} ${entry.middleName} ${entry.lastName}`\n : `${entry.firstName} ${entry.lastName}`,\n linkUrl: `https://umdrightnow.umd.edu/expert/${entry.slug}`,\n linkLabel: `View profile for ${entry.firstName} ${entry.lastName}`,\n }),\n });\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAgDA,MAAA,OAAe,CAAC,UAAmC;AACjD,QAAM,EAAE,YAAY,MAAA,IAAU;AAE9B,SAAO,eAAe;AAAA,IACpB,GAAG;AAAA,IACH;AAAA,IACA,WAAW,CAAC;AAAA,IACZ,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,gBAAgB,YAAY,aAAa;AAAA,IACzC,aAAa,CAAC,WAAW;AAAA,MACvB,UAAU,MAAM,WAAW,CAAC,GAAG,OAAO;AAAA,MACtC,SAAS,MAAM,aACX,GAAG,MAAM,SAAS,IAAI,MAAM,UAAU,IAAI,MAAM,QAAQ,KACxD,GAAG,MAAM,SAAS,IAAI,MAAM,QAAQ;AAAA,MACxC,SAAS,sCAAsC,MAAM,IAAI;AAAA,MACzD,WAAW,oBAAoB,MAAM,SAAS,IAAI,MAAM,QAAQ;AAAA,IAAA;AAAA,EAClE,CACD;AACH;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAMzC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAOzC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/list.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;yBAqBjC,OAAO,SAAS,KAAG,YAAY;AAA/C,wBAMK"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const createBaseFeed = require("../../factory/core/createBaseFeed.js");
|
|
3
|
+
require("@universityofmaryland/web-builder-library");
|
|
4
|
+
require("@universityofmaryland/web-styles-library");
|
|
5
|
+
require("@universityofmaryland/web-styles-library/typography");
|
|
6
|
+
require("@universityofmaryland/web-utilities-library/theme");
|
|
7
|
+
require("@universityofmaryland/web-elements-library");
|
|
8
|
+
require("@universityofmaryland/web-elements-library/composite");
|
|
9
|
+
require("@universityofmaryland/web-elements-library/atomic");
|
|
10
|
+
require("@universityofmaryland/web-utilities-library/elements");
|
|
11
|
+
const experts$1 = require("../../strategies/display/experts.js");
|
|
12
|
+
require("@universityofmaryland/web-utilities-library/network");
|
|
13
|
+
require("../../strategies/fetch/events.js");
|
|
14
|
+
require("../../strategies/fetch/news.js");
|
|
15
|
+
const experts = require("../../strategies/fetch/experts.js");
|
|
16
|
+
const grid = require("../../strategies/layout/grid.js");
|
|
17
|
+
require("@universityofmaryland/web-elements-library/layout");
|
|
18
|
+
const list = (props) => createBaseFeed.createBaseFeed({
|
|
19
|
+
...props,
|
|
20
|
+
fetchStrategy: experts.expertsFetchStrategy,
|
|
21
|
+
displayStrategy: experts$1.expertsDisplayStrategy,
|
|
22
|
+
layoutStrategy: grid.stackedLayout
|
|
23
|
+
});
|
|
24
|
+
module.exports = list;
|
|
25
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sources":["../../../source/feeds/experts/list.ts"],"sourcesContent":["/**\n * Experts List Feed (Factory Pattern)\n *\n * List layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a single-column list.\n *\n * @module feeds/experts/list\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n stackedLayout,\n} from 'strategies';\nimport { type ListProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts list feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * const feed = expertsList({\n * token: 'my-token',\n * numberOfRowsToStart: 10,\n * cardType: 'list',\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport default (props: ListProps): ElementModel =>\n createBaseFeed({\n ...props,\n fetchStrategy: expertsFetchStrategy,\n displayStrategy: expertsDisplayStrategy,\n layoutStrategy: stackedLayout,\n });\n"],"names":["createBaseFeed","expertsFetchStrategy","expertsDisplayStrategy","stackedLayout"],"mappings":";;;;;;;;;;;;;;;;;AAqCA,MAAA,OAAe,CAAC,UACdA,eAAAA,eAAe;AAAA,EACb,GAAG;AAAA,EACH,eAAeC,QAAAA;AAAAA,EACf,iBAAiBC,UAAAA;AAAAA,EACjB,gBAAgBC,KAAAA;AAClB,CAAC;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createBaseFeed } from "../../factory/core/createBaseFeed.mjs";
|
|
2
|
+
import "@universityofmaryland/web-builder-library";
|
|
3
|
+
import "@universityofmaryland/web-styles-library";
|
|
4
|
+
import "@universityofmaryland/web-styles-library/typography";
|
|
5
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
6
|
+
import "@universityofmaryland/web-elements-library";
|
|
7
|
+
import "@universityofmaryland/web-elements-library/composite";
|
|
8
|
+
import "@universityofmaryland/web-elements-library/atomic";
|
|
9
|
+
import "@universityofmaryland/web-utilities-library/elements";
|
|
10
|
+
import { expertsDisplayStrategy } from "../../strategies/display/experts.mjs";
|
|
11
|
+
import "@universityofmaryland/web-utilities-library/network";
|
|
12
|
+
import "../../strategies/fetch/events.mjs";
|
|
13
|
+
import "../../strategies/fetch/news.mjs";
|
|
14
|
+
import { expertsFetchStrategy } from "../../strategies/fetch/experts.mjs";
|
|
15
|
+
import { stackedLayout } from "../../strategies/layout/grid.mjs";
|
|
16
|
+
import "@universityofmaryland/web-elements-library/layout";
|
|
17
|
+
const list = (props) => createBaseFeed({
|
|
18
|
+
...props,
|
|
19
|
+
fetchStrategy: expertsFetchStrategy,
|
|
20
|
+
displayStrategy: expertsDisplayStrategy,
|
|
21
|
+
layoutStrategy: stackedLayout
|
|
22
|
+
});
|
|
23
|
+
export {
|
|
24
|
+
list as default
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=list.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.mjs","sources":["../../../source/feeds/experts/list.ts"],"sourcesContent":["/**\n * Experts List Feed (Factory Pattern)\n *\n * List layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a single-column list.\n *\n * @module feeds/experts/list\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n stackedLayout,\n} from 'strategies';\nimport { type ListProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts list feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * const feed = expertsList({\n * token: 'my-token',\n * numberOfRowsToStart: 10,\n * cardType: 'list',\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport default (props: ListProps): ElementModel =>\n createBaseFeed({\n ...props,\n fetchStrategy: expertsFetchStrategy,\n displayStrategy: expertsDisplayStrategy,\n layoutStrategy: stackedLayout,\n });\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqCA,MAAA,OAAe,CAAC,UACd,eAAe;AAAA,EACb,GAAG;AAAA,EACH,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,gBAAgB;AAClB,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_types.d.ts","sourceRoot":"","sources":["../../../source/feeds/news/_types.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,EAAE,CAAC;CACL;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,UAAU,mBAAmB;IAC3B,YAAY,EAAE,MAAM,WAAW,CAAC;IAChC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC;IACvC,eAAe,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WACf,SAAQ,mBAAmB,EACzB,UAAU,EACV,SAAS;CAAG;AAEhB,MAAM,WAAW,YAAa,SAAQ,WAAW,EAAE,mBAAmB;CAAG;AAEzE,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,aAAa,EAAE;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,MAAM,WAAW,wBACf,SAAQ,iBAAiB,EACvB,WAAW;IACb,aAAa,EAAE;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featured.d.ts","sourceRoot":"","sources":["../../../source/feeds/news/featured.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;yBA0djC,OAAO,aAAa,KAAG,YAAY;AAAnD,wBAsJE"}
|