@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,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const webBuilderLibrary = require("@universityofmaryland/web-builder-library");
|
|
3
|
+
const composite = require("@universityofmaryland/web-elements-library/composite");
|
|
4
|
+
const layout = require("@universityofmaryland/web-elements-library/layout");
|
|
5
|
+
const loading = require("../../states/loading.js");
|
|
6
|
+
const empty = require("../../states/empty.js");
|
|
7
|
+
const pagination = require("../../states/pagination.js");
|
|
8
|
+
const announcer = require("../../states/announcer.js");
|
|
9
|
+
const news = require("../../strategies/fetch/news.js");
|
|
10
|
+
const news$1 = require("../../strategies/display/news.js");
|
|
11
|
+
const index = require("../../helpers/events/index.js");
|
|
12
|
+
const shadow = require("../../helpers/styles/shadow.js");
|
|
13
|
+
const INITIAL_ITEMS = 3;
|
|
14
|
+
const LOAD_MORE_ITEMS = 2;
|
|
15
|
+
const createFetchProps = (props, offset) => ({
|
|
16
|
+
token: props.token,
|
|
17
|
+
categories: props.categories,
|
|
18
|
+
isUnion: props.isUnion,
|
|
19
|
+
numberOfRowsToStart: offset === 0 ? INITIAL_ITEMS : LOAD_MORE_ITEMS,
|
|
20
|
+
numberOfColumnsToShow: 1,
|
|
21
|
+
getOffset: () => offset
|
|
22
|
+
});
|
|
23
|
+
const createImageConfig = (entry) => ({
|
|
24
|
+
imageUrl: entry.image[0]?.url,
|
|
25
|
+
altText: entry.image[0]?.altText || "News Article Image",
|
|
26
|
+
linkUrl: entry.url,
|
|
27
|
+
linkLabel: "Maryland Today Article with image"
|
|
28
|
+
});
|
|
29
|
+
const createAnnouncerMessage = (offset, total, isLazyLoad) => {
|
|
30
|
+
return isLazyLoad ? `Showing ${offset} of ${total} articles` : `Showing ${offset} articles`;
|
|
31
|
+
};
|
|
32
|
+
class FeaturedFeedState {
|
|
33
|
+
/**
|
|
34
|
+
* Initialize state with initial styles
|
|
35
|
+
*
|
|
36
|
+
* @param initialStyles - Initial CSS styles
|
|
37
|
+
*/
|
|
38
|
+
constructor(initialStyles) {
|
|
39
|
+
this.stylesArray = [];
|
|
40
|
+
this.shadowRoot = null;
|
|
41
|
+
this.totalEntries = 0;
|
|
42
|
+
this.offset = 0;
|
|
43
|
+
this.hasRenderedOffset = false;
|
|
44
|
+
this.pagination = null;
|
|
45
|
+
this.stylesArray.push(initialStyles);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Add styles to the accumulated styles
|
|
49
|
+
*
|
|
50
|
+
* @param styles - CSS styles to add
|
|
51
|
+
*/
|
|
52
|
+
addStyles(styles) {
|
|
53
|
+
this.stylesArray.push(styles);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Set shadow root reference for style updates
|
|
57
|
+
*
|
|
58
|
+
* @param shadow - Shadow root element
|
|
59
|
+
*/
|
|
60
|
+
setShadowRoot(shadow2) {
|
|
61
|
+
this.shadowRoot = shadow2;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Update shadow DOM styles
|
|
65
|
+
*
|
|
66
|
+
* @returns Promise that resolves when styles are updated
|
|
67
|
+
*/
|
|
68
|
+
async updateShadowStyles() {
|
|
69
|
+
if (!this.shadowRoot) return;
|
|
70
|
+
await shadow.setShadowStyles({
|
|
71
|
+
shadowRoot: this.shadowRoot,
|
|
72
|
+
styles: this.getStyles()
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get accumulated styles as single string
|
|
77
|
+
*
|
|
78
|
+
* @returns Combined CSS styles
|
|
79
|
+
*/
|
|
80
|
+
getStyles() {
|
|
81
|
+
return this.stylesArray.join("\n");
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get shadow root callback for events
|
|
85
|
+
*
|
|
86
|
+
* @returns Callback function for shadow root
|
|
87
|
+
*/
|
|
88
|
+
getShadowCallback() {
|
|
89
|
+
return (shadow2) => this.setShadowRoot(shadow2);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get current offset
|
|
93
|
+
*
|
|
94
|
+
* @returns Current offset
|
|
95
|
+
*/
|
|
96
|
+
getOffset() {
|
|
97
|
+
return this.offset;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Set offset to specific value
|
|
101
|
+
*
|
|
102
|
+
* @param value - New offset value
|
|
103
|
+
*/
|
|
104
|
+
setOffset(value) {
|
|
105
|
+
this.offset = value;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Increment offset by count
|
|
109
|
+
*
|
|
110
|
+
* @param count - Number to increment by
|
|
111
|
+
*/
|
|
112
|
+
incrementOffset(count) {
|
|
113
|
+
this.offset += count;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get total entries
|
|
117
|
+
*
|
|
118
|
+
* @returns Total entries
|
|
119
|
+
*/
|
|
120
|
+
getTotalEntries() {
|
|
121
|
+
return this.totalEntries;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Set total entries
|
|
125
|
+
*
|
|
126
|
+
* @param total - Total entries
|
|
127
|
+
*/
|
|
128
|
+
setTotalEntries(total) {
|
|
129
|
+
this.totalEntries = total;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if offset layout has been rendered
|
|
133
|
+
*
|
|
134
|
+
* @returns True if offset layout rendered
|
|
135
|
+
*/
|
|
136
|
+
hasOffset() {
|
|
137
|
+
return this.hasRenderedOffset;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Mark offset layout as rendered
|
|
141
|
+
*/
|
|
142
|
+
markOffsetRendered() {
|
|
143
|
+
this.hasRenderedOffset = true;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get pagination state
|
|
147
|
+
*
|
|
148
|
+
* @returns Pagination state or null
|
|
149
|
+
*/
|
|
150
|
+
getPagination() {
|
|
151
|
+
return this.pagination;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Set pagination state
|
|
155
|
+
*
|
|
156
|
+
* @param pagination - Pagination state
|
|
157
|
+
*/
|
|
158
|
+
setPagination(pagination2) {
|
|
159
|
+
this.pagination = pagination2;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const createOverlayCard = (entry, state, isThemeDark) => {
|
|
163
|
+
const overlayCard = news$1.newsDisplayStrategy.mapEntryToCard(entry, {
|
|
164
|
+
isOverlay: true,
|
|
165
|
+
isThemeDark,
|
|
166
|
+
imageConfig: () => createImageConfig(entry)
|
|
167
|
+
});
|
|
168
|
+
state.addStyles(`
|
|
169
|
+
${overlayCard.styles}
|
|
170
|
+
|
|
171
|
+
.${composite.card.overlay.imageClassRef} {
|
|
172
|
+
height: inherit;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.${composite.card.overlay.imageClassRef} .umd-asset-image-wrapper-scaled {
|
|
176
|
+
position: absolute;
|
|
177
|
+
}
|
|
178
|
+
`);
|
|
179
|
+
return overlayCard;
|
|
180
|
+
};
|
|
181
|
+
const createBlockCards = (entries, state, options) => {
|
|
182
|
+
return entries.map((entry) => {
|
|
183
|
+
const blockCard = news$1.newsDisplayStrategy.mapEntryToCard(entry, {
|
|
184
|
+
isThemeDark: options.isThemeDark,
|
|
185
|
+
isTransparent: options.isTransparent,
|
|
186
|
+
isAligned: true,
|
|
187
|
+
imageConfig: () => createImageConfig(entry)
|
|
188
|
+
});
|
|
189
|
+
state.addStyles(blockCard.styles);
|
|
190
|
+
return blockCard;
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
const renderFeaturedLayout = async (container, entries, state, props, loadMore) => {
|
|
194
|
+
const {
|
|
195
|
+
isThemeDark = false,
|
|
196
|
+
isTransparent = false,
|
|
197
|
+
isLayoutReversed = false,
|
|
198
|
+
overwriteStickyPosition,
|
|
199
|
+
isLazyLoad = false
|
|
200
|
+
} = props;
|
|
201
|
+
if (entries.length < 2 || state.hasOffset()) {
|
|
202
|
+
return renderStandardGrid(container, entries, state, {
|
|
203
|
+
isThemeDark,
|
|
204
|
+
isTransparent
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
state.markOffsetRendered();
|
|
208
|
+
const offsetLayout = layout.gridOffset({
|
|
209
|
+
columns: 2,
|
|
210
|
+
isLayoutReversed,
|
|
211
|
+
stickyTopPosition: overwriteStickyPosition
|
|
212
|
+
});
|
|
213
|
+
const gridLayout = layout.gridGap({ columns: 2 });
|
|
214
|
+
gridLayout.element.setAttribute("id", "umd-featured-news-grid-container");
|
|
215
|
+
const overlayCard = createOverlayCard(entries[0], state, isThemeDark);
|
|
216
|
+
const blockCards = createBlockCards(entries.slice(1, 3), state, {
|
|
217
|
+
isThemeDark,
|
|
218
|
+
isTransparent
|
|
219
|
+
});
|
|
220
|
+
blockCards.forEach((card2) => {
|
|
221
|
+
gridLayout.element.appendChild(card2.element);
|
|
222
|
+
});
|
|
223
|
+
offsetLayout.element.appendChild(overlayCard.element);
|
|
224
|
+
offsetLayout.element.appendChild(gridLayout.element);
|
|
225
|
+
container.appendChild(offsetLayout.element);
|
|
226
|
+
state.addStyles(offsetLayout.styles);
|
|
227
|
+
state.addStyles(gridLayout.styles);
|
|
228
|
+
state.setOffset(3);
|
|
229
|
+
if (isLazyLoad && state.getTotalEntries() > state.getOffset()) {
|
|
230
|
+
const pagination$1 = new pagination.PaginationState({
|
|
231
|
+
totalEntries: state.getTotalEntries(),
|
|
232
|
+
offset: state.getOffset(),
|
|
233
|
+
isLazyLoad: true,
|
|
234
|
+
callback: loadMore
|
|
235
|
+
});
|
|
236
|
+
const paginationElement = pagination$1.render(container);
|
|
237
|
+
if (paginationElement) state.addStyles(paginationElement.styles);
|
|
238
|
+
state.setPagination(pagination$1);
|
|
239
|
+
}
|
|
240
|
+
const message = createAnnouncerMessage(
|
|
241
|
+
INITIAL_ITEMS,
|
|
242
|
+
state.getTotalEntries(),
|
|
243
|
+
isLazyLoad
|
|
244
|
+
);
|
|
245
|
+
const announcer$1 = new announcer.Announcer({ message });
|
|
246
|
+
container.appendChild(announcer$1.getElement());
|
|
247
|
+
await state.updateShadowStyles();
|
|
248
|
+
};
|
|
249
|
+
const renderStandardGrid = async (container, entries, state, options) => {
|
|
250
|
+
let gridContainer = container.querySelector(
|
|
251
|
+
"#umd-featured-news-grid-container"
|
|
252
|
+
);
|
|
253
|
+
if (!gridContainer) {
|
|
254
|
+
const gridLayout = layout.gridGap({ columns: 2 });
|
|
255
|
+
gridLayout.element.setAttribute("id", "umd-featured-news-grid-container");
|
|
256
|
+
container.appendChild(gridLayout.element);
|
|
257
|
+
state.addStyles(gridLayout.styles);
|
|
258
|
+
gridContainer = gridLayout.element;
|
|
259
|
+
}
|
|
260
|
+
const blockCards = createBlockCards(entries, state, options);
|
|
261
|
+
blockCards.forEach((card2) => {
|
|
262
|
+
gridContainer.appendChild(card2.element);
|
|
263
|
+
});
|
|
264
|
+
state.incrementOffset(entries.length);
|
|
265
|
+
await state.updateShadowStyles();
|
|
266
|
+
};
|
|
267
|
+
const renderError = async (container, message, state, isThemeDark) => {
|
|
268
|
+
const emptyState = new empty.EmptyState({ message, isThemeDark });
|
|
269
|
+
emptyState.render(container);
|
|
270
|
+
state.addStyles(emptyState.styles);
|
|
271
|
+
await state.updateShadowStyles();
|
|
272
|
+
};
|
|
273
|
+
const featured = (props) => {
|
|
274
|
+
const {
|
|
275
|
+
token,
|
|
276
|
+
categories,
|
|
277
|
+
isUnion,
|
|
278
|
+
isThemeDark = false,
|
|
279
|
+
isLazyLoad = false,
|
|
280
|
+
isTransparent = false
|
|
281
|
+
} = props;
|
|
282
|
+
const containerBuilder = new webBuilderLibrary.ElementBuilder("div").withClassName(
|
|
283
|
+
"featured-news-feed"
|
|
284
|
+
);
|
|
285
|
+
const container = containerBuilder.getElement();
|
|
286
|
+
const loading$1 = new loading.LoadingState({ isThemeDark });
|
|
287
|
+
const state = new FeaturedFeedState(loading$1.styles);
|
|
288
|
+
const loadMore = async () => {
|
|
289
|
+
const pagination2 = state.getPagination();
|
|
290
|
+
if (pagination2) {
|
|
291
|
+
pagination2.remove();
|
|
292
|
+
}
|
|
293
|
+
loading$1.show(container);
|
|
294
|
+
const fetchProps = createFetchProps(
|
|
295
|
+
{ token, categories, isUnion },
|
|
296
|
+
state.getOffset()
|
|
297
|
+
);
|
|
298
|
+
const variables = news.newsFetchStrategy.composeApiVariables(fetchProps);
|
|
299
|
+
const entries = await news.newsFetchStrategy.fetchEntries(variables);
|
|
300
|
+
loading$1.hide();
|
|
301
|
+
if (!entries || entries.length === 0) return;
|
|
302
|
+
await renderStandardGrid(container, entries, state, {
|
|
303
|
+
isThemeDark,
|
|
304
|
+
isTransparent
|
|
305
|
+
});
|
|
306
|
+
if (pagination2) {
|
|
307
|
+
pagination2.updateState(state.getOffset(), state.getTotalEntries());
|
|
308
|
+
if (pagination2.styles) state.addStyles(pagination2.styles);
|
|
309
|
+
await state.updateShadowStyles();
|
|
310
|
+
}
|
|
311
|
+
const existingAnnouncer = container.querySelector(
|
|
312
|
+
'[role="status"]'
|
|
313
|
+
);
|
|
314
|
+
if (existingAnnouncer) {
|
|
315
|
+
existingAnnouncer.textContent = createAnnouncerMessage(
|
|
316
|
+
state.getOffset(),
|
|
317
|
+
state.getTotalEntries(),
|
|
318
|
+
isLazyLoad
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
index.dispatch(
|
|
322
|
+
container,
|
|
323
|
+
index.eventNames.FEED_LOADED_MORE,
|
|
324
|
+
{
|
|
325
|
+
items: entries,
|
|
326
|
+
count: entries.length,
|
|
327
|
+
total: state.getTotalEntries()
|
|
328
|
+
}
|
|
329
|
+
);
|
|
330
|
+
};
|
|
331
|
+
const initialize = async () => {
|
|
332
|
+
loading$1.show(container);
|
|
333
|
+
const fetchProps = createFetchProps({ token, categories, isUnion }, 0);
|
|
334
|
+
const variables = news.newsFetchStrategy.composeApiVariables(fetchProps);
|
|
335
|
+
const [count, entries] = await Promise.all([
|
|
336
|
+
news.newsFetchStrategy.fetchCount(variables),
|
|
337
|
+
news.newsFetchStrategy.fetchEntries(variables)
|
|
338
|
+
]);
|
|
339
|
+
loading$1.hide();
|
|
340
|
+
if (!entries || entries.length === 0) {
|
|
341
|
+
await renderError(
|
|
342
|
+
container,
|
|
343
|
+
"No news articles found",
|
|
344
|
+
state,
|
|
345
|
+
isThemeDark
|
|
346
|
+
);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
state.setTotalEntries(count || entries.length);
|
|
350
|
+
index.dispatch(container, index.eventNames.FEED_LOADED, {
|
|
351
|
+
items: entries,
|
|
352
|
+
count: entries.length,
|
|
353
|
+
total: state.getTotalEntries()
|
|
354
|
+
});
|
|
355
|
+
await renderFeaturedLayout(container, entries, state, props, loadMore);
|
|
356
|
+
};
|
|
357
|
+
initialize();
|
|
358
|
+
const model = containerBuilder.build();
|
|
359
|
+
const setPosition = (position) => {
|
|
360
|
+
const overlayElement = container.querySelector(
|
|
361
|
+
`.${composite.card.overlay.imageClassRef}`
|
|
362
|
+
);
|
|
363
|
+
if (overlayElement) overlayElement.style.top = `${position}px`;
|
|
364
|
+
};
|
|
365
|
+
return {
|
|
366
|
+
element: model.element,
|
|
367
|
+
get styles() {
|
|
368
|
+
return state.getStyles();
|
|
369
|
+
},
|
|
370
|
+
events: {
|
|
371
|
+
callback: state.getShadowCallback(),
|
|
372
|
+
setPosition
|
|
373
|
+
// Custom event for sticky position control
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
module.exports = featured;
|
|
378
|
+
//# sourceMappingURL=featured.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featured.js","sources":["../../../source/feeds/news/featured.ts"],"sourcesContent":["/**\n * News Featured Feed (Refactored with Element Builder)\n *\n * Displays news articles with a featured layout:\n * - First article: Large overlay card with sticky positioning\n * - Next 2 articles: Block cards in grid layout\n * - Additional articles: Lazy-loaded block cards\n *\n * Uses Element Builder pattern for clean, declarative construction.\n *\n * @module feeds/news/featured\n */\n\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { card } from '@universityofmaryland/web-elements-library/composite';\nimport {\n gridGap,\n gridOffset,\n} from '@universityofmaryland/web-elements-library/layout';\nimport {\n LoadingState,\n PaginationState,\n EmptyState,\n Announcer,\n} from '../../states';\nimport { newsFetchStrategy } from '../../strategies/fetch/news';\nimport { newsDisplayStrategy } from '../../strategies/display/news';\nimport {\n events as eventUtilities,\n styles as styleUtilities,\n} from '../../helpers';\nimport { type FeaturedProps } from './_types';\nimport { type ElementModel } from '../../_types';\nimport { type NewsEntry } from 'types/data';\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\n/** Featured layout displays 3 items initially: 1 overlay + 2 block cards */\nconst INITIAL_ITEMS = 3;\n\n/** Lazy loading adds 2 items at a time to fill a row in the 2-column grid */\nconst LOAD_MORE_ITEMS = 2;\n\n// ============================================================================\n// PURE HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Create base props for fetch strategy\n *\n * @param props - Feed props\n * @param offset - Current offset\n * @returns Base props object for strategy's composeApiVariables\n */\nconst createFetchProps = (\n props: Pick<FeaturedProps, 'token' | 'categories' | 'isUnion'>,\n offset: number,\n) => ({\n token: props.token,\n categories: props.categories,\n isUnion: props.isUnion,\n numberOfRowsToStart: offset === 0 ? INITIAL_ITEMS : LOAD_MORE_ITEMS,\n numberOfColumnsToShow: 1,\n getOffset: () => offset,\n});\n\n/**\n * Create image configuration for news entry\n *\n * @param entry - News entry\n * @returns Image config object\n */\nconst createImageConfig = (entry: NewsEntry) => ({\n imageUrl: entry.image[0]?.url,\n altText: entry.image[0]?.altText || 'News Article Image',\n linkUrl: entry.url,\n linkLabel: 'Maryland Today Article with image',\n});\n\n/**\n * Create announcer message\n *\n * @param offset - Current offset\n * @param total - Total entries\n * @param isLazyLoad - Lazy load enabled\n * @returns Announcer message\n */\nconst createAnnouncerMessage = (\n offset: number,\n total: number,\n isLazyLoad: boolean,\n): string => {\n return isLazyLoad\n ? `Showing ${offset} of ${total} articles`\n : `Showing ${offset} articles`;\n};\n\n// ============================================================================\n// STATE MANAGER CLASS\n// ============================================================================\n\n/**\n * Manages featured feed state and shadow DOM synchronization\n *\n * Encapsulates all mutable state including pagination, offset,\n * and shadow DOM management.\n */\nclass FeaturedFeedState {\n private stylesArray: string[] = [];\n private shadowRoot: ShadowRoot | null = null;\n private totalEntries: number = 0;\n private offset: number = 0;\n private hasRenderedOffset: boolean = false;\n private pagination: PaginationState | 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 * Get current offset\n *\n * @returns Current offset\n */\n getOffset(): number {\n return this.offset;\n }\n\n /**\n * Set offset to specific value\n *\n * @param value - New offset value\n */\n setOffset(value: number): void {\n this.offset = value;\n }\n\n /**\n * Increment offset by count\n *\n * @param count - Number to increment by\n */\n incrementOffset(count: number): void {\n this.offset += count;\n }\n\n /**\n * Get total entries\n *\n * @returns Total entries\n */\n getTotalEntries(): number {\n return this.totalEntries;\n }\n\n /**\n * Set total entries\n *\n * @param total - Total entries\n */\n setTotalEntries(total: number): void {\n this.totalEntries = total;\n }\n\n /**\n * Check if offset layout has been rendered\n *\n * @returns True if offset layout rendered\n */\n hasOffset(): boolean {\n return this.hasRenderedOffset;\n }\n\n /**\n * Mark offset layout as rendered\n */\n markOffsetRendered(): void {\n this.hasRenderedOffset = true;\n }\n\n /**\n * Get pagination state\n *\n * @returns Pagination state or null\n */\n getPagination(): PaginationState | null {\n return this.pagination;\n }\n\n /**\n * Set pagination state\n *\n * @param pagination - Pagination state\n */\n setPagination(pagination: PaginationState | null): void {\n this.pagination = pagination;\n }\n}\n\n// ============================================================================\n// RENDERING FUNCTIONS\n// ============================================================================\n\n/**\n * Create overlay card for featured entry\n *\n * @param entry - News entry\n * @param state - State manager\n * @param isThemeDark - Dark theme flag\n * @returns Overlay card element model\n */\nconst createOverlayCard = (\n entry: NewsEntry,\n state: FeaturedFeedState,\n isThemeDark: boolean,\n): ElementModel => {\n const overlayCard = newsDisplayStrategy.mapEntryToCard(entry, {\n isOverlay: true,\n isThemeDark,\n imageConfig: () => createImageConfig(entry),\n });\n\n // Add custom overlay styles\n state.addStyles(`\n ${overlayCard.styles}\n\n .${card.overlay.imageClassRef} {\n height: inherit;\n }\n\n .${card.overlay.imageClassRef} .umd-asset-image-wrapper-scaled {\n position: absolute;\n }\n `);\n\n return overlayCard;\n};\n\n/**\n * Create block cards for entries\n *\n * @param entries - News entries\n * @param state - State manager\n * @param options - Card options\n * @returns Array of block card element models\n */\nconst createBlockCards = (\n entries: NewsEntry[],\n state: FeaturedFeedState,\n options: { isThemeDark: boolean; isTransparent: boolean },\n): ElementModel[] => {\n return entries.map((entry) => {\n const blockCard = newsDisplayStrategy.mapEntryToCard(entry, {\n isThemeDark: options.isThemeDark,\n isTransparent: options.isTransparent,\n isAligned: true,\n imageConfig: () => createImageConfig(entry),\n });\n\n state.addStyles(blockCard.styles);\n return blockCard;\n });\n};\n\n/**\n * Render featured layout (initial load only)\n *\n * @param container - Container element\n * @param entries - News entries\n * @param state - State manager\n * @param props - Feed props\n * @param loadMore - Load more callback\n * @returns Promise that resolves when rendering is complete\n */\nconst renderFeaturedLayout = async (\n container: HTMLElement,\n entries: NewsEntry[],\n state: FeaturedFeedState,\n props: FeaturedProps,\n loadMore: () => Promise<void>,\n): Promise<void> => {\n const {\n isThemeDark = false,\n isTransparent = false,\n isLayoutReversed = false,\n overwriteStickyPosition,\n isLazyLoad = false,\n } = props;\n\n // Fall back to standard grid if not enough entries or already rendered\n if (entries.length < 2 || state.hasOffset()) {\n return renderStandardGrid(container, entries, state, {\n isThemeDark,\n isTransparent,\n });\n }\n\n state.markOffsetRendered();\n\n // Create offset layout\n const offsetLayout = gridOffset({\n columns: 2,\n isLayoutReversed,\n stickyTopPosition: overwriteStickyPosition,\n });\n\n // Create grid for remaining items\n const gridLayout = gridGap({ columns: 2 });\n gridLayout.element.setAttribute('id', 'umd-featured-news-grid-container');\n\n // First item: overlay card\n const overlayCard = createOverlayCard(entries[0], state, isThemeDark);\n\n // Next 2 items: block cards\n const blockCards = createBlockCards(entries.slice(1, 3), state, {\n isThemeDark,\n isTransparent,\n });\n\n // Append block cards to grid\n blockCards.forEach((card) => {\n gridLayout.element.appendChild(card.element);\n });\n\n // Assemble offset layout\n offsetLayout.element.appendChild(overlayCard.element);\n offsetLayout.element.appendChild(gridLayout.element);\n container.appendChild(offsetLayout.element);\n\n state.addStyles(offsetLayout.styles);\n state.addStyles(gridLayout.styles);\n state.setOffset(3); // We've shown 3 items\n\n // Add pagination if needed\n if (isLazyLoad && state.getTotalEntries() > state.getOffset()) {\n const pagination = new PaginationState({\n totalEntries: state.getTotalEntries(),\n offset: state.getOffset(),\n isLazyLoad: true,\n callback: loadMore,\n });\n\n const paginationElement = pagination.render(container);\n if (paginationElement) state.addStyles(paginationElement.styles);\n state.setPagination(pagination);\n }\n\n // Announcer\n const message = createAnnouncerMessage(\n INITIAL_ITEMS,\n state.getTotalEntries(),\n isLazyLoad,\n );\n const announcer = new Announcer({ message });\n container.appendChild(announcer.getElement());\n\n await state.updateShadowStyles();\n};\n\n/**\n * Render standard grid (for lazy-loaded items or fallback)\n *\n * @param container - Container element\n * @param entries - News entries\n * @param state - State manager\n * @param options - Rendering options\n * @returns Promise that resolves when rendering is complete\n */\nconst renderStandardGrid = async (\n container: HTMLElement,\n entries: NewsEntry[],\n state: FeaturedFeedState,\n options: { isThemeDark: boolean; isTransparent: boolean },\n): Promise<void> => {\n let gridContainer = container.querySelector(\n '#umd-featured-news-grid-container',\n ) as HTMLElement;\n\n // Create grid if it doesn't exist\n if (!gridContainer) {\n const gridLayout = gridGap({ columns: 2 });\n gridLayout.element.setAttribute('id', 'umd-featured-news-grid-container');\n container.appendChild(gridLayout.element);\n state.addStyles(gridLayout.styles);\n gridContainer = gridLayout.element;\n }\n\n // Create and append block cards\n const blockCards = createBlockCards(entries, state, options);\n blockCards.forEach((card) => {\n gridContainer.appendChild(card.element);\n });\n\n state.incrementOffset(entries.length);\n\n await state.updateShadowStyles();\n};\n\n/**\n * Render error state\n *\n * @param container - Container element\n * @param message - Error message\n * @param state - State manager\n * @param isThemeDark - Dark theme flag\n * @returns Promise that resolves when rendering is complete\n */\nconst renderError = async (\n container: HTMLElement,\n message: string,\n state: FeaturedFeedState,\n isThemeDark: boolean,\n): Promise<void> => {\n const emptyState = new EmptyState({ message, isThemeDark });\n emptyState.render(container);\n state.addStyles(emptyState.styles);\n await state.updateShadowStyles();\n};\n\n// ============================================================================\n// MAIN EXPORT\n// ============================================================================\n\n/**\n * Create a featured news feed\n *\n * Displays news with featured layout: overlay card + grid.\n * Uses Element Builder pattern for clean construction.\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element, styles, and events\n *\n * @example\n * ```typescript\n * const feed = newsFeatured({\n * token: 'my-token',\n * isLazyLoad: true,\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With custom sticky position\n * const feed = newsFeatured({\n * token: 'my-token',\n * overwriteStickyPosition: 100,\n * isLayoutReversed: true,\n * });\n * ```\n */\nexport default (props: FeaturedProps): ElementModel => {\n const {\n token,\n categories,\n isUnion,\n isThemeDark = false,\n isLazyLoad = false,\n isTransparent = false,\n } = props;\n\n // Create container using ElementBuilder\n const containerBuilder = new ElementBuilder('div').withClassName(\n 'featured-news-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 FeaturedFeedState(loading.styles);\n\n /**\n * Load more articles (for lazy loading)\n */\n const loadMore = async (): Promise<void> => {\n // Remove pagination button\n const pagination = state.getPagination();\n if (pagination) {\n pagination.remove();\n }\n\n // Show loading indicator\n loading.show(container);\n\n // Load more items\n const fetchProps = createFetchProps(\n { token, categories, isUnion },\n state.getOffset(),\n );\n const variables = newsFetchStrategy.composeApiVariables(fetchProps);\n\n const entries = await newsFetchStrategy.fetchEntries(variables);\n\n // Hide loading indicator\n loading.hide();\n\n if (!entries || entries.length === 0) return;\n\n await renderStandardGrid(container, entries, state, {\n isThemeDark,\n isTransparent,\n });\n\n // Update pagination state\n if (pagination) {\n pagination.updateState(state.getOffset(), state.getTotalEntries());\n if (pagination.styles) state.addStyles(pagination.styles);\n await state.updateShadowStyles();\n }\n\n // Update announcer\n const existingAnnouncer = container.querySelector(\n '[role=\"status\"]',\n ) as HTMLElement;\n if (existingAnnouncer) {\n existingAnnouncer.textContent = createAnnouncerMessage(\n state.getOffset(),\n state.getTotalEntries(),\n isLazyLoad,\n );\n }\n\n // Dispatch update event\n eventUtilities.dispatch(\n container,\n eventUtilities.eventNames.FEED_LOADED_MORE,\n {\n items: entries,\n count: entries.length,\n total: state.getTotalEntries(),\n },\n );\n };\n\n /**\n * Initialize feed\n */\n const initialize = async (): Promise<void> => {\n loading.show(container);\n\n // Fetch initial items\n const fetchProps = createFetchProps({ token, categories, isUnion }, 0);\n const variables = newsFetchStrategy.composeApiVariables(fetchProps);\n\n const [count, entries] = await Promise.all([\n newsFetchStrategy.fetchCount(variables),\n newsFetchStrategy.fetchEntries(variables),\n ]);\n\n loading.hide();\n\n // Handle no results\n if (!entries || entries.length === 0) {\n await renderError(\n container,\n 'No news articles found',\n state,\n isThemeDark,\n );\n return;\n }\n\n state.setTotalEntries(count || entries.length);\n\n // Dispatch loaded event\n eventUtilities.dispatch(container, eventUtilities.eventNames.FEED_LOADED, {\n items: entries,\n count: entries.length,\n total: state.getTotalEntries(),\n });\n\n // Render featured layout\n await renderFeaturedLayout(container, entries, state, props, loadMore);\n };\n\n // Start initialization\n initialize();\n\n // Build and return element model\n const model = containerBuilder.build();\n\n // Custom event: allow external control of sticky position\n const setPosition = (position: number) => {\n const overlayElement = container.querySelector(\n `.${card.overlay.imageClassRef}`,\n ) as HTMLElement;\n if (overlayElement) overlayElement.style.top = `${position}px`;\n };\n\n return {\n element: model.element,\n get styles() {\n return state.getStyles();\n },\n events: {\n callback: state.getShadowCallback(),\n setPosition, // Custom event for sticky position control\n },\n };\n};\n"],"names":["shadow","styleUtilities.setShadowStyles","pagination","newsDisplayStrategy","card","gridOffset","gridGap","PaginationState","announcer","Announcer","EmptyState","ElementBuilder","loading","LoadingState","newsFetchStrategy","eventUtilities.dispatch","eventUtilities.eventNames"],"mappings":"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"}
|