@universityofmaryland/web-feeds-library 1.3.0-beta.0 → 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.
Files changed (207) hide show
  1. package/dist/academic.js +4 -4
  2. package/dist/academic.js.map +1 -1
  3. package/dist/events.js +10 -10
  4. package/dist/events.js.map +1 -1
  5. package/dist/experts.js +8 -8
  6. package/dist/experts.js.map +1 -1
  7. package/dist/factory/core/createBaseFeed.d.ts.map +1 -1
  8. package/dist/factory/core/createBaseFeed.js +19 -17
  9. package/dist/factory/core/createBaseFeed.js.map +1 -1
  10. package/dist/factory/core/types.d.ts +1 -0
  11. package/dist/factory/core/types.d.ts.map +1 -1
  12. package/dist/factory/helpers/displayHandler.js +29 -47
  13. package/dist/factory/helpers/displayHandler.js.map +1 -1
  14. package/dist/factory/helpers/feedHelpers.js +3 -3
  15. package/dist/factory/helpers/feedHelpers.js.map +1 -1
  16. package/dist/factory/helpers/fetchHandler.js +16 -33
  17. package/dist/factory/helpers/fetchHandler.js.map +1 -1
  18. package/dist/feeds/academic/index.d.ts +1 -1
  19. package/dist/feeds/academic/index.d.ts.map +1 -1
  20. package/dist/feeds/academic/slider.d.ts +1 -2
  21. package/dist/feeds/academic/slider.d.ts.map +1 -1
  22. package/dist/feeds/academic/slider.js +7 -6
  23. package/dist/feeds/academic/slider.js.map +1 -1
  24. package/dist/feeds/events/grid.d.ts +1 -2
  25. package/dist/feeds/events/grid.d.ts.map +1 -1
  26. package/dist/feeds/events/grid.js +22 -21
  27. package/dist/feeds/events/grid.js.map +1 -1
  28. package/dist/feeds/events/grouped.d.ts +1 -2
  29. package/dist/feeds/events/grouped.d.ts.map +1 -1
  30. package/dist/feeds/events/grouped.js +62 -78
  31. package/dist/feeds/events/grouped.js.map +1 -1
  32. package/dist/feeds/events/index.d.ts +4 -4
  33. package/dist/feeds/events/index.d.ts.map +1 -1
  34. package/dist/feeds/events/list.d.ts +1 -2
  35. package/dist/feeds/events/list.d.ts.map +1 -1
  36. package/dist/feeds/events/list.js +22 -21
  37. package/dist/feeds/events/list.js.map +1 -1
  38. package/dist/feeds/events/slider.d.ts +1 -2
  39. package/dist/feeds/events/slider.d.ts.map +1 -1
  40. package/dist/feeds/events/slider.js +7 -6
  41. package/dist/feeds/events/slider.js.map +1 -1
  42. package/dist/feeds/experts/_types.d.ts +2 -1
  43. package/dist/feeds/experts/_types.d.ts.map +1 -1
  44. package/dist/feeds/experts/bio.d.ts +1 -2
  45. package/dist/feeds/experts/bio.d.ts.map +1 -1
  46. package/dist/feeds/experts/bio.js +32 -31
  47. package/dist/feeds/experts/bio.js.map +1 -1
  48. package/dist/feeds/experts/grid.d.ts +1 -2
  49. package/dist/feeds/experts/grid.d.ts.map +1 -1
  50. package/dist/feeds/experts/grid.js +24 -23
  51. package/dist/feeds/experts/grid.js.map +1 -1
  52. package/dist/feeds/experts/index.d.ts +3 -3
  53. package/dist/feeds/experts/index.d.ts.map +1 -1
  54. package/dist/feeds/experts/list.d.ts +1 -2
  55. package/dist/feeds/experts/list.d.ts.map +1 -1
  56. package/dist/feeds/experts/list.js +23 -22
  57. package/dist/feeds/experts/list.js.map +1 -1
  58. package/dist/feeds/news/featured.d.ts +1 -2
  59. package/dist/feeds/news/featured.d.ts.map +1 -1
  60. package/dist/feeds/news/featured.js +56 -55
  61. package/dist/feeds/news/featured.js.map +1 -1
  62. package/dist/feeds/news/grid.d.ts +1 -2
  63. package/dist/feeds/news/grid.d.ts.map +1 -1
  64. package/dist/feeds/news/grid.js +24 -23
  65. package/dist/feeds/news/grid.js.map +1 -1
  66. package/dist/feeds/news/index.d.ts +3 -3
  67. package/dist/feeds/news/index.d.ts.map +1 -1
  68. package/dist/feeds/news/list.d.ts +1 -2
  69. package/dist/feeds/news/list.d.ts.map +1 -1
  70. package/dist/feeds/news/list.js +23 -22
  71. package/dist/feeds/news/list.js.map +1 -1
  72. package/dist/helpers/events/index.js +4 -4
  73. package/dist/helpers/events/index.js.map +1 -1
  74. package/dist/helpers/grouping/events.js +10 -10
  75. package/dist/helpers/grouping/events.js.map +1 -1
  76. package/dist/helpers/styles/shadow.js +5 -22
  77. package/dist/helpers/styles/shadow.js.map +1 -1
  78. package/dist/index.js +10 -10
  79. package/dist/index.js.map +1 -1
  80. package/dist/news.js +8 -8
  81. package/dist/news.js.map +1 -1
  82. package/dist/states/_types.d.ts +0 -24
  83. package/dist/states/_types.d.ts.map +1 -1
  84. package/dist/states/_types.js +3 -3
  85. package/dist/states/_types.js.map +1 -1
  86. package/dist/states/announcer.d.ts +1 -3
  87. package/dist/states/announcer.d.ts.map +1 -1
  88. package/dist/states/announcer.js +5 -5
  89. package/dist/states/announcer.js.map +1 -1
  90. package/dist/states/empty.d.ts +0 -2
  91. package/dist/states/empty.d.ts.map +1 -1
  92. package/dist/states/empty.js +15 -32
  93. package/dist/states/empty.js.map +1 -1
  94. package/dist/states/index.d.ts +4 -8
  95. package/dist/states/index.d.ts.map +1 -1
  96. package/dist/states/loading.d.ts +1 -3
  97. package/dist/states/loading.d.ts.map +1 -1
  98. package/dist/states/loading.js +16 -16
  99. package/dist/states/loading.js.map +1 -1
  100. package/dist/states/pagination.d.ts +1 -3
  101. package/dist/states/pagination.d.ts.map +1 -1
  102. package/dist/states/pagination.js +11 -28
  103. package/dist/states/pagination.js.map +1 -1
  104. package/dist/strategies/display/events.js +13 -13
  105. package/dist/strategies/display/events.js.map +1 -1
  106. package/dist/strategies/display/experts.js +23 -23
  107. package/dist/strategies/display/experts.js.map +1 -1
  108. package/dist/strategies/display/news.js +13 -13
  109. package/dist/strategies/display/news.js.map +1 -1
  110. package/dist/strategies/fetch/academic.js +3 -3
  111. package/dist/strategies/fetch/academic.js.map +1 -1
  112. package/dist/strategies/fetch/events.js +13 -13
  113. package/dist/strategies/fetch/events.js.map +1 -1
  114. package/dist/strategies/fetch/experts.d.ts +1 -1
  115. package/dist/strategies/fetch/experts.d.ts.map +1 -1
  116. package/dist/strategies/fetch/experts.js +13 -8
  117. package/dist/strategies/fetch/experts.js.map +1 -1
  118. package/dist/strategies/fetch/graphql.d.ts.map +1 -1
  119. package/dist/strategies/fetch/graphql.js +11 -7
  120. package/dist/strategies/fetch/graphql.js.map +1 -1
  121. package/dist/strategies/fetch/news.js +6 -6
  122. package/dist/strategies/fetch/news.js.map +1 -1
  123. package/dist/strategies/layout/grid.js +11 -11
  124. package/dist/strategies/layout/grid.js.map +1 -1
  125. package/dist/widgets/index.d.ts +1 -1
  126. package/dist/widgets/index.d.ts.map +1 -1
  127. package/dist/widgets/slider.d.ts +1 -2
  128. package/dist/widgets/slider.d.ts.map +1 -1
  129. package/dist/widgets/slider.js +19 -35
  130. package/dist/widgets/slider.js.map +1 -1
  131. package/package.json +15 -14
  132. package/dist/academic.mjs +0 -5
  133. package/dist/academic.mjs.map +0 -1
  134. package/dist/events.mjs +0 -11
  135. package/dist/events.mjs.map +0 -1
  136. package/dist/experts.mjs +0 -9
  137. package/dist/experts.mjs.map +0 -1
  138. package/dist/factory/core/createBaseFeed.mjs +0 -114
  139. package/dist/factory/core/createBaseFeed.mjs.map +0 -1
  140. package/dist/factory/helpers/displayHandler.mjs +0 -169
  141. package/dist/factory/helpers/displayHandler.mjs.map +0 -1
  142. package/dist/factory/helpers/feedHelpers.mjs +0 -32
  143. package/dist/factory/helpers/feedHelpers.mjs.map +0 -1
  144. package/dist/factory/helpers/fetchHandler.mjs +0 -123
  145. package/dist/factory/helpers/fetchHandler.mjs.map +0 -1
  146. package/dist/feeds/academic/slider.mjs +0 -11
  147. package/dist/feeds/academic/slider.mjs.map +0 -1
  148. package/dist/feeds/events/grid.mjs +0 -32
  149. package/dist/feeds/events/grid.mjs.map +0 -1
  150. package/dist/feeds/events/grouped.mjs +0 -337
  151. package/dist/feeds/events/grouped.mjs.map +0 -1
  152. package/dist/feeds/events/list.mjs +0 -33
  153. package/dist/feeds/events/list.mjs.map +0 -1
  154. package/dist/feeds/events/slider.mjs +0 -11
  155. package/dist/feeds/events/slider.mjs.map +0 -1
  156. package/dist/feeds/experts/bio.mjs +0 -147
  157. package/dist/feeds/experts/bio.mjs.map +0 -1
  158. package/dist/feeds/experts/grid.mjs +0 -37
  159. package/dist/feeds/experts/grid.mjs.map +0 -1
  160. package/dist/feeds/experts/list.mjs +0 -26
  161. package/dist/feeds/experts/list.mjs.map +0 -1
  162. package/dist/feeds/news/featured.mjs +0 -379
  163. package/dist/feeds/news/featured.mjs.map +0 -1
  164. package/dist/feeds/news/grid.mjs +0 -37
  165. package/dist/feeds/news/grid.mjs.map +0 -1
  166. package/dist/feeds/news/list.mjs +0 -34
  167. package/dist/feeds/news/list.mjs.map +0 -1
  168. package/dist/helpers/events/index.mjs +0 -21
  169. package/dist/helpers/events/index.mjs.map +0 -1
  170. package/dist/helpers/grouping/events.mjs +0 -147
  171. package/dist/helpers/grouping/events.mjs.map +0 -1
  172. package/dist/helpers/styles/shadow.mjs +0 -16
  173. package/dist/helpers/styles/shadow.mjs.map +0 -1
  174. package/dist/index.mjs +0 -11
  175. package/dist/index.mjs.map +0 -1
  176. package/dist/news.mjs +0 -9
  177. package/dist/news.mjs.map +0 -1
  178. package/dist/states/_types.mjs +0 -12
  179. package/dist/states/_types.mjs.map +0 -1
  180. package/dist/states/announcer.mjs +0 -62
  181. package/dist/states/announcer.mjs.map +0 -1
  182. package/dist/states/empty.mjs +0 -104
  183. package/dist/states/empty.mjs.map +0 -1
  184. package/dist/states/loading.mjs +0 -155
  185. package/dist/states/loading.mjs.map +0 -1
  186. package/dist/states/pagination.mjs +0 -102
  187. package/dist/states/pagination.mjs.map +0 -1
  188. package/dist/strategies/display/events.mjs +0 -60
  189. package/dist/strategies/display/events.mjs.map +0 -1
  190. package/dist/strategies/display/experts.mjs +0 -266
  191. package/dist/strategies/display/experts.mjs.map +0 -1
  192. package/dist/strategies/display/news.mjs +0 -58
  193. package/dist/strategies/display/news.mjs.map +0 -1
  194. package/dist/strategies/fetch/academic.mjs +0 -30
  195. package/dist/strategies/fetch/academic.mjs.map +0 -1
  196. package/dist/strategies/fetch/events.mjs +0 -223
  197. package/dist/strategies/fetch/events.mjs.map +0 -1
  198. package/dist/strategies/fetch/experts.mjs +0 -189
  199. package/dist/strategies/fetch/experts.mjs.map +0 -1
  200. package/dist/strategies/fetch/graphql.mjs +0 -100
  201. package/dist/strategies/fetch/graphql.mjs.map +0 -1
  202. package/dist/strategies/fetch/news.mjs +0 -95
  203. package/dist/strategies/fetch/news.mjs.map +0 -1
  204. package/dist/strategies/layout/grid.mjs +0 -36
  205. package/dist/strategies/layout/grid.mjs.map +0 -1
  206. package/dist/widgets/slider.mjs +0 -87
  207. package/dist/widgets/slider.mjs.map +0 -1
package/package.json CHANGED
@@ -1,35 +1,36 @@
1
1
  {
2
2
  "name": "@universityofmaryland/web-feeds-library",
3
- "version": "1.3.0-beta.0",
3
+ "version": "1.3.0-beta.1",
4
4
  "description": "UMD Feed Elements",
5
+ "type": "module",
5
6
  "main": "dist/index.js",
6
- "module": "dist/index.mjs",
7
+ "module": "dist/index.js",
7
8
  "types": "dist/index.d.ts",
8
9
  "exports": {
9
10
  ".": {
10
11
  "types": "./dist/index.d.ts",
11
- "import": "./dist/index.mjs",
12
- "require": "./dist/index.js"
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
13
14
  },
14
15
  "./academic": {
15
16
  "types": "./dist/academic.d.ts",
16
- "import": "./dist/academic.mjs",
17
- "require": "./dist/academic.js"
17
+ "import": "./dist/academic.js",
18
+ "default": "./dist/academic.js"
18
19
  },
19
20
  "./events": {
20
21
  "types": "./dist/events.d.ts",
21
- "import": "./dist/events.mjs",
22
- "require": "./dist/events.js"
22
+ "import": "./dist/events.js",
23
+ "default": "./dist/events.js"
23
24
  },
24
25
  "./experts": {
25
26
  "types": "./dist/experts.d.ts",
26
- "import": "./dist/experts.mjs",
27
- "require": "./dist/experts.js"
27
+ "import": "./dist/experts.js",
28
+ "default": "./dist/experts.js"
28
29
  },
29
30
  "./news": {
30
31
  "types": "./dist/news.d.ts",
31
- "import": "./dist/news.mjs",
32
- "require": "./dist/news.js"
32
+ "import": "./dist/news.js",
33
+ "default": "./dist/news.js"
33
34
  }
34
35
  },
35
36
  "license": "MIT",
@@ -56,10 +57,10 @@
56
57
  },
57
58
  "dependencies": {
58
59
  "@types/postcss-js": "^4.0.4",
59
- "@universityofmaryland/web-token-library": "^1.0.0",
60
- "@universityofmaryland/web-styles-library": "^1.0.0",
61
60
  "@universityofmaryland/web-builder-library": "^1.0.0",
62
61
  "@universityofmaryland/web-elements-library": "^1.0.0",
62
+ "@universityofmaryland/web-styles-library": "^1.0.0",
63
+ "@universityofmaryland/web-token-library": "^1.0.0",
63
64
  "@universityofmaryland/web-utilities-library": "^1.0.0"
64
65
  },
65
66
  "devDependencies": {
package/dist/academic.mjs DELETED
@@ -1,5 +0,0 @@
1
- import { default as default2 } from "./feeds/academic/slider.mjs";
2
- export {
3
- default2 as slider
4
- };
5
- //# sourceMappingURL=academic.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"academic.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/events.mjs DELETED
@@ -1,11 +0,0 @@
1
- import { default as default2 } from "./feeds/events/grid.mjs";
2
- import { default as default3 } from "./feeds/events/list.mjs";
3
- import { default as default4 } from "./feeds/events/slider.mjs";
4
- import { default as default5 } from "./feeds/events/grouped.mjs";
5
- export {
6
- default2 as grid,
7
- default5 as grouped,
8
- default3 as list,
9
- default4 as slider
10
- };
11
- //# sourceMappingURL=events.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/dist/experts.mjs DELETED
@@ -1,9 +0,0 @@
1
- import { default as default2 } from "./feeds/experts/grid.mjs";
2
- import { default as default3 } from "./feeds/experts/list.mjs";
3
- import { default as default4 } from "./feeds/experts/bio.mjs";
4
- export {
5
- default4 as bio,
6
- default2 as grid,
7
- default3 as list
8
- };
9
- //# sourceMappingURL=experts.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"experts.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,114 +0,0 @@
1
- import { LoadingState } from "../../states/loading.mjs";
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.mjs";
7
- import { createDisplayHandlers } from "../helpers/displayHandler.mjs";
8
- import { createFetchHandlers } from "../helpers/fetchHandler.mjs";
9
- function createBaseFeed(config) {
10
- const {
11
- token,
12
- isThemeDark = false,
13
- isTransparent = false,
14
- isOverlay = false,
15
- isAligned = false,
16
- cardType,
17
- numberOfColumnsToShow = 1,
18
- numberOfRowsToStart,
19
- isLazyLoad = false,
20
- enableCategoryFallback = false,
21
- categories,
22
- entriesToRemove,
23
- fetchStrategy,
24
- displayStrategy,
25
- layoutStrategy,
26
- noResultsConfig,
27
- imageConfig
28
- } = config;
29
- const container = document.createElement("div");
30
- const loading = new LoadingState({ isThemeDark });
31
- let styles = loading.styles;
32
- const helpers = createFeedHelpers({
33
- container,
34
- initialStyles: styles
35
- });
36
- const originalSetStyles = helpers.setStyles;
37
- helpers.setStyles = (additionalStyles) => {
38
- styles += additionalStyles;
39
- originalSetStyles(additionalStyles);
40
- };
41
- const shadowRootCallback = (shadow) => {
42
- helpers.setShadowRoot(shadow);
43
- };
44
- const cardMappingOptions = {
45
- isThemeDark,
46
- isTransparent,
47
- isOverlay,
48
- isAligned,
49
- imageConfig,
50
- ...cardType && { cardType }
51
- };
52
- const layoutElement = layoutStrategy.create({
53
- columns: numberOfColumnsToShow,
54
- isThemeDark
55
- });
56
- helpers.setStyles(layoutElement.styles);
57
- const baseProps = {
58
- token,
59
- categories,
60
- entriesToRemove,
61
- numberOfColumnsToShow,
62
- numberOfRowsToStart,
63
- isLazyLoad,
64
- getOffset: helpers.getOffset
65
- };
66
- const lazyLoadCallbackRef = {
67
- current: void 0
68
- };
69
- const displayHandlers = createDisplayHandlers({
70
- displayStrategy,
71
- layoutStrategy,
72
- helpers,
73
- cardMappingOptions,
74
- isLazyLoad,
75
- numberOfColumnsToShow,
76
- numberOfRowsToStart,
77
- noResultsConfig: {
78
- ...noResultsConfig,
79
- isThemeDark
80
- // Ensure theme is passed to EmptyState
81
- },
82
- // Pass a function that calls the current callback
83
- lazyLoadCallback: isLazyLoad ? async () => {
84
- if (lazyLoadCallbackRef.current) {
85
- await lazyLoadCallbackRef.current();
86
- }
87
- } : void 0
88
- });
89
- const fetchHandlers = createFetchHandlers({
90
- fetchStrategy,
91
- helpers,
92
- baseProps,
93
- displayHandlers,
94
- layoutElement,
95
- isThemeDark,
96
- enableCategoryFallback
97
- });
98
- lazyLoadCallbackRef.current = fetchHandlers.loadMore;
99
- container.appendChild(loading.element);
100
- fetchHandlers.start();
101
- return {
102
- element: container,
103
- get styles() {
104
- return styles;
105
- },
106
- events: {
107
- callback: shadowRootCallback
108
- }
109
- };
110
- }
111
- export {
112
- createBaseFeed
113
- };
114
- //# sourceMappingURL=createBaseFeed.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createBaseFeed.mjs","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 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 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;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,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;"}
@@ -1,169 +0,0 @@
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.mjs";
6
- import { PaginationState } from "../../states/pagination.mjs";
7
- import { Announcer } from "../../states/announcer.mjs";
8
- import { dispatch, eventNames } from "../../helpers/events/index.mjs";
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.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"displayHandler.mjs","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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"}
@@ -1,32 +0,0 @@
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.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feedHelpers.mjs","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;"}
@@ -1,123 +0,0 @@
1
- import * as Styles from "@universityofmaryland/web-styles-library";
2
- import { LoadingState } from "../../states/loading.mjs";
3
- import "@universityofmaryland/web-builder-library";
4
- import "@universityofmaryland/web-elements-library";
5
- import "@universityofmaryland/web-utilities-library/theme";
6
- import { Announcer } from "../../states/announcer.mjs";
7
- function createFetchHandlers(config) {
8
- const {
9
- fetchStrategy,
10
- helpers,
11
- baseProps,
12
- displayHandlers,
13
- layoutElement,
14
- isThemeDark,
15
- enableCategoryFallback = false
16
- } = config;
17
- const loadMore = async () => {
18
- const container = helpers.getContainer();
19
- const currentCount = helpers.getOffset();
20
- const totalEntries = helpers.getTotalEntries();
21
- const existingPagination = container.querySelector(
22
- `.${Styles.layout.alignment.block.center.className}`
23
- );
24
- existingPagination?.remove();
25
- const loading = new LoadingState({ isThemeDark });
26
- loading.show(container);
27
- const variables = fetchStrategy.composeApiVariables({
28
- ...baseProps,
29
- getOffset: helpers.getOffset
30
- });
31
- const feedData = await fetchStrategy.fetchEntries(variables);
32
- if (feedData) {
33
- loading.hide();
34
- await displayHandlers.displayResults({ feedData });
35
- const message = `Showing ${currentCount + feedData.length} of ${totalEntries} articles`;
36
- const existingAnnouncer = container.querySelector(
37
- '[role="status"]'
38
- );
39
- if (existingAnnouncer) {
40
- existingAnnouncer.textContent = message;
41
- } else {
42
- const announcer = new Announcer({ message });
43
- container.appendChild(announcer.getElement());
44
- }
45
- } else {
46
- loading.hide();
47
- displayHandlers.displayNoResults({
48
- message: "An error occurred while loading more results."
49
- });
50
- }
51
- };
52
- const start = async () => {
53
- const variables = fetchStrategy.composeApiVariables({
54
- ...baseProps,
55
- getOffset: helpers.getOffset
56
- });
57
- const count = await fetchStrategy.fetchCount(variables);
58
- if (count === 0) {
59
- if (enableCategoryFallback && baseProps.categories && baseProps.categories.length > 0) {
60
- const fallbackVariables = fetchStrategy.composeApiVariables({
61
- ...baseProps,
62
- categories: void 0,
63
- getOffset: helpers.getOffset
64
- });
65
- const fallbackCount = await fetchStrategy.fetchCount(fallbackVariables);
66
- if (fallbackCount && fallbackCount > 0) {
67
- helpers.setTotalEntries(fallbackCount);
68
- const fallbackData = await fetchStrategy.fetchEntries(
69
- fallbackVariables
70
- );
71
- if (fallbackData && fallbackData.length > 0) {
72
- let categoryNames = await fetchStrategy.fetchCategoryNames?.(
73
- baseProps.categories,
74
- baseProps.token
75
- );
76
- if (!categoryNames || categoryNames.length === 0) {
77
- categoryNames = baseProps.categories.map(
78
- (id) => id.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ")
79
- );
80
- }
81
- await displayHandlers.displayResultStart({
82
- feedData: fallbackData,
83
- layoutElement,
84
- isFallback: true,
85
- categoryNames
86
- });
87
- return;
88
- }
89
- }
90
- }
91
- displayHandlers.displayNoResults({});
92
- return;
93
- }
94
- if (count === null) {
95
- displayHandlers.displayNoResults({
96
- message: "An error occurred while fetching the data."
97
- });
98
- return;
99
- }
100
- if (count) {
101
- helpers.setTotalEntries(count);
102
- }
103
- const feedData = await fetchStrategy.fetchEntries(variables);
104
- if (feedData && feedData.length > 0) {
105
- await displayHandlers.displayResultStart({
106
- feedData,
107
- layoutElement
108
- });
109
- } else {
110
- displayHandlers.displayNoResults({
111
- message: "An error occurred while fetching the data."
112
- });
113
- }
114
- };
115
- return {
116
- start,
117
- loadMore
118
- };
119
- }
120
- export {
121
- createFetchHandlers
122
- };
123
- //# sourceMappingURL=fetchHandler.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetchHandler.mjs","sources":["../../../source/factory/helpers/fetchHandler.ts"],"sourcesContent":["/**\n * Fetch Handler Utilities\n *\n * Creates handlers for fetching feed data using a fetch strategy.\n * Handles both initial fetch and lazy-loaded fetches.\n *\n * @module factory/helpers/fetchHandler\n */\n\nimport * as Styles from '@universityofmaryland/web-styles-library';\nimport { LoadingState, Announcer } from '../../states';\nimport { FetchStrategy, FeedHelpers } from '../core/types';\n\n/**\n * Configuration for creating fetch handlers\n */\ninterface FetchHandlerConfig<TData, TVariables> {\n /** Strategy for fetching data */\n fetchStrategy: FetchStrategy<TData, TVariables>;\n /** Feed helper functions */\n helpers: FeedHelpers;\n /** Base props for composing API variables */\n baseProps: any;\n /** Display handlers */\n displayHandlers: {\n displayResultStart: (props: any) => Promise<void>;\n displayResults: (props: { feedData: TData[] }) => Promise<void>;\n displayNoResults: (props: any) => void;\n };\n /** Layout element */\n layoutElement: any;\n /** Whether theme is dark */\n isThemeDark?: boolean;\n /** Whether to enable category fallback (show all results when no category results found) */\n enableCategoryFallback?: boolean;\n}\n\n/**\n * Create fetch handlers for a feed\n *\n * Returns handlers for:\n * - Initial data fetch (with count)\n * - Lazy load fetch (pagination)\n *\n * @param config - Configuration for the fetch handlers\n * @returns Fetch handler functions\n *\n * @example\n * ```typescript\n * const fetchHandlers = createFetchHandlers({\n * fetchStrategy: eventsFetchStrategy,\n * helpers: feedHelpers,\n * baseProps: { token, categories },\n * displayHandlers,\n * layoutElement,\n * isThemeDark: false,\n * });\n *\n * // Start initial fetch\n * await fetchHandlers.start();\n *\n * // Fetch more results\n * await fetchHandlers.loadMore();\n * ```\n */\nexport function createFetchHandlers<TData, TVariables>(\n config: FetchHandlerConfig<TData, TVariables>,\n) {\n const {\n fetchStrategy,\n helpers,\n baseProps,\n displayHandlers,\n layoutElement,\n isThemeDark,\n enableCategoryFallback = false,\n } = config;\n\n /**\n * Handle lazy loading more results\n */\n const loadMore = async (): Promise<void> => {\n const container = helpers.getContainer();\n const currentCount = helpers.getOffset();\n const totalEntries = helpers.getTotalEntries();\n\n // Remove existing pagination\n const existingPagination = container.querySelector(\n `.${Styles.layout.alignment.block.center.className}`,\n );\n existingPagination?.remove();\n\n // Show loading state\n const loading = new LoadingState({ isThemeDark });\n loading.show(container);\n\n // Compose API variables\n const variables = fetchStrategy.composeApiVariables({\n ...baseProps,\n getOffset: helpers.getOffset,\n });\n\n // Fetch entries\n const feedData = await fetchStrategy.fetchEntries(variables);\n\n if (feedData) {\n loading.hide();\n await displayHandlers.displayResults({ feedData });\n\n // Update announcer with new count\n const message = `Showing ${\n currentCount + feedData.length\n } of ${totalEntries} articles`;\n\n const existingAnnouncer = container.querySelector(\n '[role=\"status\"]',\n ) as HTMLElement;\n if (existingAnnouncer) {\n existingAnnouncer.textContent = message;\n } else {\n const announcer = new Announcer({ message });\n container.appendChild(announcer.getElement());\n }\n } else {\n loading.hide();\n displayHandlers.displayNoResults({\n message: 'An error occurred while loading more results.',\n });\n }\n };\n\n /**\n * Handle initial fetch (with count)\n */\n const start = async (): Promise<void> => {\n const variables = fetchStrategy.composeApiVariables({\n ...baseProps,\n getOffset: helpers.getOffset,\n });\n\n const count = await fetchStrategy.fetchCount(variables);\n\n if (count === 0) {\n // Only attempt category fallback if explicitly enabled (for events feeds)\n if (enableCategoryFallback && baseProps.categories && baseProps.categories.length > 0) {\n const fallbackVariables = fetchStrategy.composeApiVariables({\n ...baseProps,\n categories: undefined,\n getOffset: helpers.getOffset,\n });\n\n const fallbackCount = await fetchStrategy.fetchCount(fallbackVariables);\n\n if (fallbackCount && fallbackCount > 0) {\n helpers.setTotalEntries(fallbackCount);\n\n const fallbackData = await fetchStrategy.fetchEntries(\n fallbackVariables,\n );\n\n if (fallbackData && fallbackData.length > 0) {\n // Fetch category names from API\n let categoryNames = await fetchStrategy.fetchCategoryNames?.(\n baseProps.categories,\n baseProps.token,\n );\n\n // If fetch fails, format IDs as fallback\n if (!categoryNames || categoryNames.length === 0) {\n categoryNames = baseProps.categories.map((id: string) =>\n id\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' '),\n );\n }\n\n await displayHandlers.displayResultStart({\n feedData: fallbackData,\n layoutElement,\n isFallback: true,\n categoryNames,\n });\n return;\n }\n }\n }\n\n displayHandlers.displayNoResults({});\n return;\n }\n\n if (count === null) {\n displayHandlers.displayNoResults({\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n\n if (count) {\n helpers.setTotalEntries(count);\n }\n\n // Fetch entries\n const feedData = await fetchStrategy.fetchEntries(variables);\n\n if (feedData && feedData.length > 0) {\n await displayHandlers.displayResultStart({\n feedData,\n layoutElement,\n });\n } else {\n displayHandlers.displayNoResults({\n message: 'An error occurred while fetching the data.',\n });\n }\n };\n\n return {\n start,\n loadMore,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import slider$1 from "../../widgets/slider.mjs";
2
- import { ACADEMIC_SLIDER_QUERY } from "../../strategies/fetch/academic.mjs";
3
- const slider = (props) => slider$1({
4
- ...props,
5
- query: ACADEMIC_SLIDER_QUERY,
6
- url: "https://provost.umd.edu/graphql"
7
- });
8
- export {
9
- slider as default
10
- };
11
- //# sourceMappingURL=slider.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider.mjs","sources":["../../../source/feeds/academic/slider.ts"],"sourcesContent":["/**\n * Academic Slider Feed (Migrated)\n *\n * Displays academic events in a horizontal carousel layout.\n * Uses strategy pattern for GraphQL queries.\n *\n * @module composite/academic/slider-new\n */\n\nimport { slider } from '../../widgets';\nimport { ACADEMIC_SLIDER_QUERY } from '../../strategies/fetch/academic';\nimport { type AcademicSliderProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Creates an academic events slider feed\n *\n * @param props - Slider configuration options\n * @returns ElementModel with slider element and styles\n *\n * @example\n * ```typescript\n * const academicSlider = slider({\n * token: 'your-token',\n * categories: 'engineering,science',\n * isThemeDark: false,\n * });\n * ```\n */\nexport default (props: AcademicSliderProps): ElementModel =>\n slider({\n ...props,\n query: ACADEMIC_SLIDER_QUERY,\n url: 'https://provost.umd.edu/graphql',\n });\n"],"names":["slider"],"mappings":";;AA6BA,MAAA,SAAe,CAAC,UACdA,SAAO;AAAA,EACL,GAAG;AAAA,EACH,OAAO;AAAA,EACP,KAAK;AACP,CAAC;"}