@universityofmaryland/web-feeds-library 1.2.6 → 1.3.0-beta.1
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 +4 -4
- package/dist/academic.js.map +1 -1
- package/dist/events.d.ts +1 -1
- package/dist/events.js +10 -10
- package/dist/events.js.map +1 -1
- package/dist/experts.d.ts +2 -0
- package/dist/experts.js +9 -0
- package/dist/experts.js.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 +116 -0
- package/dist/factory/core/createBaseFeed.js.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 +92 -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 +169 -0
- package/dist/factory/helpers/displayHandler.js.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/fetchHandler.d.ts +22 -0
- package/dist/factory/helpers/fetchHandler.d.ts.map +1 -0
- package/dist/factory/helpers/fetchHandler.js +123 -0
- package/dist/factory/helpers/fetchHandler.js.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 +2 -0
- package/dist/feeds/academic/index.d.ts.map +1 -0
- package/dist/feeds/academic/slider.d.ts +4 -0
- package/dist/feeds/academic/slider.d.ts.map +1 -0
- package/dist/feeds/academic/slider.js +11 -0
- package/dist/feeds/academic/slider.js.map +1 -0
- package/dist/feeds/events/_types.d.ts.map +1 -0
- package/dist/feeds/events/grid.d.ts +4 -0
- package/dist/feeds/events/grid.d.ts.map +1 -0
- package/dist/feeds/events/grid.js +32 -0
- package/dist/feeds/events/grid.js.map +1 -0
- package/dist/feeds/events/grouped.d.ts +4 -0
- package/dist/feeds/events/grouped.d.ts.map +1 -0
- package/dist/feeds/events/grouped.js +337 -0
- package/dist/feeds/events/grouped.js.map +1 -0
- package/dist/feeds/events/index.d.ts +5 -0
- package/dist/feeds/events/index.d.ts.map +1 -0
- package/dist/feeds/events/list.d.ts +4 -0
- package/dist/feeds/events/list.d.ts.map +1 -0
- package/dist/feeds/events/list.js +33 -0
- package/dist/feeds/events/list.js.map +1 -0
- package/dist/feeds/events/slider.d.ts +4 -0
- package/dist/feeds/events/slider.d.ts.map +1 -0
- package/dist/feeds/events/slider.js +11 -0
- package/dist/feeds/events/slider.js.map +1 -0
- package/dist/feeds/experts/_types.d.ts +23 -0
- package/dist/feeds/experts/_types.d.ts.map +1 -0
- package/dist/feeds/experts/bio.d.ts +4 -0
- package/dist/feeds/experts/bio.d.ts.map +1 -0
- package/dist/feeds/experts/bio.js +147 -0
- package/dist/feeds/experts/bio.js.map +1 -0
- package/dist/feeds/experts/grid.d.ts +4 -0
- package/dist/feeds/experts/grid.d.ts.map +1 -0
- package/dist/feeds/experts/grid.js +37 -0
- package/dist/feeds/experts/grid.js.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 +4 -0
- package/dist/feeds/experts/list.d.ts.map +1 -0
- package/dist/feeds/experts/list.js +26 -0
- package/dist/feeds/experts/list.js.map +1 -0
- package/dist/feeds/news/_types.d.ts.map +1 -0
- package/dist/feeds/news/featured.d.ts +4 -0
- package/dist/feeds/news/featured.d.ts.map +1 -0
- package/dist/feeds/news/featured.js +379 -0
- package/dist/feeds/news/featured.js.map +1 -0
- package/dist/feeds/news/grid.d.ts +4 -0
- package/dist/feeds/news/grid.d.ts.map +1 -0
- package/dist/feeds/news/grid.js +37 -0
- package/dist/feeds/news/grid.js.map +1 -0
- package/dist/feeds/news/index.d.ts +4 -0
- package/dist/feeds/news/index.d.ts.map +1 -0
- package/dist/feeds/news/list.d.ts +4 -0
- package/dist/feeds/news/list.d.ts.map +1 -0
- package/dist/feeds/news/list.js +34 -0
- package/dist/feeds/news/list.js.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/events/index.mjs → helpers/events/index.js} +3 -1
- package/dist/helpers/events/index.js.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/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 +16 -0
- package/dist/helpers/styles/shadow.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -8
- package/dist/index.js.map +1 -1
- package/dist/news.d.ts +1 -1
- package/dist/news.js +8 -8
- package/dist/news.js.map +1 -1
- package/dist/states/_types.d.ts +36 -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/announcer.d.ts +14 -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/empty.d.ts +15 -0
- package/dist/states/empty.d.ts.map +1 -0
- package/dist/states/empty.js +104 -0
- package/dist/states/empty.js.map +1 -0
- package/dist/states/index.d.ts +6 -0
- package/dist/states/index.d.ts.map +1 -0
- package/dist/states/loading.d.ts +15 -0
- package/dist/states/loading.d.ts.map +1 -0
- package/dist/{macros/loader.mjs → states/loading.js} +71 -28
- package/dist/states/loading.js.map +1 -0
- package/dist/states/pagination.d.ts +17 -0
- package/dist/states/pagination.d.ts.map +1 -0
- package/dist/states/pagination.js +102 -0
- package/dist/states/pagination.js.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/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/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/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/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/experts.d.ts +4 -0
- package/dist/strategies/fetch/experts.d.ts.map +1 -0
- package/dist/strategies/fetch/experts.js +194 -0
- package/dist/strategies/fetch/experts.js.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 +104 -0
- package/dist/strategies/fetch/graphql.js.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/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/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/{macros → widgets}/slider.d.ts +1 -2
- package/dist/widgets/slider.d.ts.map +1 -0
- package/dist/{macros/slider.mjs → widgets/slider.js} +10 -10
- package/dist/widgets/slider.js.map +1 -0
- package/package.json +18 -12
- package/dist/academic.mjs +0 -5
- package/dist/academic.mjs.map +0 -1
- package/dist/composite/academic/_types.d.ts.map +0 -1
- package/dist/composite/academic/index.d.ts +0 -2
- package/dist/composite/academic/index.d.ts.map +0 -1
- package/dist/composite/academic/slider.d.ts +0 -5
- package/dist/composite/academic/slider.d.ts.map +0 -1
- package/dist/composite/academic/slider.js +0 -36
- package/dist/composite/academic/slider.js.map +0 -1
- package/dist/composite/academic/slider.mjs +0 -37
- 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 -44
- package/dist/composite/events/common/data.d.ts.map +0 -1
- package/dist/composite/events/common/data.js +0 -54
- package/dist/composite/events/common/data.js.map +0 -1
- package/dist/composite/events/common/data.mjs +0 -54
- 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 -119
- package/dist/composite/events/common/fetch.js.map +0 -1
- package/dist/composite/events/common/fetch.mjs +0 -119
- 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 +0 -5
- package/dist/composite/events/grid.d.ts.map +0 -1
- package/dist/composite/events/grid.js +0 -92
- package/dist/composite/events/grid.js.map +0 -1
- package/dist/composite/events/grid.mjs +0 -93
- package/dist/composite/events/grid.mjs.map +0 -1
- package/dist/composite/events/grouped.d.ts +0 -5
- package/dist/composite/events/grouped.d.ts.map +0 -1
- package/dist/composite/events/grouped.js +0 -290
- package/dist/composite/events/grouped.js.map +0 -1
- package/dist/composite/events/grouped.mjs +0 -274
- package/dist/composite/events/grouped.mjs.map +0 -1
- package/dist/composite/events/index.d.ts +0 -5
- package/dist/composite/events/index.d.ts.map +0 -1
- package/dist/composite/events/list.d.ts +0 -5
- package/dist/composite/events/list.d.ts.map +0 -1
- package/dist/composite/events/list.js +0 -92
- package/dist/composite/events/list.js.map +0 -1
- package/dist/composite/events/list.mjs +0 -93
- package/dist/composite/events/list.mjs.map +0 -1
- package/dist/composite/events/slider.d.ts +0 -5
- package/dist/composite/events/slider.d.ts.map +0 -1
- package/dist/composite/events/slider.js +0 -37
- package/dist/composite/events/slider.js.map +0 -1
- package/dist/composite/events/slider.mjs +0 -38
- 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 -63
- package/dist/composite/news/common/data.js.map +0 -1
- package/dist/composite/news/common/data.mjs +0 -63
- 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 -89
- package/dist/composite/news/common/fetch.js.map +0 -1
- package/dist/composite/news/common/fetch.mjs +0 -89
- 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 +0 -5
- package/dist/composite/news/featured.d.ts.map +0 -1
- package/dist/composite/news/featured.js +0 -184
- package/dist/composite/news/featured.js.map +0 -1
- package/dist/composite/news/featured.mjs +0 -185
- package/dist/composite/news/featured.mjs.map +0 -1
- package/dist/composite/news/grid.d.ts +0 -5
- package/dist/composite/news/grid.d.ts.map +0 -1
- package/dist/composite/news/grid.js +0 -100
- package/dist/composite/news/grid.js.map +0 -1
- package/dist/composite/news/grid.mjs +0 -101
- package/dist/composite/news/grid.mjs.map +0 -1
- package/dist/composite/news/index.d.ts +0 -4
- package/dist/composite/news/index.d.ts.map +0 -1
- package/dist/composite/news/list.d.ts +0 -5
- package/dist/composite/news/list.d.ts.map +0 -1
- package/dist/composite/news/list.js +0 -87
- package/dist/composite/news/list.js.map +0 -1
- package/dist/composite/news/list.mjs +0 -88
- 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 -15
- package/dist/elements/layout.d.ts.map +0 -1
- package/dist/elements/layout.js +0 -113
- package/dist/elements/layout.js.map +0 -1
- package/dist/elements/layout.mjs +0 -96
- 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/events.mjs +0 -11
- package/dist/events.mjs.map +0 -1
- package/dist/index.mjs +0 -9
- package/dist/index.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 -16
- package/dist/macros/lazy-load.d.ts.map +0 -1
- package/dist/macros/lazy-load.js +0 -54
- package/dist/macros/lazy-load.js.map +0 -1
- package/dist/macros/lazy-load.mjs +0 -38
- package/dist/macros/lazy-load.mjs.map +0 -1
- package/dist/macros/loader.d.ts +0 -15
- package/dist/macros/loader.d.ts.map +0 -1
- package/dist/macros/loader.js +0 -128
- package/dist/macros/loader.js.map +0 -1
- package/dist/macros/loader.mjs.map +0 -1
- package/dist/macros/no-results.d.ts +0 -12
- package/dist/macros/no-results.d.ts.map +0 -1
- package/dist/macros/no-results.js +0 -66
- package/dist/macros/no-results.js.map +0 -1
- package/dist/macros/no-results.mjs +0 -50
- package/dist/macros/no-results.mjs.map +0 -1
- package/dist/macros/slider.d.ts.map +0 -1
- package/dist/macros/slider.js +0 -103
- package/dist/macros/slider.js.map +0 -1
- package/dist/macros/slider.mjs.map +0 -1
- package/dist/news.mjs +0 -9
- package/dist/news.mjs.map +0 -1
- package/dist/utilities/events/index.d.ts.map +0 -1
- package/dist/utilities/events/index.js +0 -19
- 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}/events/_types.d.ts +0 -0
- /package/dist/{composite → feeds}/news/_types.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/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# University of Maryland Feeds Library
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@universityofmaryland/web-feeds-library)
|
|
4
4
|
|
|
5
5
|
Dynamic content feed components for displaying University of Maryland news, events, and academic information with automatic updates, caching, and brand-compliant styling.
|
|
6
6
|
|
package/dist/academic.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './feeds/academic/index'
|
|
2
2
|
export {}
|
package/dist/academic.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { academicSlider } from "./feeds/academic/slider.js";
|
|
2
|
+
export {
|
|
3
|
+
academicSlider as slider
|
|
4
|
+
};
|
|
5
5
|
//# sourceMappingURL=academic.js.map
|
package/dist/academic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"academic.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"academic.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/events.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './feeds/events/index'
|
|
2
2
|
export {}
|
package/dist/events.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { eventsGrid } from "./feeds/events/grid.js";
|
|
2
|
+
import { eventsList } from "./feeds/events/list.js";
|
|
3
|
+
import { eventsSlider } from "./feeds/events/slider.js";
|
|
4
|
+
import { eventsGrouped } from "./feeds/events/grouped.js";
|
|
5
|
+
export {
|
|
6
|
+
eventsGrid as grid,
|
|
7
|
+
eventsGrouped as grouped,
|
|
8
|
+
eventsList as list,
|
|
9
|
+
eventsSlider as slider
|
|
10
|
+
};
|
|
11
11
|
//# sourceMappingURL=events.js.map
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/dist/experts.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { expertsGrid } from "./feeds/experts/grid.js";
|
|
2
|
+
import { expertsList } from "./feeds/experts/list.js";
|
|
3
|
+
import { expertsBio } from "./feeds/experts/bio.js";
|
|
4
|
+
export {
|
|
5
|
+
expertsBio as bio,
|
|
6
|
+
expertsGrid as grid,
|
|
7
|
+
expertsList as list
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=experts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experts.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createBaseFeed.d.ts","sourceRoot":"","sources":["../../../source/factory/core/createBaseFeed.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAsB,MAAM,SAAS,CAAC;AAyChF,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EACpD,MAAM,EAAE,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,GACxC,iBAAiB,CAoInB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { LoadingState } from "../../states/loading.js";
|
|
2
|
+
import "@universityofmaryland/web-builder-library";
|
|
3
|
+
import "@universityofmaryland/web-elements-library";
|
|
4
|
+
import "@universityofmaryland/web-styles-library";
|
|
5
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
6
|
+
import { createFeedHelpers } from "../helpers/feedHelpers.js";
|
|
7
|
+
import { createDisplayHandlers } from "../helpers/displayHandler.js";
|
|
8
|
+
import { createFetchHandlers } from "../helpers/fetchHandler.js";
|
|
9
|
+
function createBaseFeed(config) {
|
|
10
|
+
const {
|
|
11
|
+
token,
|
|
12
|
+
isThemeDark = false,
|
|
13
|
+
isTransparent = false,
|
|
14
|
+
isOverlay = false,
|
|
15
|
+
isAligned = false,
|
|
16
|
+
isMediaTrained = null,
|
|
17
|
+
cardType,
|
|
18
|
+
numberOfColumnsToShow = 1,
|
|
19
|
+
numberOfRowsToStart,
|
|
20
|
+
isLazyLoad = false,
|
|
21
|
+
enableCategoryFallback = false,
|
|
22
|
+
categories,
|
|
23
|
+
entriesToRemove,
|
|
24
|
+
fetchStrategy,
|
|
25
|
+
displayStrategy,
|
|
26
|
+
layoutStrategy,
|
|
27
|
+
noResultsConfig,
|
|
28
|
+
imageConfig
|
|
29
|
+
} = config;
|
|
30
|
+
const container = document.createElement("div");
|
|
31
|
+
const loading = new LoadingState({ isThemeDark });
|
|
32
|
+
let styles = loading.styles;
|
|
33
|
+
const helpers = createFeedHelpers({
|
|
34
|
+
container,
|
|
35
|
+
initialStyles: styles
|
|
36
|
+
});
|
|
37
|
+
const originalSetStyles = helpers.setStyles;
|
|
38
|
+
helpers.setStyles = (additionalStyles) => {
|
|
39
|
+
styles += additionalStyles;
|
|
40
|
+
originalSetStyles(additionalStyles);
|
|
41
|
+
};
|
|
42
|
+
const shadowRootCallback = (shadow) => {
|
|
43
|
+
helpers.setShadowRoot(shadow);
|
|
44
|
+
};
|
|
45
|
+
const cardMappingOptions = {
|
|
46
|
+
isThemeDark,
|
|
47
|
+
isTransparent,
|
|
48
|
+
isOverlay,
|
|
49
|
+
isAligned,
|
|
50
|
+
imageConfig,
|
|
51
|
+
...cardType && { cardType }
|
|
52
|
+
};
|
|
53
|
+
const layoutElement = layoutStrategy.create({
|
|
54
|
+
columns: numberOfColumnsToShow,
|
|
55
|
+
isThemeDark
|
|
56
|
+
});
|
|
57
|
+
helpers.setStyles(layoutElement.styles);
|
|
58
|
+
const baseProps = {
|
|
59
|
+
token,
|
|
60
|
+
categories,
|
|
61
|
+
entriesToRemove,
|
|
62
|
+
numberOfColumnsToShow,
|
|
63
|
+
numberOfRowsToStart,
|
|
64
|
+
isLazyLoad,
|
|
65
|
+
isMediaTrained,
|
|
66
|
+
getOffset: helpers.getOffset
|
|
67
|
+
};
|
|
68
|
+
const lazyLoadCallbackRef = {
|
|
69
|
+
current: void 0
|
|
70
|
+
};
|
|
71
|
+
const displayHandlers = createDisplayHandlers({
|
|
72
|
+
displayStrategy,
|
|
73
|
+
layoutStrategy,
|
|
74
|
+
helpers,
|
|
75
|
+
cardMappingOptions,
|
|
76
|
+
isLazyLoad,
|
|
77
|
+
numberOfColumnsToShow,
|
|
78
|
+
numberOfRowsToStart,
|
|
79
|
+
noResultsConfig: {
|
|
80
|
+
...noResultsConfig,
|
|
81
|
+
isThemeDark
|
|
82
|
+
// Ensure theme is passed to EmptyState
|
|
83
|
+
},
|
|
84
|
+
// Pass a function that calls the current callback
|
|
85
|
+
lazyLoadCallback: isLazyLoad ? async () => {
|
|
86
|
+
if (lazyLoadCallbackRef.current) {
|
|
87
|
+
await lazyLoadCallbackRef.current();
|
|
88
|
+
}
|
|
89
|
+
} : void 0
|
|
90
|
+
});
|
|
91
|
+
const fetchHandlers = createFetchHandlers({
|
|
92
|
+
fetchStrategy,
|
|
93
|
+
helpers,
|
|
94
|
+
baseProps,
|
|
95
|
+
displayHandlers,
|
|
96
|
+
layoutElement,
|
|
97
|
+
isThemeDark,
|
|
98
|
+
enableCategoryFallback
|
|
99
|
+
});
|
|
100
|
+
lazyLoadCallbackRef.current = fetchHandlers.loadMore;
|
|
101
|
+
container.appendChild(loading.element);
|
|
102
|
+
fetchHandlers.start();
|
|
103
|
+
return {
|
|
104
|
+
element: container,
|
|
105
|
+
get styles() {
|
|
106
|
+
return styles;
|
|
107
|
+
},
|
|
108
|
+
events: {
|
|
109
|
+
callback: shadowRootCallback
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export {
|
|
114
|
+
createBaseFeed
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=createBaseFeed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createBaseFeed.js","sources":["../../../source/factory/core/createBaseFeed.ts"],"sourcesContent":["/**\n * Base Feed Factory\n *\n * Creates a complete feed with initialization, data fetching, and display logic.\n * Uses strategy pattern to allow customization of fetch, display, and layout.\n *\n * @module factory/core/createBaseFeed\n */\n\nimport { LoadingState } from '../../states';\nimport {\n createFeedHelpers,\n createDisplayHandlers,\n createFetchHandlers,\n} from '../helpers';\nimport { BaseFeedConfig, FeedFactoryResult, CardMappingOptions } from './types';\n\n/**\n * Create a base feed using the factory pattern\n *\n * This factory eliminates ~70% of boilerplate code by handling:\n * - Feed initialization (container, loading, state)\n * - Strategy composition (fetch, display, layout)\n * - Lifecycle management (start, load more, no results)\n * - Shadow DOM support\n * - Event system\n *\n * @template TData - The type of entry data from the API\n * @template TVariables - The type of API variables\n *\n * @param config - Configuration for the feed\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * // Simple grid feed\n * const eventsFeed = createBaseFeed({\n * token: 'my-token',\n * isThemeDark: false,\n * numberOfColumnsToShow: 3,\n * numberOfRowsToStart: 2,\n * isLazyLoad: true,\n * fetchStrategy: eventsFetchStrategy,\n * displayStrategy: eventsDisplayStrategy,\n * layoutStrategy: gridGapLayout,\n * imageConfig: (entry) => ({\n * imageUrl: entry.image[0].url,\n * altText: entry.image[0].altText,\n * linkUrl: entry.url,\n * }),\n * });\n *\n * // Use the feed\n * document.body.appendChild(eventsFeed.element);\n * ```\n */\nexport function createBaseFeed<TData, TVariables = any>(\n config: BaseFeedConfig<TData, TVariables>,\n): FeedFactoryResult {\n const {\n token,\n isThemeDark = false,\n isTransparent = false,\n isOverlay = false,\n isAligned = false,\n isMediaTrained = null,\n cardType,\n numberOfColumnsToShow = 1,\n numberOfRowsToStart,\n isLazyLoad = false,\n enableCategoryFallback = false,\n categories,\n entriesToRemove,\n fetchStrategy,\n displayStrategy,\n layoutStrategy,\n noResultsConfig,\n imageConfig,\n } = config;\n\n const container = document.createElement('div');\n const loading = new LoadingState({ isThemeDark });\n let styles = loading.styles;\n\n // Create helpers for state management\n const helpers = createFeedHelpers({\n container,\n initialStyles: styles,\n });\n\n // Override setStyles to also update the local styles variable\n const originalSetStyles = helpers.setStyles;\n helpers.setStyles = (additionalStyles: string) => {\n styles += additionalStyles;\n originalSetStyles(additionalStyles);\n };\n\n // Shadow root support\n let shadowRoot: ShadowRoot | null = null;\n const shadowRootCallback = (shadow: ShadowRoot) => {\n shadowRoot = shadow;\n\n helpers.setShadowRoot(shadow);\n };\n\n const cardMappingOptions: CardMappingOptions = {\n isThemeDark,\n isTransparent,\n isOverlay,\n isAligned,\n imageConfig,\n ...(cardType && { cardType }),\n };\n\n const layoutElement = layoutStrategy.create({\n columns: numberOfColumnsToShow as 2 | 3 | 4,\n isThemeDark,\n });\n helpers.setStyles(layoutElement.styles);\n\n const baseProps = {\n token,\n categories,\n entriesToRemove,\n numberOfColumnsToShow,\n numberOfRowsToStart,\n isLazyLoad,\n isMediaTrained,\n getOffset: helpers.getOffset,\n };\n\n // Create a mutable reference for lazy load callback\n // This allows us to set it after fetchHandlers are created\n const lazyLoadCallbackRef = {\n current: undefined as (() => Promise<void>) | undefined,\n };\n\n // Create display handlers with callback reference\n const displayHandlers = createDisplayHandlers({\n displayStrategy,\n layoutStrategy,\n helpers,\n cardMappingOptions,\n isLazyLoad,\n numberOfColumnsToShow,\n numberOfRowsToStart,\n noResultsConfig: {\n ...noResultsConfig,\n isThemeDark, // Ensure theme is passed to EmptyState\n },\n // Pass a function that calls the current callback\n lazyLoadCallback: isLazyLoad\n ? async () => {\n if (lazyLoadCallbackRef.current) {\n await lazyLoadCallbackRef.current();\n }\n }\n : undefined,\n });\n\n // Create fetch handlers\n const fetchHandlers = createFetchHandlers({\n fetchStrategy,\n helpers,\n baseProps,\n displayHandlers,\n layoutElement,\n isThemeDark,\n enableCategoryFallback,\n });\n\n // Set the lazy load callback reference now that fetch handlers exist\n lazyLoadCallbackRef.current = fetchHandlers.loadMore;\n\n // Append loading indicator to container\n container.appendChild(loading.element);\n\n // Start fetching data\n fetchHandlers.start();\n\n // Return feed with getter for styles to ensure dynamic access\n return {\n element: container,\n get styles() {\n return styles;\n },\n events: {\n callback: shadowRootCallback,\n },\n };\n}\n"],"names":[],"mappings":";;;;;;;;AAwDO,SAAS,eACd,QACmB;AACnB,QAAM;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB;AAAA,IACA,wBAAwB;AAAA,IACxB;AAAA,IACA,aAAa;AAAA,IACb,yBAAyB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,UAAU,IAAI,aAAa,EAAE,aAAa;AAChD,MAAI,SAAS,QAAQ;AAGrB,QAAM,UAAU,kBAAkB;AAAA,IAChC;AAAA,IACA,eAAe;AAAA,EAAA,CAChB;AAGD,QAAM,oBAAoB,QAAQ;AAClC,UAAQ,YAAY,CAAC,qBAA6B;AAChD,cAAU;AACV,sBAAkB,gBAAgB;AAAA,EACpC;AAIA,QAAM,qBAAqB,CAAC,WAAuB;AAGjD,YAAQ,cAAc,MAAM;AAAA,EAC9B;AAEA,QAAM,qBAAyC;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,YAAY,EAAE,SAAA;AAAA,EAAS;AAG7B,QAAM,gBAAgB,eAAe,OAAO;AAAA,IAC1C,SAAS;AAAA,IACT;AAAA,EAAA,CACD;AACD,UAAQ,UAAU,cAAc,MAAM;AAEtC,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,QAAQ;AAAA,EAAA;AAKrB,QAAM,sBAAsB;AAAA,IAC1B,SAAS;AAAA,EAAA;AAIX,QAAM,kBAAkB,sBAAsB;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,MACf,GAAG;AAAA,MACH;AAAA;AAAA,IAAA;AAAA;AAAA,IAGF,kBAAkB,aACd,YAAY;AACV,UAAI,oBAAoB,SAAS;AAC/B,cAAM,oBAAoB,QAAA;AAAA,MAC5B;AAAA,IACF,IACA;AAAA,EAAA,CACL;AAGD,QAAM,gBAAgB,oBAAoB;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAGD,sBAAoB,UAAU,cAAc;AAG5C,YAAU,YAAY,QAAQ,OAAO;AAGrC,gBAAc,MAAA;AAGd,SAAO;AAAA,IACL,SAAS;AAAA,IACT,IAAI,SAAS;AACX,aAAO;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/factory/core/index.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { ElementModel } from '../../_types';
|
|
2
|
+
export interface FeedHelpers {
|
|
3
|
+
setTotalEntries: (count: number) => void;
|
|
4
|
+
setOffset: (count: number) => void;
|
|
5
|
+
setStyles: (styles: string) => void;
|
|
6
|
+
setShadowRoot: (shadowRoot: ShadowRoot) => void;
|
|
7
|
+
getContainer: () => HTMLElement;
|
|
8
|
+
getOffset: () => number;
|
|
9
|
+
getTotalEntries: () => number;
|
|
10
|
+
getStyles: () => string;
|
|
11
|
+
getShadowRoot: () => ShadowRoot | null;
|
|
12
|
+
}
|
|
13
|
+
export interface FetchStrategy<TData, TVariables = any> {
|
|
14
|
+
fetchCount: (variables: TVariables) => Promise<number | null>;
|
|
15
|
+
fetchEntries: (variables: TVariables) => Promise<TData[] | null>;
|
|
16
|
+
composeApiVariables: (props: any) => TVariables;
|
|
17
|
+
fetchCategoryNames?: (categoryIds: string[], token?: string) => Promise<string[] | null>;
|
|
18
|
+
}
|
|
19
|
+
export interface CardMappingOptions {
|
|
20
|
+
isThemeDark?: boolean;
|
|
21
|
+
isTransparent?: boolean;
|
|
22
|
+
isFeatured?: boolean;
|
|
23
|
+
isOverlay?: boolean;
|
|
24
|
+
isAligned?: boolean;
|
|
25
|
+
cardType?: 'block' | 'list' | 'tabular' | 'overlay';
|
|
26
|
+
imageConfig?: (entry: any) => ImageConfig;
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
}
|
|
29
|
+
export interface ImageConfig {
|
|
30
|
+
imageUrl: string;
|
|
31
|
+
altText: string;
|
|
32
|
+
linkUrl?: string;
|
|
33
|
+
linkLabel?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DisplayStrategy<TData> {
|
|
36
|
+
mapEntryToCard: (entry: TData, options: CardMappingOptions) => ElementModel;
|
|
37
|
+
layoutType: 'grid' | 'list' | 'stacked' | 'custom';
|
|
38
|
+
}
|
|
39
|
+
export interface LayoutOptions {
|
|
40
|
+
columns?: 2 | 3 | 4;
|
|
41
|
+
isThemeDark?: boolean;
|
|
42
|
+
gap?: string;
|
|
43
|
+
showDividers?: boolean;
|
|
44
|
+
[key: string]: any;
|
|
45
|
+
}
|
|
46
|
+
export interface LayoutStrategy {
|
|
47
|
+
create: (options: LayoutOptions) => ElementModel;
|
|
48
|
+
getId: () => string;
|
|
49
|
+
}
|
|
50
|
+
export interface NoResultsConfig {
|
|
51
|
+
message?: string;
|
|
52
|
+
linkUrl?: string;
|
|
53
|
+
linkText?: string;
|
|
54
|
+
isThemeDark?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface BaseFeedConfig<TData, TVariables = any> {
|
|
57
|
+
token: string | null;
|
|
58
|
+
isThemeDark?: boolean;
|
|
59
|
+
isTransparent?: boolean;
|
|
60
|
+
isOverlay?: boolean;
|
|
61
|
+
isAligned?: boolean;
|
|
62
|
+
cardType?: 'block' | 'list' | 'tabular' | 'overlay';
|
|
63
|
+
numberOfColumnsToShow?: number;
|
|
64
|
+
numberOfRowsToStart: number;
|
|
65
|
+
isLazyLoad?: boolean;
|
|
66
|
+
enableCategoryFallback?: boolean;
|
|
67
|
+
isMediaTrained?: boolean | null;
|
|
68
|
+
categories?: string[];
|
|
69
|
+
entriesToRemove?: Array<string | number>;
|
|
70
|
+
fetchStrategy: FetchStrategy<TData, TVariables>;
|
|
71
|
+
displayStrategy: DisplayStrategy<TData>;
|
|
72
|
+
layoutStrategy: LayoutStrategy;
|
|
73
|
+
noResultsConfig?: NoResultsConfig;
|
|
74
|
+
imageConfig?: (entry: TData) => ImageConfig;
|
|
75
|
+
getOffset?: () => number;
|
|
76
|
+
}
|
|
77
|
+
export interface DisplayResultsProps<TData> {
|
|
78
|
+
feedData: TData[];
|
|
79
|
+
}
|
|
80
|
+
export interface FeedLifecycle<TData> {
|
|
81
|
+
displayResultStart: (props: any) => void;
|
|
82
|
+
displayResults: (props: DisplayResultsProps<TData>) => Promise<void>;
|
|
83
|
+
displayNoResults: (props: any) => void;
|
|
84
|
+
}
|
|
85
|
+
export interface FeedEvents {
|
|
86
|
+
callback?: (shadowRoot: ShadowRoot) => void;
|
|
87
|
+
[key: string]: any;
|
|
88
|
+
}
|
|
89
|
+
export interface FeedFactoryResult extends ElementModel {
|
|
90
|
+
events?: FeedEvents;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/factory/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DisplayStrategy, FeedHelpers, LayoutStrategy, CardMappingOptions, DisplayResultsProps, NoResultsConfig } from '../core/types';
|
|
2
|
+
import { ElementModel } from '../../_types';
|
|
3
|
+
interface DisplayHandlerConfig<TData> {
|
|
4
|
+
displayStrategy: DisplayStrategy<TData>;
|
|
5
|
+
layoutStrategy: LayoutStrategy;
|
|
6
|
+
helpers: FeedHelpers;
|
|
7
|
+
cardMappingOptions: CardMappingOptions;
|
|
8
|
+
isLazyLoad?: boolean;
|
|
9
|
+
numberOfColumnsToShow?: number;
|
|
10
|
+
numberOfRowsToStart: number;
|
|
11
|
+
noResultsConfig?: NoResultsConfig;
|
|
12
|
+
lazyLoadCallback?: () => Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare function setShadowStyles({ shadowRoot, styles, }: {
|
|
15
|
+
shadowRoot: ShadowRoot;
|
|
16
|
+
styles: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
export declare function createDisplayHandlers<TData>(config: DisplayHandlerConfig<TData>): {
|
|
19
|
+
displayNoResults: (props: any) => void;
|
|
20
|
+
displayResults: (props: DisplayResultsProps<TData>) => Promise<void>;
|
|
21
|
+
displayResultStart: (props: {
|
|
22
|
+
feedData: TData[];
|
|
23
|
+
layoutElement: ElementModel;
|
|
24
|
+
isFallback?: boolean;
|
|
25
|
+
categoryNames?: string[];
|
|
26
|
+
}) => Promise<void>;
|
|
27
|
+
};
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=displayHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayHandler.d.ts","sourceRoot":"","sources":["../../../source/factory/helpers/displayHandler.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK5C,UAAU,oBAAoB,CAAC,KAAK;IAElC,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAExC,cAAc,EAAE,cAAc,CAAC;IAE/B,OAAO,EAAE,WAAW,CAAC;IAErB,kBAAkB,EAAE,kBAAkB,CAAC;IAEvC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,mBAAmB,EAAE,MAAM,CAAC;IAE5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAKD,wBAAsB,eAAe,CAAC,EACpC,UAAU,EACV,MAAM,GACP,EAAE;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhB;AAsED,wBAAgB,qBAAqB,CAAC,KAAK,EACzC,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC;8BAiBF,GAAG;4BAwC3B,mBAAmB,CAAC,KAAK,CAAC,KAChC,OAAO,CAAC,IAAI,CAAC;gCAyDyB;QACvC,QAAQ,EAAE,KAAK,EAAE,CAAC;QAClB,aAAa,EAAE,YAAY,CAAC;QAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,KAAG,OAAO,CAAC,IAAI,CAAC;EAuDlB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { ElementBuilder } from "@universityofmaryland/web-builder-library";
|
|
2
|
+
import * as Styles from "@universityofmaryland/web-styles-library";
|
|
3
|
+
import * as typography from "@universityofmaryland/web-styles-library/typography";
|
|
4
|
+
import { theme } from "@universityofmaryland/web-utilities-library/theme";
|
|
5
|
+
import { EmptyState } from "../../states/empty.js";
|
|
6
|
+
import { PaginationState } from "../../states/pagination.js";
|
|
7
|
+
import { Announcer } from "../../states/announcer.js";
|
|
8
|
+
import { dispatch, eventNames } from "../../helpers/events/index.js";
|
|
9
|
+
async function setShadowStyles({
|
|
10
|
+
shadowRoot,
|
|
11
|
+
styles
|
|
12
|
+
}) {
|
|
13
|
+
const styleElement = document.createElement("style");
|
|
14
|
+
const optimizedCss = await Styles.utilities.transform.css.removeDuplicates(
|
|
15
|
+
styles
|
|
16
|
+
);
|
|
17
|
+
styleElement.textContent = optimizedCss;
|
|
18
|
+
shadowRoot.appendChild(styleElement);
|
|
19
|
+
}
|
|
20
|
+
function createFallbackMessage(categoryNames, isThemeDark = false) {
|
|
21
|
+
const formattedNames = categoryNames.join(", ");
|
|
22
|
+
const message = `No events found for "${formattedNames}" <span> Other upcoming events:</span>`;
|
|
23
|
+
const messageElement = new ElementBuilder(document.createElement("p")).styled(
|
|
24
|
+
typography.sans.compose("extralarge", {
|
|
25
|
+
theme: theme.fontColor(isThemeDark)
|
|
26
|
+
})
|
|
27
|
+
).withStyles({
|
|
28
|
+
textAlign: "center",
|
|
29
|
+
margin: "0 auto",
|
|
30
|
+
["& span"]: {
|
|
31
|
+
display: "block"
|
|
32
|
+
}
|
|
33
|
+
}).withHTML(message);
|
|
34
|
+
const container = new ElementBuilder(document.createElement("div")).withClassName("feed-events-fallback-message").withChild(messageElement).withStyles({
|
|
35
|
+
element: {
|
|
36
|
+
marginBottom: Styles.token.spacing.lg,
|
|
37
|
+
padding: `${Styles.token.spacing.md} ${Styles.token.spacing.lg}`
|
|
38
|
+
}
|
|
39
|
+
}).build();
|
|
40
|
+
return container;
|
|
41
|
+
}
|
|
42
|
+
function createDisplayHandlers(config) {
|
|
43
|
+
const {
|
|
44
|
+
displayStrategy,
|
|
45
|
+
layoutStrategy,
|
|
46
|
+
helpers,
|
|
47
|
+
cardMappingOptions,
|
|
48
|
+
isLazyLoad,
|
|
49
|
+
numberOfColumnsToShow = 1,
|
|
50
|
+
numberOfRowsToStart,
|
|
51
|
+
noResultsConfig = {},
|
|
52
|
+
lazyLoadCallback
|
|
53
|
+
} = config;
|
|
54
|
+
const displayNoResults = (props) => {
|
|
55
|
+
const container = helpers.getContainer();
|
|
56
|
+
const shadowRoot = helpers.getShadowRoot();
|
|
57
|
+
const { message, linkUrl, linkText, isThemeDark } = {
|
|
58
|
+
...noResultsConfig,
|
|
59
|
+
...props
|
|
60
|
+
};
|
|
61
|
+
const emptyState = new EmptyState({
|
|
62
|
+
message,
|
|
63
|
+
linkUrl,
|
|
64
|
+
linkText,
|
|
65
|
+
isThemeDark
|
|
66
|
+
});
|
|
67
|
+
const announcer = new Announcer({ message: message || "No results found" });
|
|
68
|
+
container.innerHTML = "";
|
|
69
|
+
emptyState.render(container);
|
|
70
|
+
container.appendChild(announcer.getElement());
|
|
71
|
+
helpers.setStyles(emptyState.styles);
|
|
72
|
+
dispatch(container, eventNames.FEED_ERROR, {
|
|
73
|
+
error: "No results found",
|
|
74
|
+
message,
|
|
75
|
+
isThemeDark
|
|
76
|
+
});
|
|
77
|
+
setTimeout(() => {
|
|
78
|
+
const styles = helpers.getStyles();
|
|
79
|
+
if (shadowRoot) {
|
|
80
|
+
setShadowStyles({ shadowRoot, styles });
|
|
81
|
+
}
|
|
82
|
+
}, 100);
|
|
83
|
+
};
|
|
84
|
+
const displayResults = async (props) => {
|
|
85
|
+
const { feedData } = props;
|
|
86
|
+
const container = helpers.getContainer();
|
|
87
|
+
const grid = container.querySelector(
|
|
88
|
+
`#${layoutStrategy.getId()}`
|
|
89
|
+
);
|
|
90
|
+
const existingLoader = container.querySelector(".umd-loader-container");
|
|
91
|
+
existingLoader?.remove();
|
|
92
|
+
const existingPagination = container.querySelector(
|
|
93
|
+
`.${Styles.layout.alignment.block.center.className}`
|
|
94
|
+
);
|
|
95
|
+
existingPagination?.remove();
|
|
96
|
+
helpers.setOffset(feedData.length);
|
|
97
|
+
const entries = feedData.map(
|
|
98
|
+
(entry) => displayStrategy.mapEntryToCard(entry, cardMappingOptions)
|
|
99
|
+
);
|
|
100
|
+
entries.forEach((entry) => {
|
|
101
|
+
grid.appendChild(entry.element);
|
|
102
|
+
helpers.setStyles(entry.styles);
|
|
103
|
+
});
|
|
104
|
+
if (isLazyLoad && lazyLoadCallback) {
|
|
105
|
+
const pagination = new PaginationState({
|
|
106
|
+
totalEntries: helpers.getTotalEntries(),
|
|
107
|
+
offset: helpers.getOffset(),
|
|
108
|
+
isLazyLoad: true,
|
|
109
|
+
callback: lazyLoadCallback
|
|
110
|
+
});
|
|
111
|
+
const paginationElement = pagination.render(container);
|
|
112
|
+
if (paginationElement) {
|
|
113
|
+
helpers.setStyles(paginationElement.styles);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const shadowRoot = helpers.getShadowRoot();
|
|
117
|
+
if (shadowRoot) {
|
|
118
|
+
await setShadowStyles({
|
|
119
|
+
shadowRoot,
|
|
120
|
+
styles: helpers.getStyles()
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const displayResultStart = async (props) => {
|
|
125
|
+
const { feedData, layoutElement, isFallback, categoryNames } = props;
|
|
126
|
+
const container = helpers.getContainer();
|
|
127
|
+
const totalEntries = helpers.getTotalEntries();
|
|
128
|
+
const showAmount = numberOfColumnsToShow * numberOfRowsToStart;
|
|
129
|
+
const message = isLazyLoad ? `Showing ${showAmount} of ${totalEntries} articles` : `Showing ${showAmount} articles`;
|
|
130
|
+
if (isFallback && categoryNames && categoryNames.length > 0) {
|
|
131
|
+
const fallbackMessage = createFallbackMessage(
|
|
132
|
+
categoryNames,
|
|
133
|
+
cardMappingOptions.isThemeDark || false
|
|
134
|
+
);
|
|
135
|
+
container.appendChild(fallbackMessage.element);
|
|
136
|
+
helpers.setStyles(fallbackMessage.styles);
|
|
137
|
+
const shadowRoot = helpers.getShadowRoot();
|
|
138
|
+
if (shadowRoot) {
|
|
139
|
+
await setShadowStyles({
|
|
140
|
+
shadowRoot,
|
|
141
|
+
styles: helpers.getStyles()
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
layoutElement.element.setAttribute("id", layoutStrategy.getId());
|
|
146
|
+
container.appendChild(layoutElement.element);
|
|
147
|
+
helpers.setStyles(layoutElement.styles);
|
|
148
|
+
dispatch(container, eventNames.FEED_LOADED, {
|
|
149
|
+
items: feedData,
|
|
150
|
+
count: feedData.length,
|
|
151
|
+
total: totalEntries || feedData.length,
|
|
152
|
+
isFallback,
|
|
153
|
+
categoryNames
|
|
154
|
+
});
|
|
155
|
+
await displayResults({ feedData });
|
|
156
|
+
const announcer = new Announcer({ message });
|
|
157
|
+
container.appendChild(announcer.getElement());
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
displayNoResults,
|
|
161
|
+
displayResults,
|
|
162
|
+
displayResultStart
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
export {
|
|
166
|
+
createDisplayHandlers,
|
|
167
|
+
setShadowStyles
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=displayHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayHandler.js","sources":["../../../source/factory/helpers/displayHandler.ts"],"sourcesContent":["/**\n * Display Handler Utilities\n *\n * Creates handlers for displaying feed results using a display strategy.\n * Handles both initial display and lazy-loaded results.\n *\n * @module factory/helpers/displayHandler\n */\n\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport * as Styles from '@universityofmaryland/web-styles-library';\nimport * as typography from '@universityofmaryland/web-styles-library/typography';\nimport { theme } from '@universityofmaryland/web-utilities-library/theme';\nimport { PaginationState, EmptyState, Announcer } from '../../states';\nimport { events } from '../../helpers';\nimport {\n DisplayStrategy,\n FeedHelpers,\n LayoutStrategy,\n CardMappingOptions,\n DisplayResultsProps,\n NoResultsConfig,\n} from '../core/types';\nimport { ElementModel } from '../../_types';\n\n/**\n * Configuration for creating display handlers\n */\ninterface DisplayHandlerConfig<TData> {\n /** Strategy for displaying entries */\n displayStrategy: DisplayStrategy<TData>;\n /** Strategy for creating layout */\n layoutStrategy: LayoutStrategy;\n /** Feed helper functions */\n helpers: FeedHelpers;\n /** Options for card mapping */\n cardMappingOptions: CardMappingOptions;\n /** Whether lazy loading is enabled */\n isLazyLoad?: boolean;\n /** Number of columns to show */\n numberOfColumnsToShow?: number;\n /** Number of rows to start with */\n numberOfRowsToStart: number;\n /** Configuration for no results state */\n noResultsConfig?: NoResultsConfig;\n /** Callback for lazy load */\n lazyLoadCallback?: () => Promise<void>;\n}\n\n/**\n * Set shadow root styles with CSS optimization\n */\nexport async function setShadowStyles({\n shadowRoot,\n styles,\n}: {\n shadowRoot: ShadowRoot;\n styles: string;\n}): Promise<void> {\n const styleElement = document.createElement('style');\n const optimizedCss = await Styles.utilities.transform.css.removeDuplicates(\n styles,\n );\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n}\n\n/**\n * Create fallback message for category-filtered feeds with no results\n */\nfunction createFallbackMessage(\n categoryNames: string[],\n isThemeDark: boolean = false,\n): ElementModel {\n const formattedNames = categoryNames.join(', ');\n const message = `No events found for \"${formattedNames}\" <span> Other upcoming events:</span>`;\n\n const messageElement = new ElementBuilder(document.createElement('p'))\n .styled(\n typography.sans.compose('extralarge', {\n theme: theme.fontColor(isThemeDark),\n }),\n )\n .withStyles({\n textAlign: 'center',\n margin: '0 auto',\n\n ['& span']: {\n display: 'block',\n },\n })\n .withHTML(message);\n\n const container = new ElementBuilder(document.createElement('div'))\n .withClassName('feed-events-fallback-message')\n .withChild(messageElement)\n .withStyles({\n element: {\n marginBottom: Styles.token.spacing.lg,\n padding: `${Styles.token.spacing.md} ${Styles.token.spacing.lg}`,\n },\n })\n .build();\n\n return container;\n}\n\n/**\n * Create display handlers for a feed\n *\n * Returns handlers for:\n * - Displaying initial results\n * - Displaying lazy-loaded results\n * - Displaying no results state\n *\n * @param config - Configuration for the display handlers\n * @returns Display handler functions\n *\n * @example\n * ```typescript\n * const handlers = createDisplayHandlers({\n * displayStrategy: eventsDisplayStrategy,\n * layoutStrategy: gridGapLayout,\n * helpers: feedHelpers,\n * cardMappingOptions: { isThemeDark: false },\n * isLazyLoad: true,\n * numberOfColumnsToShow: 3,\n * numberOfRowsToStart: 2,\n * });\n *\n * // Use handlers\n * handlers.displayResultStart({ feedData, layoutElement });\n * await handlers.displayResults({ feedData });\n * ```\n */\nexport function createDisplayHandlers<TData>(\n config: DisplayHandlerConfig<TData>,\n) {\n const {\n displayStrategy,\n layoutStrategy,\n helpers,\n cardMappingOptions,\n isLazyLoad,\n numberOfColumnsToShow = 1,\n numberOfRowsToStart,\n noResultsConfig = {},\n lazyLoadCallback,\n } = config;\n\n /**\n * Handle displaying no results\n */\n const displayNoResults = (props: any) => {\n const container = helpers.getContainer();\n const shadowRoot = helpers.getShadowRoot();\n const { message, linkUrl, linkText, isThemeDark } = {\n ...noResultsConfig,\n ...props,\n };\n\n const emptyState = new EmptyState({\n message,\n linkUrl,\n linkText,\n isThemeDark,\n });\n\n const announcer = new Announcer({ message: message || 'No results found' });\n\n container.innerHTML = '';\n emptyState.render(container);\n container.appendChild(announcer.getElement());\n helpers.setStyles(emptyState.styles);\n\n events.dispatch(container, events.eventNames.FEED_ERROR, {\n error: 'No results found',\n message,\n isThemeDark,\n });\n\n setTimeout(() => {\n const styles = helpers.getStyles();\n if (shadowRoot) {\n setShadowStyles({ shadowRoot, styles });\n }\n }, 100);\n };\n\n /**\n * Handle displaying lazy-loaded results\n */\n const displayResults = async (\n props: DisplayResultsProps<TData>,\n ): Promise<void> => {\n const { feedData } = props;\n const container = helpers.getContainer();\n const grid = container.querySelector(\n `#${layoutStrategy.getId()}`,\n ) as HTMLDivElement;\n\n // Remove existing loading and pagination states\n const existingLoader = container.querySelector('.umd-loader-container');\n existingLoader?.remove();\n\n const existingPagination = container.querySelector(\n `.${Styles.layout.alignment.block.center.className}`,\n );\n existingPagination?.remove();\n\n helpers.setOffset(feedData.length);\n\n // Map entries to cards using display strategy\n const entries = feedData.map((entry) =>\n displayStrategy.mapEntryToCard(entry, cardMappingOptions),\n );\n\n // Append entries to grid\n entries.forEach((entry) => {\n grid.appendChild(entry.element);\n helpers.setStyles(entry.styles);\n });\n\n // Add pagination if lazy load is enabled\n if (isLazyLoad && lazyLoadCallback) {\n const pagination = new PaginationState({\n totalEntries: helpers.getTotalEntries(),\n offset: helpers.getOffset(),\n isLazyLoad: true,\n callback: lazyLoadCallback,\n });\n\n const paginationElement = pagination.render(container);\n if (paginationElement) {\n helpers.setStyles(paginationElement.styles);\n }\n }\n\n // Update shadow root styles if needed\n const shadowRoot = helpers.getShadowRoot();\n if (shadowRoot) {\n await setShadowStyles({\n shadowRoot,\n styles: helpers.getStyles(),\n });\n }\n };\n\n /**\n * Handle displaying initial results\n */\n const displayResultStart = async (props: {\n feedData: TData[];\n layoutElement: ElementModel;\n isFallback?: boolean;\n categoryNames?: string[];\n }): Promise<void> => {\n const { feedData, layoutElement, isFallback, categoryNames } = props;\n const container = helpers.getContainer();\n const totalEntries = helpers.getTotalEntries();\n const showAmount = numberOfColumnsToShow * numberOfRowsToStart;\n const message = isLazyLoad\n ? `Showing ${showAmount} of ${totalEntries} articles`\n : `Showing ${showAmount} articles`;\n\n // If this is a fallback, add a message about the category FIRST\n if (isFallback && categoryNames && categoryNames.length > 0) {\n const fallbackMessage = createFallbackMessage(\n categoryNames,\n cardMappingOptions.isThemeDark || false,\n );\n container.appendChild(fallbackMessage.element);\n helpers.setStyles(fallbackMessage.styles);\n\n // Inject fallback message styles into shadow DOM immediately\n const shadowRoot = helpers.getShadowRoot();\n if (shadowRoot) {\n await setShadowStyles({\n shadowRoot,\n styles: helpers.getStyles(),\n });\n }\n }\n\n // Set layout ID and append to container\n layoutElement.element.setAttribute('id', layoutStrategy.getId());\n container.appendChild(layoutElement.element);\n helpers.setStyles(layoutElement.styles);\n\n // Dispatch feed loaded event\n events.dispatch(container, events.eventNames.FEED_LOADED, {\n items: feedData,\n count: feedData.length,\n total: totalEntries || feedData.length,\n isFallback,\n categoryNames,\n });\n\n // Display the results\n await displayResults({ feedData });\n\n // Add announcer\n const announcer = new Announcer({ message });\n container.appendChild(announcer.getElement());\n };\n\n return {\n displayNoResults,\n displayResults,\n displayResultStart,\n };\n}\n"],"names":["events.dispatch","events.eventNames"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FeedHelpers } from '../core/types';
|
|
2
|
+
interface FeedHelpersConfig {
|
|
3
|
+
container: HTMLElement;
|
|
4
|
+
initialStyles?: string;
|
|
5
|
+
shadowRoot?: ShadowRoot | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function createFeedHelpers(config: FeedHelpersConfig): FeedHelpers;
|
|
8
|
+
export declare function updateShadowRoot(helpers: FeedHelpers, shadowRoot: ShadowRoot): void;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=feedHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedHelpers.d.ts","sourceRoot":"","sources":["../../../source/factory/helpers/feedHelpers.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,UAAU,iBAAiB;IAEzB,SAAS,EAAE,WAAW,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAChC;AAgCD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAsCxE;AAaD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,UAAU,GACrB,IAAI,CAKN"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
function createFeedHelpers(config) {
|
|
2
|
+
const { container, initialStyles = "", shadowRoot: initialShadowRoot = null } = config;
|
|
3
|
+
const state = {
|
|
4
|
+
totalEntries: 0,
|
|
5
|
+
offset: 0,
|
|
6
|
+
styles: initialStyles,
|
|
7
|
+
shadowRoot: initialShadowRoot
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
setTotalEntries: (count) => {
|
|
11
|
+
state.totalEntries = count;
|
|
12
|
+
},
|
|
13
|
+
setOffset: (count) => {
|
|
14
|
+
state.offset = state.offset + count;
|
|
15
|
+
},
|
|
16
|
+
setStyles: (additionalStyles) => {
|
|
17
|
+
state.styles += additionalStyles;
|
|
18
|
+
},
|
|
19
|
+
setShadowRoot: (shadow) => {
|
|
20
|
+
state.shadowRoot = shadow;
|
|
21
|
+
},
|
|
22
|
+
getContainer: () => container,
|
|
23
|
+
getOffset: () => state.offset,
|
|
24
|
+
getTotalEntries: () => state.totalEntries,
|
|
25
|
+
getStyles: () => state.styles,
|
|
26
|
+
getShadowRoot: () => state.shadowRoot
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
createFeedHelpers
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=feedHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedHelpers.js","sources":["../../../source/factory/helpers/feedHelpers.ts"],"sourcesContent":["/**\n * Feed Helper Utilities\n *\n * Creates standard helper functions for managing feed state.\n * These helpers are passed to all strategies and lifecycle handlers.\n *\n * @module factory/helpers/feedHelpers\n */\n\nimport { FeedHelpers } from '../core/types';\n\n/**\n * Configuration for creating feed helpers\n */\ninterface FeedHelpersConfig {\n /** The feed container element */\n container: HTMLElement;\n /** Initial styles */\n initialStyles?: string;\n /** Shadow root if available */\n shadowRoot?: ShadowRoot | null;\n}\n\n/**\n * Internal state managed by the helpers\n */\ninterface FeedState {\n totalEntries: number;\n offset: number;\n styles: string;\n shadowRoot: ShadowRoot | null;\n}\n\n/**\n * Create feed helper functions\n *\n * These helpers provide a consistent API for managing feed state\n * across different feed types and layouts.\n *\n * @param config - Configuration for the helpers\n * @returns Feed helper functions\n *\n * @example\n * ```typescript\n * const container = document.createElement('div');\n * const helpers = createFeedHelpers({ container });\n *\n * helpers.setTotalEntries(100);\n * helpers.setOffset(10);\n * console.log(helpers.getTotalEntries()); // 100\n * console.log(helpers.getOffset()); // 10\n * ```\n */\nexport function createFeedHelpers(config: FeedHelpersConfig): FeedHelpers {\n const { container, initialStyles = '', shadowRoot: initialShadowRoot = null } = config;\n\n // Internal state\n const state: FeedState = {\n totalEntries: 0,\n offset: 0,\n styles: initialStyles,\n shadowRoot: initialShadowRoot,\n };\n\n return {\n setTotalEntries: (count: number) => {\n state.totalEntries = count;\n },\n\n setOffset: (count: number) => {\n state.offset = state.offset + count;\n },\n\n setStyles: (additionalStyles: string) => {\n state.styles += additionalStyles;\n },\n\n setShadowRoot: (shadow: ShadowRoot) => {\n state.shadowRoot = shadow;\n },\n\n getContainer: () => container,\n\n getOffset: () => state.offset,\n\n getTotalEntries: () => state.totalEntries,\n\n getStyles: () => state.styles,\n\n getShadowRoot: () => state.shadowRoot,\n };\n}\n\n/**\n * Update the shadow root reference in helpers\n *\n * This is called when a shadow root becomes available\n * (typically from a web component callback)\n *\n * @param helpers - The feed helpers\n * @param shadowRoot - The shadow root to set\n *\n * @internal\n */\nexport function updateShadowRoot(\n helpers: FeedHelpers,\n shadowRoot: ShadowRoot\n): void {\n // We need to mutate the internal state\n // This is safe because helpers is always created fresh per feed instance\n const state = (helpers as any).state || {};\n state.shadowRoot = shadowRoot;\n}\n"],"names":[],"mappings":"AAqDO,SAAS,kBAAkB,QAAwC;AACxE,QAAM,EAAE,WAAW,gBAAgB,IAAI,YAAY,oBAAoB,SAAS;AAGhF,QAAM,QAAmB;AAAA,IACvB,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA;AAGd,SAAO;AAAA,IACL,iBAAiB,CAAC,UAAkB;AAClC,YAAM,eAAe;AAAA,IACvB;AAAA,IAEA,WAAW,CAAC,UAAkB;AAC5B,YAAM,SAAS,MAAM,SAAS;AAAA,IAChC;AAAA,IAEA,WAAW,CAAC,qBAA6B;AACvC,YAAM,UAAU;AAAA,IAClB;AAAA,IAEA,eAAe,CAAC,WAAuB;AACrC,YAAM,aAAa;AAAA,IACrB;AAAA,IAEA,cAAc,MAAM;AAAA,IAEpB,WAAW,MAAM,MAAM;AAAA,IAEvB,iBAAiB,MAAM,MAAM;AAAA,IAE7B,WAAW,MAAM,MAAM;AAAA,IAEvB,eAAe,MAAM,MAAM;AAAA,EAAA;AAE/B;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FetchStrategy, FeedHelpers } from '../core/types';
|
|
2
|
+
interface FetchHandlerConfig<TData, TVariables> {
|
|
3
|
+
fetchStrategy: FetchStrategy<TData, TVariables>;
|
|
4
|
+
helpers: FeedHelpers;
|
|
5
|
+
baseProps: any;
|
|
6
|
+
displayHandlers: {
|
|
7
|
+
displayResultStart: (props: any) => Promise<void>;
|
|
8
|
+
displayResults: (props: {
|
|
9
|
+
feedData: TData[];
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
displayNoResults: (props: any) => void;
|
|
12
|
+
};
|
|
13
|
+
layoutElement: any;
|
|
14
|
+
isThemeDark?: boolean;
|
|
15
|
+
enableCategoryFallback?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function createFetchHandlers<TData, TVariables>(config: FetchHandlerConfig<TData, TVariables>): {
|
|
18
|
+
start: () => Promise<void>;
|
|
19
|
+
loadMore: () => Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=fetchHandler.d.ts.map
|