@universityofmaryland/web-feeds-library 1.0.7 → 1.0.8

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # University of Maryland Feeds Library
2
2
 
3
- [![Feeds Version](https://img.shields.io/badge/Feeds-v1.0.7-blue)](https://www.npmjs.com/package/@universityofmaryland/web-feeds-library)
3
+ [![Feeds Version](https://img.shields.io/badge/Feeds-v1.0.8-blue)](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
 
@@ -36,7 +36,7 @@ import { news, events } from '@universityofmaryland/web-feeds-library';
36
36
  const newsGrid = news.grid({
37
37
  token: 'your-api-token',
38
38
  numberOfColumnsToShow: 3,
39
- isThemeDark: false
39
+ isThemeDark: false,
40
40
  });
41
41
 
42
42
  // Add to your page
@@ -57,14 +57,12 @@ const newsGrid = news.grid({
57
57
  token: 'your-api-token',
58
58
  numberOfColumnsToShow: 3,
59
59
  isThemeDark: false,
60
- isTransparent: false
60
+ isTransparent: false,
61
61
  });
62
62
 
63
63
  // List layout - Vertical article list
64
64
  const newsList = news.list({
65
65
  token: 'your-api-token',
66
- showImages: true,
67
- showDates: true
68
66
  });
69
67
 
70
68
  // Featured layout - Hero article with sidebar
@@ -72,7 +70,6 @@ const newsFeatured = news.featured({
72
70
  token: 'your-api-token',
73
71
  isLazyLoad: true,
74
72
  isLayoutReversed: false,
75
- overwriteStickyPosition: 100
76
73
  });
77
74
  ```
78
75
 
@@ -87,21 +84,16 @@ import { events } from '@universityofmaryland/web-feeds-library';
87
84
  const eventsGrid = events.grid({
88
85
  token: 'your-api-token',
89
86
  numberOfColumnsToShow: 3,
90
- showPastEvents: false
91
87
  });
92
88
 
93
89
  // List layout - Chronological list
94
90
  const eventsList = events.list({
95
91
  token: 'your-api-token',
96
- groupByDate: true,
97
- maxEvents: 10
98
92
  });
99
93
 
100
94
  // Slider - Horizontal scroll
101
95
  const eventsSlider = events.slider({
102
96
  token: 'your-api-token',
103
- slidesToShow: 4,
104
- autoPlay: true
105
97
  });
106
98
  ```
107
99
 
@@ -116,7 +108,7 @@ import { academic } from '@universityofmaryland/web-feeds-library';
116
108
  const academicSlider = academic.slider({
117
109
  token: 'your-api-token',
118
110
  department: 'engineering',
119
- programType: 'graduate'
111
+ programType: 'graduate',
120
112
  });
121
113
  ```
122
114
 
@@ -136,6 +128,7 @@ Feeds automatically use UMD styles for consistent appearance:
136
128
  ### Elements Package Usage
137
129
 
138
130
  Feeds are built using Elements for rendering:
131
+
139
132
  - Card elements for item display
140
133
  - Grid layouts from layout elements
141
134
  - Typography from text elements
@@ -161,66 +154,31 @@ All feeds accept these base properties:
161
154
 
162
155
  ```typescript
163
156
  interface BaseFeedProps {
164
- token: string; // Required: API authentication token
165
- isThemeDark?: boolean; // Dark theme styling
166
- isTransparent?: boolean; // Transparent card backgrounds
167
- onError?: (error: Error) => void; // Error handler
168
- onLoad?: (items: any[]) => void; // Load complete handler
157
+ token: string; // Required: API authentication token
158
+ isThemeDark?: boolean; // Dark theme styling
159
+ isTransparent?: boolean; // Transparent card backgrounds
169
160
  }
170
161
  ```
171
162
 
172
163
  ### Layout-Specific Options
173
164
 
174
165
  **Grid Layout:**
166
+
175
167
  ```typescript
176
168
  interface GridProps extends BaseFeedProps {
177
169
  numberOfColumnsToShow?: number; // 1-4, default: 3
178
- gapSize?: 'small' | 'medium' | 'large';
179
- minCardHeight?: number;
180
- }
181
- ```
182
-
183
- **List Layout:**
184
- ```typescript
185
- interface ListProps extends BaseFeedProps {
186
- showImages?: boolean;
187
- showDates?: boolean;
188
- showExcerpts?: boolean;
189
- maxItems?: number;
190
170
  }
191
171
  ```
192
172
 
193
173
  **Featured Layout:**
174
+
194
175
  ```typescript
195
176
  interface FeaturedProps extends BaseFeedProps {
196
177
  isLazyLoad?: boolean;
197
178
  isLayoutReversed?: boolean;
198
- overwriteStickyPosition?: number;
199
- sidebarItemCount?: number;
200
179
  }
201
180
  ```
202
181
 
203
- ## Advanced Features
204
-
205
- ### Filtering and Sorting
206
-
207
- ```javascript
208
- const filteredNews = news.grid({
209
- token: 'your-api-token',
210
- filters: {
211
- categories: ['research', 'campus-life'],
212
- tags: ['featured', 'students'],
213
- dateRange: {
214
- start: new Date('2024-01-01'),
215
- end: new Date('2024-12-31')
216
- },
217
- author: 'John Doe'
218
- },
219
- sortBy: 'date', // 'date' | 'title' | 'popularity'
220
- sortDirection: 'desc' // 'asc' | 'desc'
221
- });
222
- ```
223
-
224
182
  ### Event Handling
225
183
 
226
184
  ```javascript
@@ -238,7 +196,7 @@ const eventsFeed = events.list({
238
196
  onItemClick: (item) => {
239
197
  // Custom click handler
240
198
  console.log('Clicked:', item.title);
241
- }
199
+ },
242
200
  });
243
201
 
244
202
  // Listen for feed updates
@@ -247,38 +205,6 @@ eventsFeed.element.addEventListener('feed:update', (e) => {
247
205
  });
248
206
  ```
249
207
 
250
- ### Pagination
251
-
252
- ```javascript
253
- const paginatedNews = news.list({
254
- token: 'your-api-token',
255
- itemsPerPage: 10,
256
- showPagination: true,
257
- onPageChange: (page) => {
258
- console.log(`Navigated to page ${page}`);
259
- }
260
- });
261
- ```
262
-
263
- ### Custom Templates
264
-
265
- Override default item rendering:
266
-
267
- ```javascript
268
- const customNews = news.grid({
269
- token: 'your-api-token',
270
- renderItem: (item) => {
271
- return `
272
- <div class="custom-news-item">
273
- <h3>${item.title}</h3>
274
- <time>${item.date}</time>
275
- <p>${item.excerpt}</p>
276
- </div>
277
- `;
278
- }
279
- });
280
- ```
281
-
282
208
  ## Performance Features
283
209
 
284
210
  ### Lazy Loading
@@ -289,29 +215,6 @@ Load content as users scroll:
289
215
  const lazyFeed = news.featured({
290
216
  token: 'your-api-token',
291
217
  isLazyLoad: true,
292
- lazyLoadOffset: 200 // pixels before viewport
293
- });
294
- ```
295
-
296
- ### Caching
297
-
298
- Automatic caching reduces API calls:
299
-
300
- ```javascript
301
- const cachedFeed = events.grid({
302
- token: 'your-api-token',
303
- cacheTimeout: 300000, // 5 minutes
304
- forceFresh: false // Use cache if available
305
- });
306
- ```
307
-
308
- ### Infinite Scroll
309
-
310
- ```javascript
311
- const infiniteFeed = news.list({
312
- token: 'your-api-token',
313
- enableInfiniteScroll: true,
314
- infiniteScrollThreshold: 100 // pixels from bottom
315
218
  });
316
219
  ```
317
220
 
@@ -320,17 +223,17 @@ const infiniteFeed = news.list({
320
223
  Full TypeScript definitions included:
321
224
 
322
225
  ```typescript
323
- import type {
226
+ import type {
324
227
  NewsFeedProps,
325
228
  EventsFeedProps,
326
229
  FeedItem,
327
- FeedEvents
230
+ FeedEvents,
328
231
  } from '@universityofmaryland/web-feeds-library';
329
232
 
330
233
  const newsProps: NewsFeedProps = {
331
234
  token: 'token',
332
235
  numberOfColumnsToShow: 3,
333
- isThemeDark: false
236
+ isThemeDark: false,
334
237
  };
335
238
  ```
336
239
 
@@ -344,6 +247,7 @@ const newsProps: NewsFeedProps = {
344
247
  ## Accessibility
345
248
 
346
249
  All feed components are WCAG 2.1 AA compliant:
250
+
347
251
  - Semantic HTML markup
348
252
  - ARIA live regions for updates
349
253
  - Keyboard navigation
@@ -352,9 +256,7 @@ All feed components are WCAG 2.1 AA compliant:
352
256
 
353
257
  ## Documentation
354
258
 
355
- - **[Feed Components](https://umd-digital.github.io/design-system/docs/feeds/)** - Complete reference
356
- - **[API Documentation](https://umd-digital.github.io/design-system/docs/feeds/modules/)** - TypeScript APIs
357
- - **[Integration Examples](https://github.com/umd-digital/design-system/tree/main/packages/feeds/examples)** - Sample implementations
259
+ - **[Feed Components](./)** - Complete reference
358
260
  - **[Design System](https://designsystem.umd.edu)** - Full design system docs
359
261
 
360
262
  ## Testing
@@ -376,4 +278,4 @@ See the [main repository](https://github.com/umd-digital/design-system) for cont
376
278
 
377
279
  ## License
378
280
 
379
- University of Maryland
281
+ University of Maryland
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=grouped.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouped.test.d.ts","sourceRoot":"","sources":["../../../../source/composite/events/__tests__/grouped.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../source/composite/events/common/fetch.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACb,MAAM,WAAW,CAAC;AAEnB,UAAU,aAAc,SAAQ,YAAY;CAAG;AAE/C,UAAU,WAAY,SAAQ,iBAAiB;IAC7C,kBAAkB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC9D,gBAAgB,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AAExE,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG;IACtD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AA6EF,eAAO,MAAM,IAAI,UAAiB,aAAa,kBAqB9C,CAAC;AAEF,eAAO,MAAM,KAAK,UAAiB,WAAW,kBA2B7C,CAAC"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../source/composite/events/common/fetch.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACb,MAAM,WAAW,CAAC;AAEnB,UAAU,aAAc,SAAQ,YAAY;CAAG;AAE/C,UAAU,WAAY,SAAQ,iBAAiB;IAC7C,kBAAkB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC9D,gBAAgB,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AAExE,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG;IACtD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAyEF,eAAO,MAAM,IAAI,UAAiB,aAAa,kBAqB9C,CAAC;AAEF,eAAO,MAAM,KAAK,UAAiB,WAAW,kBA2B7C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type ListProps } from './_types';
2
+ import { type ElementModel } from '../../_types';
3
+ declare const _default: (props: ListProps) => ElementModel;
4
+ export default _default;
5
+ //# sourceMappingURL=grouped.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouped.d.ts","sourceRoot":"","sources":["../../../source/composite/events/grouped.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,SAAS,EAAoC,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;gCAuG1B,SAAS,KAAG,YAAY;AAA/C,wBA0IO"}
@@ -1,4 +1,5 @@
1
1
  export { default as grid } from './grid';
2
2
  export { default as list } from './list';
3
3
  export { default as slider } from './slider';
4
+ export { default as grouped } from './grouped';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/composite/events/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkBzC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiBzC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/composite/events/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkBzC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiBzC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAkB7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"featured.d.ts","sourceRoot":"","sources":["../../../source/composite/news/featured.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;gCAE1B,aAAa,KAAG,YAAY;AAAnD,wBAiMO"}
1
+ {"version":3,"file":"featured.d.ts","sourceRoot":"","sources":["../../../source/composite/news/featured.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;gCAE1B,aAAa,KAAG,YAAY;AAAnD,wBAgMO"}
@@ -21,6 +21,7 @@ export declare const gridOffsetGap: ({ count, isLayoutReversed, overwriteStickyP
21
21
  overwriteStickyPosition?: number;
22
22
  }) => {
23
23
  element: HTMLElement;
24
+ className: string;
24
25
  styles: string;
25
26
  };
26
27
  //# sourceMappingURL=layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../source/elements/layout.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,QAAO;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAe7D,CAAC;AAEL,eAAO,MAAM,IAAI,eAEd;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,KAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAiBtC,CAAC;AAEL,eAAO,MAAM,OAAO,eAEjB;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,KAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAetC,CAAC;AAEL,eAAO,MAAM,aAAa,0DAIvB;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC,KAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAgCtC,CAAC"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../source/elements/layout.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,QAAO;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAe7D,CAAC;AAEL,eAAO,MAAM,IAAI,eAEd;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,KAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAiBtC,CAAC;AAEL,eAAO,MAAM,OAAO,eAEjB;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,KAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAetC,CAAC;AAEL,eAAO,MAAM,aAAa,0DAIvB;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;;;;CAyCG,CAAC"}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- !function(e,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n(require("@universityofmaryland/web-styles-library"),require("@universityofmaryland/web-elements-library"));else if("function"==typeof define&&define.amd)define(["@universityofmaryland/web-styles-library","@universityofmaryland/web-elements-library"],n);else{var t="object"==typeof exports?n(require("@universityofmaryland/web-styles-library"),require("@universityofmaryland/web-elements-library")):n(e["@universityofmaryland/web-styles-library"],e["@universityofmaryland/web-elements-library"]);for(var a in t)("object"==typeof exports?exports:e)[a]=t[a]}}(self,((__WEBPACK_EXTERNAL_MODULE__708__,__WEBPACK_EXTERNAL_MODULE__149__)=>(()=>{"use strict";var __webpack_modules__={572:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n academic: () => (/* reexport */ academic_namespaceObject),\n events: () => (/* reexport */ composite_events_namespaceObject),\n news: () => (/* reexport */ news_namespaceObject)\n});\n\n// NAMESPACE OBJECT: ./source/composite/academic/index.ts\nvar academic_namespaceObject = {};\n__webpack_require__.r(academic_namespaceObject);\n__webpack_require__.d(academic_namespaceObject, {\n slider: () => (academic_slider)\n});\n\n// NAMESPACE OBJECT: ./source/composite/events/index.ts\nvar composite_events_namespaceObject = {};\n__webpack_require__.r(composite_events_namespaceObject);\n__webpack_require__.d(composite_events_namespaceObject, {\n grid: () => (events_grid),\n list: () => (list),\n slider: () => (events_slider)\n});\n\n// NAMESPACE OBJECT: ./source/composite/news/index.ts\nvar news_namespaceObject = {};\n__webpack_require__.r(news_namespaceObject);\n__webpack_require__.d(news_namespaceObject, {\n featured: () => (featured),\n grid: () => (news_grid),\n list: () => (news_list)\n});\n\n;// CONCATENATED MODULE: ./source/macros/aria-live.ts\nconst create = ({ message }) => {\n const container = document.createElement('div');\n const textElement = document.createElement('p');\n container.setAttribute('aria-live', 'polite');\n container.setAttribute('role', 'status');\n container.classList.add('sr-only');\n textElement.innerHTML = message;\n container.appendChild(textElement);\n return container;\n};\nconst update = ({ container, message, }) => {\n const element = container.querySelector(`[aria-live]`);\n const textElement = element.querySelector('p');\n if (textElement)\n textElement.innerHTML = message;\n};\n/* harmony default export */ const aria_live = ({\n create,\n update,\n});\n\n// EXTERNAL MODULE: external \"@universityofmaryland/web-styles-library\"\nvar web_styles_library_ = __webpack_require__(708);\n// EXTERNAL MODULE: external \"@universityofmaryland/web-elements-library\"\nvar web_elements_library_ = __webpack_require__(149);\n;// CONCATENATED MODULE: ./source/macros/lazy-load.ts\n\n\nconst lazy_load_create = ({ callback, isThemeDark, isLazyLoad, totalEntries, offset, }) => {\n if (!isLazyLoad)\n return;\n if (!totalEntries)\n return;\n if (!offset)\n return;\n if (!callback)\n return;\n if (offset >= totalEntries)\n return;\n const composite = web_elements_library_.Model.ElementModel.layout.alignedCenter({\n element: document.createElement('div'),\n isThemeDark,\n elementStyles: {\n element: {\n marginTop: `${web_styles_library_.token.spacing.lg}`,\n },\n },\n });\n const ctaButton = web_elements_library_.Model.ElementModel.actions.outlineOptions({\n element: document.createElement('button'),\n isThemeDark,\n });\n ctaButton.element.innerHTML = 'Load more';\n ctaButton.element.addEventListener('click', callback);\n composite.element.appendChild(ctaButton.element);\n composite.styles += ctaButton.styles;\n return composite;\n};\nconst remove = ({ container }) => {\n const button = container.querySelector(`.${web_styles_library_.layout.alignment.block.center.className}`);\n if (button)\n button.remove();\n};\n/* harmony default export */ const lazy_load = ({\n remove,\n create: lazy_load_create,\n});\n\n;// CONCATENATED MODULE: ./source/macros/loader.ts\nconst ID_UMD_LOADER = 'umd-loader-container';\nconst loader_styles = `\n @keyframes loader-first-animation {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n \n @keyframes loader-last-animation {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n \n @keyframes loader-middle-animation {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n }\n\n .${ID_UMD_LOADER} {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px 0;\n min-height: 40px;\n position: relative;\n grid-column: 1 / -1;\n }\n\n .${ID_UMD_LOADER} > div {\n position: relative;\n }\n\n .${ID_UMD_LOADER} > div > div {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--grayDark);\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n }\n\n .${ID_UMD_LOADER} > div > div:first-child {\n left: 5px;\n animation: loader-first-animation 0.6s infinite;\n }\n\n .${ID_UMD_LOADER} > div > div:nth-child(2) {\n left: 5px;\n animation: loader-middle-animation 0.6s infinite;\n }\n\n .${ID_UMD_LOADER} > div > div:nth-child(3) {\n left: 24px;\n animation: loader-middle-animation 0.6s infinite;\n }\n\n .${ID_UMD_LOADER} > div > div:last-child {\n left: 45px;\n animation: loader-last-animation 0.6s infinite;\n }\n`;\nconst loader_create = () => {\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const innerElmOne = document.createElement('div');\n const innerElmTwo = document.createElement('div');\n const innerElmThree = document.createElement('div');\n const innerElmFour = document.createElement('div');\n container.classList.add(ID_UMD_LOADER);\n wrapper.appendChild(innerElmOne);\n wrapper.appendChild(innerElmTwo);\n wrapper.appendChild(innerElmThree);\n wrapper.appendChild(innerElmFour);\n container.appendChild(wrapper);\n return container;\n};\nconst loader_remove = ({ container }) => {\n const loader = container.querySelector(`.${ID_UMD_LOADER}`);\n if (loader)\n loader.remove();\n};\nconst display = ({ container }) => {\n const loader = loader_create();\n container.appendChild(loader);\n};\n/* harmony default export */ const macros_loader = ({\n create: loader_create,\n display,\n remove: loader_remove,\n});\n\n;// CONCATENATED MODULE: ./source/macros/no-results.ts\n\n\n/* harmony default export */ const no_results = (({ message, linkUrl, linkText, isThemeDark, isAlignedCenter = true, }) => {\n const composite = web_elements_library_.Model.ElementModel.layout.gridStacked({\n element: document.createElement('div'),\n isThemeDark,\n elementStyles: {\n element: {\n [`& *`]: {\n textAlign: isAlignedCenter ? 'center' : 'left',\n },\n [`& *:not(:first-child)`]: {\n marginTop: `${web_styles_library_.token.spacing.md}`,\n },\n },\n },\n });\n const headline = web_elements_library_.Model.ElementModel.headline.sansExtraLarge({\n element: document.createElement('p'),\n isThemeDark,\n elementStyles: {\n element: {\n textTransform: 'uppercase',\n },\n },\n });\n headline.element.innerHTML = message || 'No results found';\n composite.element.appendChild(headline.element);\n composite.styles += headline.styles;\n if (linkUrl && linkText) {\n const link = document.createElement('a');\n link.innerHTML = linkText;\n link.setAttribute('href', linkUrl);\n link.setAttribute('target', '_blank');\n link.setAttribute('rel', 'noopener noreferrer');\n const ctaButton = web_elements_library_.Atomic.actions.options({\n element: link,\n isTypeOutline: true,\n isThemeDark,\n });\n composite.element.appendChild(ctaButton.element);\n composite.styles += ctaButton.styles;\n }\n return composite;\n});\n\n;// CONCATENATED MODULE: ./source/macros/slider.ts\n\n\nconst { FetchGraphQL } = web_elements_library_.Utilities.network;\n/* harmony default export */ const slider = (({ token, query, url, categories, isThemeDark, headline, actions, }) => {\n const dataSlider = document.createElement('div');\n const slider = web_elements_library_.Composite.slider.events({\n isThemeDark,\n dataSlider,\n headline,\n actions,\n });\n let variables = { startDate: new Date().toDateString() };\n let shadowRoot = null;\n const setShadowStyles = async ({ shadowRoot, styles, }) => {\n const styleElement = document.createElement('style');\n const optimizedCss = await web_styles_library_.utilities.transform.css.removeDuplicates(styles);\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const loadEvents = async () => {\n if (categories) {\n const related = categories.split(',');\n variables.related = related;\n }\n const fetchVariables = {\n query,\n url,\n token,\n variables,\n };\n const feedData = await FetchGraphQL(fetchVariables);\n const slides = feedData?.data?.entries?.events.map((data, i) => {\n const headline = document.createElement('p');\n headline.textContent = data.title;\n const dateSign = web_elements_library_.Atomic.events.sign({\n startMonth: data.startMonth,\n startDay: data.startDay,\n endDay: data.endDay,\n endMonth: data.endMonth,\n isThemeDark,\n });\n const textLockup = web_elements_library_.Atomic.textLockup.date({\n headline,\n isThemeDark,\n dateSign,\n });\n if (i === 0) {\n slider.styles += textLockup.styles;\n slider.styles += dateSign.styles;\n }\n return textLockup;\n });\n slides?.forEach((slide) => dataSlider.appendChild(slide.element));\n if (shadowRoot)\n setShadowStyles({ shadowRoot, styles: slider.styles });\n setTimeout(() => {\n slider.events.load();\n }, 100);\n };\n loadEvents();\n return {\n ...slider,\n events: {\n callback,\n },\n };\n});\n\n;// CONCATENATED MODULE: ./source/macros/index.ts\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./source/composite/academic/slider.ts\n\nconst QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\nconst query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n calendarId: [4, 2]\n ) {\n ${QUERY_DATA}\n }\n }\n }\n`;\n/* harmony default export */ const academic_slider = ((props) => slider({\n ...props,\n query,\n url: 'https://provost.umd.edu/graphql',\n}));\n\n;// CONCATENATED MODULE: ./source/composite/academic/index.ts\n\n\n;// CONCATENATED MODULE: ./source/elements/asset.ts\nconst standard = ({ images, url, }) => {\n const image = images[0];\n const imageElement = document.createElement('img');\n imageElement.src = image.url;\n imageElement.alt = image.altText;\n if (url) {\n const link = document.createElement('a');\n link.setAttribute('target', '_blank');\n link.setAttribute('href', url);\n link.setAttribute('aria-label', `Maryland Today Article with image ${image.altText}`);\n link.appendChild(imageElement);\n return link;\n }\n return imageElement;\n};\n\n;// CONCATENATED MODULE: ./source/elements/layout.ts\n\n\nconst stacked = () => web_elements_library_.Model.ElementModel.layout.gridStacked({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n gridGap: `${web_styles_library_.token.spacing.md}`,\n [` > *`]: {\n containerType: 'inline-size',\n },\n [`& .${web_styles_library_.element.asset.image.wrapperScaled.className}`]: {\n alignSelf: 'flex-start',\n },\n },\n },\n});\nconst grid = ({ count = 2, }) => web_elements_library_.Model.ElementModel.layout.grid({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n [` > *`]: {\n containerType: 'inline-size',\n [`@media (${web_styles_library_.token.media.queries.large.min})`]: {\n minHeight: '560px !important',\n },\n },\n },\n },\n isGap: false,\n isColumnsTwo: count === 2,\n isColumnsThree: count === 3,\n isColumnsFour: count === 4,\n});\nconst gridGap = ({ count = 2, }) => web_elements_library_.Model.ElementModel.layout.grid({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n [` > *`]: {\n alignSelf: 'flex-start',\n containerType: 'inline-size',\n },\n },\n },\n isGap: true,\n isColumnsTwo: count === 2,\n isColumnsThree: count === 3,\n isColumnsFour: count === 4,\n});\nconst gridOffsetGap = ({ count = 2, isLayoutReversed, overwriteStickyPosition = 0, }) => web_elements_library_.Model.ElementModel.layout.grid({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n [` > *`]: {\n alignSelf: 'flex-start',\n containerType: 'inline-size',\n },\n [` > *:first-child`]: {\n order: isLayoutReversed ? 2 : -1,\n },\n [`& .${web_styles_library_.element.composite.card.overlay.image.tint.className}`]: {\n [`@media (${web_styles_library_.token.media.queries.large.min})`]: {\n minHeight: '560px !important',\n height: 'inherit',\n position: 'sticky',\n top: `${overwriteStickyPosition}px`,\n },\n [`*`]: {\n color: `${web_styles_library_.token.color.white}`,\n },\n },\n },\n },\n isGap: true,\n isColumnsTwo: count === 2,\n isColumnsThree: count === 3,\n isColumnsFour: count === 4,\n});\n\n;// CONCATENATED MODULE: ./source/elements/text.ts\nconst summary = ({ text }) => {\n if (text) {\n const textElement = document.createElement('div');\n const textNode = document.createElement('p');\n textNode.innerHTML = text;\n textElement.appendChild(textNode);\n return textElement;\n }\n return null;\n};\nconst headline = ({ text, url }) => {\n if (text && url) {\n const headline = document.createElement('p');\n const headlineLink = document.createElement('a');\n headlineLink.href = url;\n headlineLink.innerHTML = text;\n headlineLink.target = '_blank';\n headlineLink.rel = 'noopener noreferrer';\n headline.appendChild(headlineLink);\n return headline;\n }\n return null;\n};\nconst date = ({ date, dateFormatted, }) => {\n if (date && dateFormatted) {\n const dateElement = document.createElement('time');\n dateElement.innerHTML = dateFormatted;\n dateElement.setAttribute('datetime', date);\n return dateElement;\n }\n return null;\n};\n\n;// CONCATENATED MODULE: ./source/elements/index.ts\n\n\n\n\n;// CONCATENATED MODULE: ./source/composite/events/common/queries.ts\nconst EVENTS_COUNT_QUERY = `\nquery getEventsCount($startDate: String!, $related: [QueryArgument]) {\n count: solspace_calendar {\n events(relatedTo: $related, loadOccurrences: true, startsAfterOrAt: $startDate) {\n ... on communications_Event {\n id\n }\n ... on submission_Event {\n id\n }\n }\n }\n}\n`;\nconst EVENTS_QUERY = `\nquery getEvents($startDate: String!, $related: [QueryArgument], $limit: Int, $offset: Int) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: $limit\n offset: $offset\n ) {\n ... on communications_Event {\n id\n title\n url\n startDayOfWeek: startDate @formatDateTime(format: \"D\")\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n startStamp: startDate @formatDateTime(format: \"Y-m-d\")\n startTime: startDate @formatDateTime(format: \"g:ia\")\n endDayOfWeek: endDate @formatDateTime(format: \"D\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n endTime: endDate @formatDateTime(format: \"g:ia\")\n allDay\n desciption: commonRichText\n summary: commonRichTextTwo\n image: commonAssetHeroImageSingle {\n title\n commonPlainTextTwo: alt\n url\n }\n location: categoriesCampusBuildingSingle {\n title\n }\n link: commonEntriesLinkSingle {\n ... on links_links_Entry {\n type: linksDropdownSelector\n externalUrl: commonPlainTextThree\n altTitle: commonPlainTextTwo\n title\n internalLinks: calendarEntriesEvent {\n id\n url\n }\n }\n }\n }\n ... on submission_Event {\n id\n title\n url\n startDayOfWeek: startDate @formatDateTime(format: \"D\")\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n startStamp: startDate @formatDateTime(format: \"Y-m-d\")\n startTime: startDate @formatDateTime(format: \"g:ia\")\n endDayOfWeek: endDate @formatDateTime(format: \"D\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n endTime: endDate @formatDateTime(format: \"g:ia\")\n allDay\n desciption: commonRichText\n summary: commonRichTextTwo\n image: commonAssetHeroImageSingle {\n title\n commonPlainTextTwo: alt\n url\n }\n location: categoriesCampusBuildingSingle {\n title\n }\n link: commonEntriesLinkSingle {\n ... on links_links_Entry {\n type: linksDropdownSelector\n externalUrl: commonPlainTextThree\n altTitle: commonPlainTextTwo\n title\n internalLinks: calendarEntriesEvent {\n id\n url\n }\n }\n }\n }\n }\n }\n}\n`;\n\n;// CONCATENATED MODULE: ./source/composite/events/common/data.ts\n\n\n\nconst lazyLoadVariables = (props) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => load(props),\n});\nconst apiVariables = (props) => {\n const { categories, getOffset, token, numberOfRowsToStart, numberOfColumnsToShow = 1, } = props;\n const obj = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n if (categories) {\n obj.related = categories;\n }\n return obj;\n};\nconst data_display = ({ entry, isThemeDark, }) => ({\n headline: headline({\n text: entry.title,\n url: entry.url,\n }),\n text: summary({ text: entry.summary }),\n eventMeta: web_elements_library_.Atomic.events.meta({\n ...entry,\n isThemeDark,\n }),\n isThemeDark,\n});\n\n;// CONCATENATED MODULE: ./source/composite/events/common/fetch.ts\n\n\n\n\nconst ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst fetchFeed = async ({ limit, related, offset, token, query, }) => {\n if (!token)\n throw new Error('Token not found');\n const variables = {\n startDate: new Date().toDateString(),\n limit,\n related,\n offset,\n };\n return await web_elements_library_.Utilities.network.FetchGraphQL({\n query,\n url: 'https://calendar.umd.edu/graphql',\n token: token,\n variables,\n });\n};\nconst getCount = async ({ variables }) => {\n const feedData = await fetchFeed({\n ...variables,\n query: EVENTS_COUNT_QUERY,\n });\n console.log(feedData);\n if (!feedData || !feedData.data || feedData.message) {\n if (feedData.message)\n console.error(feedData.message);\n return null;\n }\n return feedData?.data?.count?.events?.length || 0;\n};\nconst getEntries = async ({ variables, }) => {\n const feedData = await fetchFeed({ ...variables, query: EVENTS_QUERY });\n const graceFail = ({ message }) => {\n throw new Error(message);\n };\n if (!feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message) {\n if (!feedData)\n graceFail({ message: 'Feed not found' });\n if (!feedData.data)\n graceFail({ message: 'Feed data not found' });\n if (!feedData.data.entries)\n graceFail({ message: 'Feed entries not found' });\n if (!feedData.data.entries.events)\n graceFail({ message: 'Feed events not found' });\n if (!feedData.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n }\n console.log('Feed data fetched successfully:', feedData);\n return feedData.data.entries.events;\n};\nconst load = async (props) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n lazy_load.remove({ container });\n macros_loader.display({ container });\n getEntries({\n variables: apiVariables(props),\n }).then((feedData) => {\n displayResults({ feedData });\n aria_live.update({\n container,\n message: `Showing ${currentCount + feedData.length} of ${totalEntries} articles`,\n });\n });\n};\nconst start = async (props) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n await getCount({\n variables: apiVariables(props),\n }).then((count) => {\n if (count === 0) {\n displayNoResults({ ...props });\n return;\n }\n if (count) {\n setTotalEntries(count);\n }\n if (count === null) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n });\n getEntries({\n variables: apiVariables(props),\n }).then((feedData) => displayResultStart({ ...props, feedData }));\n};\n\n;// CONCATENATED MODULE: ./source/utilities/events/index.ts\nconst eventNames = {\n FEED_LOADED: 'feed:loaded',\n FEED_ERROR: 'feed:error',\n};\nconst dispatch = (element, eventName, detail) => {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n cancelable: true,\n });\n return element.dispatchEvent(event);\n};\nconst listen = (element, eventName, callback, options) => {\n const eventListener = (event) => {\n const customEvent = event;\n callback(customEvent.detail);\n };\n element.addEventListener(eventName, eventListener, options);\n return () => {\n element.removeEventListener(eventName, eventListener, options);\n };\n};\n\n;// CONCATENATED MODULE: ./source/utilities/index.ts\n\n\n\n;// CONCATENATED MODULE: ./source/composite/events/common/display.ts\n\n\n\n\n\nconst display_ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst setShadowStyles = async ({ shadowRoot, styles, }) => {\n const styleElement = document.createElement('style');\n const optimizedCss = await web_styles_library_.utilities.transform.css.removeDuplicates(styles);\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n};\nconst noResults = ({ getContainer, getStyles, getShadowRoot, setStyles, isThemeDark, message = 'No events found', linkUrl = 'https://calendar.umd.edu', linkText = 'View all events', }) => {\n const container = getContainer();\n const shadowRoot = getShadowRoot();\n const noResultsContent = no_results({\n message,\n linkUrl,\n linkText,\n isThemeDark,\n });\n const ariaLiveContent = aria_live.create({\n message,\n });\n container.innerHTML = '';\n container.appendChild(noResultsContent.element);\n container.appendChild(ariaLiveContent);\n setStyles(noResultsContent.styles);\n dispatch(container, eventNames.FEED_ERROR, {\n error: 'No results found',\n message,\n });\n setTimeout(() => {\n const styles = getStyles();\n if (shadowRoot) {\n setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n }, 100);\n};\nconst resultLoad = async (props) => {\n const { entries, getContainer, setStyles, setOffset } = props;\n const container = getContainer();\n const grid = container.querySelector(`#${display_ID_GRID_LAYOUT_CONTAINER}`);\n macros_loader.remove({ container });\n lazy_load.remove({ container });\n setOffset(entries.length);\n return new Promise((resolve) => {\n entries.forEach((entry) => {\n grid.appendChild(entry.element);\n setStyles(entry.styles);\n });\n const lazyLoadButton = lazy_load.create(lazyLoadVariables({\n ...props,\n callback: load,\n }));\n if (lazyLoadButton) {\n container.appendChild(lazyLoadButton.element);\n setStyles(lazyLoadButton.styles);\n }\n resolve();\n });\n};\nconst resultStart = (props) => {\n const { feedData, numberOfColumnsToShow = 1, numberOfRowsToStart, isLazyLoad, displayResults, getContainer, getTotalEntries, setOffset, setStyles, layoutElement, } = props;\n const container = getContainer();\n const totalEntries = getTotalEntries();\n const showAmount = numberOfColumnsToShow || 1 * numberOfRowsToStart;\n const message = isLazyLoad\n ? `Showing ${showAmount} of ${totalEntries} articles`\n : `Showing ${showAmount} articles`;\n layoutElement.element.setAttribute('id', display_ID_GRID_LAYOUT_CONTAINER);\n container.appendChild(layoutElement.element);\n setStyles(layoutElement.styles);\n dispatch(container, eventNames.FEED_LOADED, {\n items: feedData,\n count: feedData.length,\n total: totalEntries || feedData.length,\n });\n displayResults({ feedData });\n container.appendChild(aria_live.create({\n message,\n }));\n};\n\n;// CONCATENATED MODULE: ./source/composite/events/grid.ts\n\n\n\n\n\n\n/* harmony default export */ const events_grid = ((props) => (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow } = props;\n const loader = macros_loader.create();\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader_styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n await resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) => web_elements_library_.Composite.card.block({\n ...data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n isTransparent,\n })),\n });\n if (shadowRoot) {\n setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const layoutElement = gridGap({\n count: numberOfColumnsToShow,\n });\n container.appendChild(loader);\n start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: resultStart,\n displayNoResults: noResults,\n layoutElement,\n isThemeDark,\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/events/list.ts\n\n\n\n\n\n\n/* harmony default export */ const list = ((props) => (() => {\n const { isThemeDark } = props;\n const loader = macros_loader.create();\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader_styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n await resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) => web_elements_library_.Composite.card.list({\n ...data_display({ entry, isThemeDark }),\n dateSign: web_elements_library_.Atomic.events.sign({\n ...entry,\n isThemeDark,\n isLargeSize: true,\n }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n })),\n });\n if (shadowRoot) {\n setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n container.appendChild(loader);\n start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: resultStart,\n displayNoResults: noResults,\n layoutElement: stacked(),\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/events/slider.ts\n\nconst slider_QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\nconst slider_query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n ) {\n ... on submission_Event {\n ${slider_QUERY_DATA}\n }\n }\n }\n }\n`;\n/* harmony default export */ const events_slider = ((props) => slider({\n ...props,\n query: slider_query,\n url: 'https://calendar.umd.edu/graphql',\n}));\n\n;// CONCATENATED MODULE: ./source/composite/events/index.ts\n\n\n\n\n;// CONCATENATED MODULE: ./source/composite/news/common/queries.ts\nconst ARTICLES_QUERY = `\n query getArticles($related: [QueryArgument], $relatedToAll: [QueryArgument], $limit: Int, $offset: Int, $not: [QueryArgument]) {\n entryCount(section: \"articles\", relatedTo: $related,relatedToAll: $relatedToAll)\n entries(\n section: \"articles\",\n relatedTo: $related,\n relatedToAll: $relatedToAll,\n limit: $limit,\n offset: $offset,\n id: $not\n ) {\n ... on articles_today_Entry {\n id\n title\n date: postDate\n dateFormatted: postDate @formatDateTime(format: \"M d, Y\")\n summary: genericText\n url\n image:articlesHeroImage {\n url\n ... on hero_Asset {\n id\n altText: genericText\n }\n }\n categories:categoryTodaySectionMultiple {\n title\n url\n }\n }\n }\n }\n`;\n\n;// CONCATENATED MODULE: ./source/composite/news/common/data.ts\n\n\nconst data_lazyLoadVariables = (props) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => fetch_load(props),\n});\nconst data_apiVariables = (props) => {\n const { isUnion, categories, getOffset, token, numberOfRowsToStart, numberOfColumnsToShow = 1, entriesToRemove, } = props;\n const obj = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n if (!isUnion && categories) {\n obj.relatedToAll = categories;\n }\n if (isUnion && categories) {\n obj.related = categories;\n }\n if (entriesToRemove) {\n obj.not = ['not', ...entriesToRemove];\n }\n return obj;\n};\nconst common_data_display = ({ entry, isThemeDark, }) => ({\n newsId: entry.id.toString(),\n headline: headline({\n text: entry.title,\n url: entry.url,\n }),\n text: summary({ text: entry.summary }),\n date: date({\n date: entry.date,\n dateFormatted: entry.dateFormatted,\n }),\n isThemeDark,\n});\n\n;// CONCATENATED MODULE: ./source/composite/news/common/fetch.ts\n\n\n\n\nconst fetch_ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst fetch_getEntries = async ({ limit, not, offset, related, relatedToAll, token, }) => {\n if (!token)\n throw new Error('Token not found');\n const graceFail = ({ message }) => {\n console.error(message);\n };\n const variables = {\n limit,\n related,\n relatedToAll,\n offset,\n not,\n };\n const feedData = await web_elements_library_.Utilities.network.FetchGraphQL({\n query: ARTICLES_QUERY,\n url: 'https://today.umd.edu/graphql',\n token: token,\n variables,\n });\n if (!feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message) {\n if (!feedData)\n graceFail({ message: 'Feed not found' });\n if (feedData?.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n return null;\n }\n return {\n entries: feedData.data.entries,\n count: feedData.data.entryCount,\n };\n};\nconst fetch_load = async (props) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n lazy_load.remove({ container });\n macros_loader.display({ container });\n fetch_getEntries(data_apiVariables(props)).then((feedData) => {\n if (feedData) {\n displayResults({ feedData: feedData.entries });\n aria_live.update({\n container,\n message: `Showing ${currentCount + feedData.entries.length} of ${totalEntries} articles`,\n });\n }\n });\n};\nconst fetch_start = async (props) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n fetch_getEntries(data_apiVariables(props)).then((feedData) => {\n if (!feedData || !feedData.entries) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n const totalEntries = feedData.count;\n if (totalEntries === 0) {\n displayNoResults({ ...props });\n return;\n }\n setTotalEntries(totalEntries);\n return displayResultStart({ ...props, feedData: feedData.entries });\n });\n};\n\n;// CONCATENATED MODULE: ./source/composite/news/common/display.ts\n\n\n\n\n\nconst common_display_ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst display_setShadowStyles = async ({ shadowRoot, styles, }) => {\n const styleElement = document.createElement('style');\n const optimizedCss = await web_styles_library_.utilities.transform.css.removeDuplicates(styles);\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n};\nconst display_noResults = ({ getContainer, getStyles, getShadowRoot, setStyles, message = 'No results found', linkUrl = 'https://today.umd.edu', linkText = 'View all articles', isThemeDark, }) => {\n const container = getContainer();\n const shadowRoot = getShadowRoot();\n const noResultsContent = no_results({\n message,\n linkUrl,\n linkText,\n isThemeDark,\n });\n const ariaLiveContent = aria_live.create({\n message,\n });\n container.innerHTML = '';\n container.appendChild(noResultsContent.element);\n container.appendChild(ariaLiveContent);\n setStyles(noResultsContent.styles);\n dispatch(container, eventNames.FEED_ERROR, {\n error: 'No results found',\n message,\n });\n setTimeout(() => {\n const styles = getStyles();\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n }, 100);\n};\nconst display_resultLoad = async (props) => {\n const { entries, getContainer, setStyles, setOffset } = props;\n const container = getContainer();\n const grid = container.querySelector(`#${common_display_ID_GRID_LAYOUT_CONTAINER}`);\n macros_loader.remove({ container });\n lazy_load.remove({ container });\n setOffset(entries.length);\n return new Promise((resolve) => {\n entries.forEach((entry) => {\n grid.appendChild(entry.element);\n setStyles(entry.styles);\n });\n const lazyLoadButton = lazy_load.create(data_lazyLoadVariables({\n ...props,\n callback: fetch_load,\n }));\n if (lazyLoadButton) {\n container.appendChild(lazyLoadButton.element);\n setStyles(lazyLoadButton.styles);\n }\n resolve();\n });\n};\nconst display_resultStart = (props) => {\n const { feedData, numberOfColumnsToShow = 1, numberOfRowsToStart, isLazyLoad, displayResults, getContainer, getTotalEntries, setTotalEntries, setStyles, layoutElement, } = props;\n const container = getContainer();\n const totalEntries = getTotalEntries();\n const showAmount = numberOfColumnsToShow || 1 * numberOfRowsToStart;\n const message = isLazyLoad\n ? `Showing ${showAmount} of ${totalEntries} articles`\n : `Showing ${showAmount} articles`;\n if (totalEntries)\n setTotalEntries(totalEntries);\n layoutElement.element.setAttribute('id', common_display_ID_GRID_LAYOUT_CONTAINER);\n container.appendChild(layoutElement.element);\n setStyles(layoutElement.styles);\n dispatch(container, eventNames.FEED_LOADED, {\n items: feedData,\n count: feedData.length,\n total: totalEntries || feedData.length,\n });\n displayResults({ feedData });\n container.appendChild(aria_live.create({\n message,\n }));\n};\n\n;// CONCATENATED MODULE: ./source/composite/news/featured.ts\n\n\n\n\n\n\n\n/* harmony default export */ const featured = ((props) => (() => {\n const { isThemeDark, isLazyLoad, isLayoutReversed, isTransparent, overwriteStickyPosition, } = props;\n const loader = macros_loader.create();\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let numberOfColumnsToShow = 3;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader_styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const setPosition = (position) => {\n const overlayElement = container.querySelector(`.${web_styles_library_.element.composite.card.overlay.image.tint.className}`);\n if (overlayElement)\n overlayElement.style.top = `${position}px`;\n };\n const layoutElement = gridGap({ count: 2 });\n const displayGridOffsetResults = async ({ feedData }) => {\n let entries = [];\n if (feedData.length >= 2) {\n const offsetLayout = gridOffsetGap({\n count: 2,\n isLayoutReversed,\n overwriteStickyPosition,\n });\n const firstEntry = feedData[0];\n const overlayCard = web_elements_library_.Composite.card.overlay.image({\n ...common_data_display({ entry: firstEntry }),\n backgroundImage: standard({\n images: firstEntry.image,\n url: firstEntry.url,\n }),\n });\n offsetLayout.element.appendChild(overlayCard.element);\n offsetLayout.element.appendChild(layoutElement.element);\n container.appendChild(offsetLayout.element);\n setStyles(offsetLayout.styles);\n setStyles(overlayCard.styles);\n entries = feedData.slice(1, 3).map((entry) => web_elements_library_.Composite.card.block({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: true,\n isTransparent,\n }));\n }\n else {\n entries = feedData.map((entry) => web_elements_library_.Composite.card.overlay.image({\n ...common_data_display({ entry, isThemeDark }),\n backgroundImage: standard({\n images: entry.image,\n url: entry.url,\n }),\n }));\n container.appendChild(layoutElement.element);\n }\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n numberOfColumnsToShow: 2,\n displayResults,\n entries,\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const displayResults = async ({ feedData }) => {\n const entries = feedData.map((entry) => web_elements_library_.Composite.card.block({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: true,\n isTransparent,\n }));\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n numberOfColumnsToShow: 2,\n displayResults,\n entries,\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const resultStart = (props) => {\n const { feedData, setOffset, getOffset } = props;\n const totalEntries = getTotalEntries();\n const showAmount = 3;\n const message = isLazyLoad\n ? `Showing ${showAmount} of ${totalEntries} articles`\n : `Showing ${showAmount} articles`;\n setOffset(getOffset() + 1);\n if (totalEntries)\n setTotalEntries(totalEntries);\n layoutElement.element.setAttribute('id', common_display_ID_GRID_LAYOUT_CONTAINER);\n setStyles(layoutElement.styles);\n displayGridOffsetResults({ feedData });\n container.appendChild(aria_live.create({\n message,\n }));\n };\n container.appendChild(loader);\n fetch_start({\n ...props,\n ...helperFunctions,\n numberOfColumnsToShow,\n displayResults,\n displayResultStart: resultStart,\n displayNoResults: display_noResults,\n layoutElement,\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n setPosition,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/news/grid.ts\n\n\n\n\n\n\n/* harmony default export */ const news_grid = ((props) => (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow, isTypeOverlay } = props;\n const loader = macros_loader.create();\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader_styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n const entries = feedData.map((entry) => {\n if (isTypeOverlay) {\n return web_elements_library_.Composite.card.overlay.image({\n ...common_data_display({ entry }),\n backgroundImage: standard({\n images: entry.image,\n url: entry.url,\n }),\n });\n }\n return web_elements_library_.Composite.card.block({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: true,\n isTransparent,\n });\n });\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries,\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const layoutElement = isTypeOverlay\n ? grid({ count: numberOfColumnsToShow })\n : gridGap({ count: numberOfColumnsToShow });\n container.appendChild(loader);\n fetch_start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: display_resultStart,\n displayNoResults: display_noResults,\n layoutElement,\n isThemeDark,\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/news/list.ts\n\n\n\n\n\n\n/* harmony default export */ const news_list = ((props) => (() => {\n const { isThemeDark } = props;\n const loader = macros_loader.create();\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader_styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) => web_elements_library_.Composite.card.list({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n })),\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n container.appendChild(loader);\n fetch_start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: display_resultStart,\n displayNoResults: display_noResults,\n layoutElement: stacked(),\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/news/index.ts\n\n\n\n\n;// CONCATENATED MODULE: ./source/index.ts\n\n\n\n\n\n//# sourceURL=webpack://@universityofmaryland/web-feeds-library/./source/index.ts_+_30_modules?")},149:e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__149__},708:e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__708__}},__webpack_module_cache__={};function __webpack_require__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.d=(e,n)=>{for(var t in n)__webpack_require__.o(n,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__webpack_require__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(572);return __webpack_exports__})()));
1
+ !function(e,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n(require("@universityofmaryland/web-styles-library"),require("@universityofmaryland/web-elements-library"));else if("function"==typeof define&&define.amd)define(["@universityofmaryland/web-styles-library","@universityofmaryland/web-elements-library"],n);else{var t="object"==typeof exports?n(require("@universityofmaryland/web-styles-library"),require("@universityofmaryland/web-elements-library")):n(e["@universityofmaryland/web-styles-library"],e["@universityofmaryland/web-elements-library"]);for(var s in t)("object"==typeof exports?exports:e)[s]=t[s]}}(self,((__WEBPACK_EXTERNAL_MODULE__708__,__WEBPACK_EXTERNAL_MODULE__149__)=>(()=>{"use strict";var __webpack_modules__={314:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n academic: () => (/* reexport */ academic_namespaceObject),\n events: () => (/* reexport */ composite_events_namespaceObject),\n news: () => (/* reexport */ news_namespaceObject)\n});\n\n// NAMESPACE OBJECT: ./source/composite/academic/index.ts\nvar academic_namespaceObject = {};\n__webpack_require__.r(academic_namespaceObject);\n__webpack_require__.d(academic_namespaceObject, {\n slider: () => (academic_slider)\n});\n\n// NAMESPACE OBJECT: ./source/composite/events/index.ts\nvar composite_events_namespaceObject = {};\n__webpack_require__.r(composite_events_namespaceObject);\n__webpack_require__.d(composite_events_namespaceObject, {\n grid: () => (events_grid),\n grouped: () => (grouped),\n list: () => (list),\n slider: () => (events_slider)\n});\n\n// NAMESPACE OBJECT: ./source/composite/news/index.ts\nvar news_namespaceObject = {};\n__webpack_require__.r(news_namespaceObject);\n__webpack_require__.d(news_namespaceObject, {\n featured: () => (featured),\n grid: () => (news_grid),\n list: () => (news_list)\n});\n\n;// CONCATENATED MODULE: ./source/macros/aria-live.ts\nconst create = ({ message }) => {\n const container = document.createElement('div');\n const textElement = document.createElement('p');\n container.setAttribute('aria-live', 'polite');\n container.setAttribute('role', 'status');\n container.classList.add('sr-only');\n textElement.innerHTML = message;\n container.appendChild(textElement);\n return container;\n};\nconst update = ({ container, message, }) => {\n const element = container.querySelector(`[aria-live]`);\n const textElement = element.querySelector('p');\n if (textElement)\n textElement.innerHTML = message;\n};\n/* harmony default export */ const aria_live = ({\n create,\n update,\n});\n\n// EXTERNAL MODULE: external \"@universityofmaryland/web-styles-library\"\nvar web_styles_library_ = __webpack_require__(708);\n// EXTERNAL MODULE: external \"@universityofmaryland/web-elements-library\"\nvar web_elements_library_ = __webpack_require__(149);\n;// CONCATENATED MODULE: ./source/macros/lazy-load.ts\n\n\nconst lazy_load_create = ({ callback, isThemeDark, isLazyLoad, totalEntries, offset, }) => {\n if (!isLazyLoad)\n return;\n if (!totalEntries)\n return;\n if (!offset)\n return;\n if (!callback)\n return;\n if (offset >= totalEntries)\n return;\n const composite = web_elements_library_.Model.ElementModel.layout.alignedCenter({\n element: document.createElement('div'),\n isThemeDark,\n elementStyles: {\n element: {\n marginTop: `${web_styles_library_.token.spacing.lg}`,\n },\n },\n });\n const ctaButton = web_elements_library_.Model.ElementModel.actions.outlineOptions({\n element: document.createElement('button'),\n isThemeDark,\n });\n ctaButton.element.innerHTML = 'Load more';\n ctaButton.element.addEventListener('click', callback);\n composite.element.appendChild(ctaButton.element);\n composite.styles += ctaButton.styles;\n return composite;\n};\nconst remove = ({ container }) => {\n const button = container.querySelector(`.${web_styles_library_.layout.alignment.block.center.className}`);\n if (button)\n button.remove();\n};\n/* harmony default export */ const lazy_load = ({\n remove,\n create: lazy_load_create,\n});\n\n;// CONCATENATED MODULE: ./source/macros/loader.ts\n\n\nconst ID_UMD_LOADER = 'umd-loader-container';\nconst keyframes = `\n @keyframes loader-first-animation {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n \n @keyframes loader-last-animation {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n \n @keyframes loader-middle-animation {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n }\n`;\nconst loader_create = ({ isThemeDark }) => {\n const defaultDotStyles = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n background: `${web_styles_library_.token.color.gray.dark}`,\n animationTimingFunction: 'cubic-bezier(0, 1, 1, 0)',\n ...(isThemeDark && {\n background: `${web_styles_library_.token.color.gray.light}`,\n }),\n };\n const innerElmOne = web_elements_library_.Model.ElementModel.createDiv({\n className: `${ID_UMD_LOADER}-one`,\n elementStyles: {\n element: {\n ...defaultDotStyles,\n left: '5px',\n animation: 'loader-first-animation 0.6s infinite',\n },\n },\n });\n const innerElmTwo = web_elements_library_.Model.ElementModel.createDiv({\n className: `${ID_UMD_LOADER}-two`,\n elementStyles: {\n element: {\n ...defaultDotStyles,\n left: '5px',\n animation: 'loader-middle-animation 0.6s infinite',\n },\n },\n });\n const innerElmThree = web_elements_library_.Model.ElementModel.createDiv({\n className: `${ID_UMD_LOADER}-three`,\n elementStyles: {\n element: {\n ...defaultDotStyles,\n left: '24px',\n animation: 'loader-middle-animation 0.6s infinite',\n },\n },\n });\n const innerElmFour = web_elements_library_.Model.ElementModel.createDiv({\n className: `${ID_UMD_LOADER}-four`,\n elementStyles: {\n element: {\n ...defaultDotStyles,\n left: '45px',\n animation: 'loader-last-animation 0.6s infinite',\n },\n },\n });\n const wrapper = web_elements_library_.Model.ElementModel.createDiv({\n className: `${ID_UMD_LOADER}-wrapper`,\n children: [innerElmOne, innerElmTwo, innerElmThree, innerElmFour],\n elementStyles: {\n element: {\n position: 'relative',\n },\n },\n });\n const composite = web_elements_library_.Model.ElementModel.createDiv({\n className: ID_UMD_LOADER,\n children: [wrapper],\n elementStyles: {\n element: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '10px 0',\n minHeight: '40px',\n position: 'relative',\n gridColumn: '1 / -1',\n },\n },\n });\n composite.styles += keyframes;\n return composite;\n};\nconst loader_remove = ({ container }) => {\n const loader = container.querySelector(`.${ID_UMD_LOADER}`);\n if (loader)\n loader.remove();\n};\nconst display = ({ container, isThemeDark, }) => {\n const loader = loader_create({ isThemeDark });\n container.appendChild(loader.element);\n};\n/* harmony default export */ const macros_loader = ({\n create: loader_create,\n display,\n remove: loader_remove,\n});\n\n;// CONCATENATED MODULE: ./source/macros/no-results.ts\n\n\n/* harmony default export */ const no_results = (({ message, linkUrl, linkText, isThemeDark, isAlignedCenter = true, }) => {\n const composite = web_elements_library_.Model.ElementModel.layout.gridStacked({\n element: document.createElement('div'),\n isThemeDark,\n elementStyles: {\n element: {\n [`& *`]: {\n textAlign: isAlignedCenter ? 'center' : 'left',\n },\n [`& *:not(:first-child)`]: {\n marginTop: `${web_styles_library_.token.spacing.md}`,\n },\n },\n },\n });\n const headline = web_elements_library_.Model.ElementModel.headline.sansExtraLarge({\n element: document.createElement('p'),\n isThemeDark,\n elementStyles: {\n element: {\n textTransform: 'uppercase',\n },\n },\n });\n headline.element.innerHTML = message || 'No results found';\n composite.element.appendChild(headline.element);\n composite.styles += headline.styles;\n if (linkUrl && linkText) {\n const link = document.createElement('a');\n link.innerHTML = linkText;\n link.setAttribute('href', linkUrl);\n link.setAttribute('target', '_blank');\n link.setAttribute('rel', 'noopener noreferrer');\n const ctaButton = web_elements_library_.Atomic.actions.options({\n element: link,\n isTypeOutline: true,\n isThemeDark,\n });\n composite.element.appendChild(ctaButton.element);\n composite.styles += ctaButton.styles;\n }\n return composite;\n});\n\n;// CONCATENATED MODULE: ./source/macros/slider.ts\n\n\nconst { FetchGraphQL } = web_elements_library_.Utilities.network;\n/* harmony default export */ const slider = (({ token, query, url, categories, isThemeDark, headline, actions, }) => {\n const dataSlider = document.createElement('div');\n const slider = web_elements_library_.Composite.slider.events({\n isThemeDark,\n dataSlider,\n headline,\n actions,\n });\n let variables = { startDate: new Date().toDateString() };\n let shadowRoot = null;\n const setShadowStyles = async ({ shadowRoot, styles, }) => {\n const styleElement = document.createElement('style');\n const optimizedCss = await web_styles_library_.utilities.transform.css.removeDuplicates(styles);\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const loadEvents = async () => {\n if (categories) {\n const related = categories.split(',');\n variables.related = related;\n }\n const fetchVariables = {\n query,\n url,\n token,\n variables,\n };\n const feedData = await FetchGraphQL(fetchVariables);\n const slides = feedData?.data?.entries?.events.map((data, i) => {\n const headline = document.createElement('p');\n headline.textContent = data.title;\n const dateSign = web_elements_library_.Atomic.events.sign({\n startMonth: data.startMonth,\n startDay: data.startDay,\n endDay: data.endDay,\n endMonth: data.endMonth,\n isThemeDark,\n });\n const textLockup = web_elements_library_.Atomic.textLockup.date({\n headline,\n isThemeDark,\n dateSign,\n });\n if (i === 0) {\n slider.styles += textLockup.styles;\n slider.styles += dateSign.styles;\n }\n return textLockup;\n });\n slides?.forEach((slide) => dataSlider.appendChild(slide.element));\n if (shadowRoot)\n setShadowStyles({ shadowRoot, styles: slider.styles });\n setTimeout(() => {\n slider.events.load();\n }, 100);\n };\n loadEvents();\n return {\n ...slider,\n events: {\n callback,\n },\n };\n});\n\n;// CONCATENATED MODULE: ./source/macros/index.ts\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./source/composite/academic/slider.ts\n\nconst QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\nconst query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n calendarId: [4, 2]\n ) {\n ${QUERY_DATA}\n }\n }\n }\n`;\n/* harmony default export */ const academic_slider = ((props) => slider({\n ...props,\n query,\n url: 'https://provost.umd.edu/graphql',\n}));\n\n;// CONCATENATED MODULE: ./source/composite/academic/index.ts\n\n\n;// CONCATENATED MODULE: ./source/elements/asset.ts\nconst standard = ({ images, url, }) => {\n const image = images[0];\n const imageElement = document.createElement('img');\n imageElement.src = image.url;\n imageElement.alt = image.altText;\n if (url) {\n const link = document.createElement('a');\n link.setAttribute('target', '_blank');\n link.setAttribute('href', url);\n link.setAttribute('aria-label', `Maryland Today Article with image ${image.altText}`);\n link.appendChild(imageElement);\n return link;\n }\n return imageElement;\n};\n\n;// CONCATENATED MODULE: ./source/elements/layout.ts\n\n\nconst stacked = () => web_elements_library_.Model.ElementModel.layout.gridStacked({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n gridGap: `${web_styles_library_.token.spacing.md}`,\n [` > *`]: {\n containerType: 'inline-size',\n },\n [`& .${web_styles_library_.element.asset.image.wrapperScaled.className}`]: {\n alignSelf: 'flex-start',\n },\n },\n },\n});\nconst grid = ({ count = 2, }) => web_elements_library_.Model.ElementModel.layout.grid({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n [` > *`]: {\n containerType: 'inline-size',\n [`@media (${web_styles_library_.token.media.queries.large.min})`]: {\n minHeight: '560px !important',\n },\n },\n },\n },\n isGap: false,\n isColumnsTwo: count === 2,\n isColumnsThree: count === 3,\n isColumnsFour: count === 4,\n});\nconst gridGap = ({ count = 2, }) => web_elements_library_.Model.ElementModel.layout.grid({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n [` > *`]: {\n alignSelf: 'flex-start',\n containerType: 'inline-size',\n },\n },\n },\n isGap: true,\n isColumnsTwo: count === 2,\n isColumnsThree: count === 3,\n isColumnsFour: count === 4,\n});\nconst gridOffsetGap = ({ count = 2, isLayoutReversed, overwriteStickyPosition = 0, }) => web_elements_library_.Model.ElementModel.layout.grid({\n element: document.createElement('div'),\n elementStyles: {\n element: {\n [` > *`]: {\n alignSelf: 'flex-start',\n containerType: 'inline-size',\n },\n [` > *:first-child`]: {\n order: isLayoutReversed ? 2 : -1,\n },\n [`& .${web_elements_library_.Composite.card.overlay.imageClassRef}`]: {\n [`@media (${web_styles_library_.token.media.queries.large.min})`]: {\n height: 'inherit',\n position: 'sticky',\n top: `${overwriteStickyPosition}px`,\n },\n [`*`]: {\n color: `${web_styles_library_.token.color.white}`,\n },\n [`& > div`]: {\n [`@media (${web_styles_library_.token.media.queries.large.min})`]: {\n minHeight: '560px !important',\n },\n },\n [`.${web_styles_library_.element.asset.image.wrapperScaled.className}`]: {\n position: 'absolute',\n },\n },\n },\n },\n isGap: true,\n isColumnsTwo: count === 2,\n isColumnsThree: count === 3,\n isColumnsFour: count === 4,\n});\n\n;// CONCATENATED MODULE: ./source/elements/text.ts\nconst summary = ({ text }) => {\n if (text) {\n const textElement = document.createElement('div');\n const textNode = document.createElement('p');\n textNode.innerHTML = text;\n textElement.appendChild(textNode);\n return textElement;\n }\n return null;\n};\nconst headline = ({ text, url }) => {\n if (text && url) {\n const headline = document.createElement('p');\n const headlineLink = document.createElement('a');\n headlineLink.href = url;\n headlineLink.innerHTML = text;\n headlineLink.target = '_blank';\n headlineLink.rel = 'noopener noreferrer';\n headline.appendChild(headlineLink);\n return headline;\n }\n return null;\n};\nconst date = ({ date, dateFormatted, }) => {\n if (date && dateFormatted) {\n const dateElement = document.createElement('time');\n dateElement.innerHTML = dateFormatted;\n dateElement.setAttribute('datetime', date);\n return dateElement;\n }\n return null;\n};\n\n;// CONCATENATED MODULE: ./source/elements/index.ts\n\n\n\n\n;// CONCATENATED MODULE: ./source/composite/events/common/queries.ts\nconst EVENTS_COUNT_QUERY = `\nquery getEventsCount($startDate: String!, $related: [QueryArgument]) {\n count: solspace_calendar {\n events(relatedTo: $related, loadOccurrences: true, startsAfterOrAt: $startDate) {\n ... on communications_Event {\n id\n }\n ... on submission_Event {\n id\n }\n }\n }\n}\n`;\nconst EVENTS_QUERY = `\nquery getEvents($startDate: String!, $related: [QueryArgument], $limit: Int, $offset: Int) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: $limit\n offset: $offset\n ) {\n ... on communications_Event {\n id\n title\n url\n startDayOfWeek: startDate @formatDateTime(format: \"D\")\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n startStamp: startDate @formatDateTime(format: \"Y-m-d\")\n startTime: startDate @formatDateTime(format: \"g:ia\")\n endDayOfWeek: endDate @formatDateTime(format: \"D\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n endTime: endDate @formatDateTime(format: \"g:ia\")\n allDay\n desciption: commonRichText\n summary: commonRichTextTwo\n image: commonAssetHeroImageSingle {\n title\n commonPlainTextTwo: alt\n url\n }\n location: categoriesCampusBuildingSingle {\n title\n }\n link: commonEntriesLinkSingle {\n ... on links_links_Entry {\n type: linksDropdownSelector\n externalUrl: commonPlainTextThree\n altTitle: commonPlainTextTwo\n title\n internalLinks: calendarEntriesEvent {\n id\n url\n }\n }\n }\n }\n ... on submission_Event {\n id\n title\n url\n startDayOfWeek: startDate @formatDateTime(format: \"D\")\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n startStamp: startDate @formatDateTime(format: \"Y-m-d\")\n startTime: startDate @formatDateTime(format: \"g:ia\")\n endDayOfWeek: endDate @formatDateTime(format: \"D\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n endTime: endDate @formatDateTime(format: \"g:ia\")\n allDay\n desciption: commonRichText\n summary: commonRichTextTwo\n image: commonAssetHeroImageSingle {\n title\n commonPlainTextTwo: alt\n url\n }\n location: categoriesCampusBuildingSingle {\n title\n }\n link: commonEntriesLinkSingle {\n ... on links_links_Entry {\n type: linksDropdownSelector\n externalUrl: commonPlainTextThree\n altTitle: commonPlainTextTwo\n title\n internalLinks: calendarEntriesEvent {\n id\n url\n }\n }\n }\n }\n }\n }\n}\n`;\n\n;// CONCATENATED MODULE: ./source/composite/events/common/data.ts\n\n\n\nconst lazyLoadVariables = (props) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => load(props),\n});\nconst apiVariables = (props) => {\n const { categories, getOffset, token, numberOfRowsToStart, numberOfColumnsToShow = 1, } = props;\n const obj = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n if (categories) {\n obj.related = categories;\n }\n return obj;\n};\nconst data_display = ({ entry, isThemeDark, }) => ({\n headline: headline({\n text: entry.title,\n url: entry.url,\n }),\n text: summary({ text: entry.summary }),\n eventMeta: web_elements_library_.Atomic.events.meta({\n ...entry,\n isThemeDark,\n }),\n isThemeDark,\n});\n\n;// CONCATENATED MODULE: ./source/composite/events/common/fetch.ts\n\n\n\n\nconst ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst fetchFeed = async ({ limit, related, offset, token, query, }) => {\n if (!token)\n throw new Error('Token not found');\n const variables = {\n startDate: new Date().toDateString(),\n limit,\n related,\n offset,\n };\n return await web_elements_library_.Utilities.network.FetchGraphQL({\n query,\n url: 'https://calendar.umd.edu/graphql',\n token: token,\n variables,\n });\n};\nconst getCount = async ({ variables }) => {\n const feedData = await fetchFeed({\n ...variables,\n query: EVENTS_COUNT_QUERY,\n });\n if (!feedData || !feedData.data || feedData.message) {\n if (feedData.message)\n console.error(feedData.message);\n return null;\n }\n return feedData?.data?.count?.events?.length || 0;\n};\nconst getEntries = async ({ variables, }) => {\n const feedData = await fetchFeed({ ...variables, query: EVENTS_QUERY });\n const graceFail = ({ message }) => {\n throw new Error(message);\n };\n if (!feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message) {\n if (!feedData)\n graceFail({ message: 'Feed not found' });\n if (!feedData.data)\n graceFail({ message: 'Feed data not found' });\n if (!feedData.data.entries)\n graceFail({ message: 'Feed entries not found' });\n if (!feedData.data.entries.events)\n graceFail({ message: 'Feed events not found' });\n if (!feedData.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n }\n return feedData.data.entries.events;\n};\nconst load = async (props) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n lazy_load.remove({ container });\n macros_loader.display({ container });\n getEntries({\n variables: apiVariables(props),\n }).then((feedData) => {\n displayResults({ feedData });\n aria_live.update({\n container,\n message: `Showing ${currentCount + feedData.length} of ${totalEntries} articles`,\n });\n });\n};\nconst start = async (props) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n await getCount({\n variables: apiVariables(props),\n }).then((count) => {\n if (count === 0) {\n displayNoResults({ ...props });\n return;\n }\n if (count) {\n setTotalEntries(count);\n }\n if (count === null) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n });\n getEntries({\n variables: apiVariables(props),\n }).then((feedData) => displayResultStart({ ...props, feedData }));\n};\n\n;// CONCATENATED MODULE: ./source/utilities/events/index.ts\nconst eventNames = {\n FEED_LOADED: 'feed:loaded',\n FEED_ERROR: 'feed:error',\n};\nconst dispatch = (element, eventName, detail) => {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n cancelable: true,\n });\n return element.dispatchEvent(event);\n};\nconst listen = (element, eventName, callback, options) => {\n const eventListener = (event) => {\n const customEvent = event;\n callback(customEvent.detail);\n };\n element.addEventListener(eventName, eventListener, options);\n return () => {\n element.removeEventListener(eventName, eventListener, options);\n };\n};\n\n;// CONCATENATED MODULE: ./source/utilities/index.ts\n\n\n\n;// CONCATENATED MODULE: ./source/composite/events/common/display.ts\n\n\n\n\n\nconst display_ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst setShadowStyles = async ({ shadowRoot, styles, }) => {\n const styleElement = document.createElement('style');\n const optimizedCss = await web_styles_library_.utilities.transform.css.removeDuplicates(styles);\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n};\nconst noResults = ({ getContainer, getStyles, getShadowRoot, setStyles, isThemeDark, message = 'No events found', linkUrl = 'https://calendar.umd.edu', linkText = 'View all events', }) => {\n const container = getContainer();\n const shadowRoot = getShadowRoot();\n const noResultsContent = no_results({\n message,\n linkUrl,\n linkText,\n isThemeDark,\n });\n const ariaLiveContent = aria_live.create({\n message,\n });\n container.innerHTML = '';\n container.appendChild(noResultsContent.element);\n container.appendChild(ariaLiveContent);\n setStyles(noResultsContent.styles);\n dispatch(container, eventNames.FEED_ERROR, {\n error: 'No results found',\n message,\n });\n setTimeout(() => {\n const styles = getStyles();\n if (shadowRoot) {\n setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n }, 100);\n};\nconst resultLoad = async (props) => {\n const { entries, getContainer, setStyles, setOffset } = props;\n const container = getContainer();\n const grid = container.querySelector(`#${display_ID_GRID_LAYOUT_CONTAINER}`);\n macros_loader.remove({ container });\n lazy_load.remove({ container });\n setOffset(entries.length);\n return new Promise((resolve) => {\n entries.forEach((entry) => {\n grid.appendChild(entry.element);\n setStyles(entry.styles);\n });\n const lazyLoadButton = lazy_load.create(lazyLoadVariables({\n ...props,\n callback: load,\n }));\n if (lazyLoadButton) {\n container.appendChild(lazyLoadButton.element);\n setStyles(lazyLoadButton.styles);\n }\n resolve();\n });\n};\nconst resultStart = (props) => {\n const { feedData, numberOfColumnsToShow = 1, numberOfRowsToStart, isLazyLoad, displayResults, getContainer, getTotalEntries, setOffset, setStyles, layoutElement, } = props;\n const container = getContainer();\n const totalEntries = getTotalEntries();\n const showAmount = numberOfColumnsToShow || 1 * numberOfRowsToStart;\n const message = isLazyLoad\n ? `Showing ${showAmount} of ${totalEntries} articles`\n : `Showing ${showAmount} articles`;\n layoutElement.element.setAttribute('id', display_ID_GRID_LAYOUT_CONTAINER);\n container.appendChild(layoutElement.element);\n setStyles(layoutElement.styles);\n dispatch(container, eventNames.FEED_LOADED, {\n items: feedData,\n count: feedData.length,\n total: totalEntries || feedData.length,\n });\n displayResults({ feedData });\n container.appendChild(aria_live.create({\n message,\n }));\n};\n\n;// CONCATENATED MODULE: ./source/composite/events/grid.ts\n\n\n\n\n\n\n/* harmony default export */ const events_grid = ((props) => (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow } = props;\n const loader = macros_loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n await resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) => web_elements_library_.Composite.card.block({\n ...data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n isTransparent,\n })),\n });\n if (shadowRoot) {\n setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const layoutElement = gridGap({\n count: numberOfColumnsToShow,\n });\n container.appendChild(loader.element);\n start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: resultStart,\n displayNoResults: noResults,\n layoutElement,\n isThemeDark,\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/events/list.ts\n\n\n\n\n\n\n/* harmony default export */ const list = ((props) => (() => {\n const { isThemeDark } = props;\n const loader = macros_loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n await resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) => web_elements_library_.Composite.card.list({\n ...data_display({ entry, isThemeDark }),\n dateSign: web_elements_library_.Atomic.events.sign({\n ...entry,\n isThemeDark,\n isLargeSize: true,\n }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n })),\n });\n if (shadowRoot) {\n setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n container.appendChild(loader.element);\n start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: resultStart,\n displayNoResults: noResults,\n layoutElement: stacked(),\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/events/slider.ts\n\nconst slider_QUERY_DATA = `\n title\n url\n startMonth: startDate @formatDateTime(format: \"M\")\n startDay: startDate @formatDateTime(format: \"d\")\n endMonth: endDate @formatDateTime(format: \"M\")\n endDay: endDate @formatDateTime(format: \"d\")\n`;\nconst slider_query = `\n query getEvents($startDate: String!, $related: [QueryArgument]) {\n entries: solspace_calendar {\n events(\n relatedTo: $related\n loadOccurrences: true\n startsAfterOrAt: $startDate\n limit: 12\n ) {\n ... on submission_Event {\n ${slider_QUERY_DATA}\n }\n }\n }\n }\n`;\n/* harmony default export */ const events_slider = ((props) => slider({\n ...props,\n query: slider_query,\n url: 'https://calendar.umd.edu/graphql',\n}));\n\n;// CONCATENATED MODULE: ./source/composite/events/grouped.ts\n\n\n\n\n\n\n\nconst getDateBanner = (dateStamp) => {\n const dateParts = dateStamp.split('T')[0].split('-');\n const year = parseInt(dateParts[0], 10);\n const month = parseInt(dateParts[1], 10) - 1;\n const day = parseInt(dateParts[2], 10);\n const eventDate = new Date(year, month, day);\n const currentDate = new Date();\n currentDate.setHours(0, 0, 0, 0);\n const weekFromNow = new Date();\n weekFromNow.setDate(currentDate.getDate() + 7);\n weekFromNow.setHours(0, 0, 0, 0);\n if (eventDate.getFullYear() === currentDate.getFullYear() &&\n eventDate.getMonth() === currentDate.getMonth() &&\n eventDate.getDate() === currentDate.getDate()) {\n return 'Today';\n }\n if (eventDate.getTime() > currentDate.getTime() &&\n eventDate.getTime() <= weekFromNow.getTime()) {\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n return days[eventDate.getDay()];\n }\n const days = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n ];\n const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `${days[eventDate.getDay()]}, ${months[eventDate.getMonth()]} ${eventDate.getDate()}`;\n};\nconst groupEventsByDate = (events) => {\n const grouped = events.reduce((acc, event) => {\n const dateKey = event.startStamp;\n if (!acc[dateKey]) {\n acc[dateKey] = {\n date: getDateBanner(event.startStamp),\n events: [],\n };\n }\n acc[dateKey].events.push(event);\n return acc;\n }, {});\n return Object.values(grouped).sort((a, b) => {\n const dateA = new Date(Object.keys(grouped).find((key) => grouped[key] === a) || '');\n const dateB = new Date(Object.keys(grouped).find((key) => grouped[key] === b) || '');\n return dateA.getTime() - dateB.getTime();\n });\n};\n/* harmony default export */ const grouped = ((props) => (() => {\n const { isThemeDark } = props;\n const loader = macros_loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const groupLayout = () => {\n return web_elements_library_.Model.ElementModel.createDiv({\n className: 'umd-feed-events-grouped',\n elementStyles: {\n element: {},\n },\n });\n };\n const displayResults = async ({ feedData }) => {\n const groupedEvents = groupEventsByDate(feedData);\n const entries = [];\n let actualEventCount = 0;\n groupedEvents.forEach((group) => {\n const dateHeadline = document.createElement('p');\n dateHeadline.textContent = group.date;\n entries.push(web_elements_library_.Model.ElementModel.text.ribbon({\n element: dateHeadline,\n elementStyles: {\n element: {\n margin: `${web_styles_library_.token.spacing.lg} 0`,\n },\n },\n }));\n const dateEntries = group.events.map((entry) => web_elements_library_.Composite.card.list({\n ...data_display({ entry, isThemeDark }),\n dateSign: web_elements_library_.Atomic.events.sign({\n ...entry,\n isThemeDark,\n isLargeSize: false,\n }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n }));\n actualEventCount += group.events.length;\n entries.push(web_elements_library_.Model.ElementModel.createDiv({\n className: 'umd-feed-events-grouped-entries',\n children: [...dateEntries],\n elementStyles: {\n element: {\n [` > *:not(:last-child)`]: {\n paddingBottom: web_styles_library_.token.spacing.lg,\n marginBottom: web_styles_library_.token.spacing.lg,\n },\n },\n },\n }));\n });\n const originalSetOffset = helperFunctions.setOffset;\n helperFunctions.setOffset = () => originalSetOffset(actualEventCount);\n await resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries,\n });\n helperFunctions.setOffset = originalSetOffset;\n if (shadowRoot) {\n setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n container.appendChild(loader.element);\n start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: resultStart,\n displayNoResults: noResults,\n layoutElement: groupLayout(),\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/events/index.ts\n\n\n\n\n\n;// CONCATENATED MODULE: ./source/composite/news/common/queries.ts\nconst ARTICLES_QUERY = `\n query getArticles($related: [QueryArgument], $relatedToAll: [QueryArgument], $limit: Int, $offset: Int, $not: [QueryArgument]) {\n entryCount(section: \"articles\", relatedTo: $related,relatedToAll: $relatedToAll)\n entries(\n section: \"articles\",\n relatedTo: $related,\n relatedToAll: $relatedToAll,\n limit: $limit,\n offset: $offset,\n id: $not\n ) {\n ... on articles_today_Entry {\n id\n title\n date: postDate\n dateFormatted: postDate @formatDateTime(format: \"M d, Y\")\n summary: genericText\n url\n image:articlesHeroImage {\n url\n ... on hero_Asset {\n id\n altText: genericText\n }\n }\n categories:categoryTodaySectionMultiple {\n title\n url\n }\n }\n }\n }\n`;\n\n;// CONCATENATED MODULE: ./source/composite/news/common/data.ts\n\n\nconst data_lazyLoadVariables = (props) => ({\n ...props,\n totalEntries: props.getTotalEntries(),\n offset: props.getOffset(),\n container: props.getContainer(),\n callback: () => fetch_load(props),\n});\nconst data_apiVariables = (props) => {\n const { isUnion, categories, getOffset, token, numberOfRowsToStart, numberOfColumnsToShow = 1, entriesToRemove, } = props;\n const obj = {\n offset: getOffset(),\n token,\n limit: numberOfRowsToStart,\n };\n if (numberOfColumnsToShow) {\n obj.limit = numberOfColumnsToShow * numberOfRowsToStart;\n }\n if (!isUnion && categories) {\n obj.relatedToAll = categories;\n }\n if (isUnion && categories) {\n obj.related = categories;\n }\n if (entriesToRemove) {\n obj.not = ['not', ...entriesToRemove];\n }\n return obj;\n};\nconst common_data_display = ({ entry, isThemeDark, }) => ({\n newsId: entry.id.toString(),\n headline: headline({\n text: entry.title,\n url: entry.url,\n }),\n text: summary({ text: entry.summary }),\n date: date({\n date: entry.date,\n dateFormatted: entry.dateFormatted,\n }),\n isThemeDark,\n});\n\n;// CONCATENATED MODULE: ./source/composite/news/common/fetch.ts\n\n\n\n\nconst fetch_ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst fetch_getEntries = async ({ limit, not, offset, related, relatedToAll, token, }) => {\n if (!token)\n throw new Error('Token not found');\n const graceFail = ({ message }) => {\n console.error(message);\n };\n const variables = {\n limit,\n related,\n relatedToAll,\n offset,\n not,\n };\n const feedData = await web_elements_library_.Utilities.network.FetchGraphQL({\n query: ARTICLES_QUERY,\n url: 'https://today.umd.edu/graphql',\n token: token,\n variables,\n });\n if (!feedData ||\n !feedData.data ||\n !feedData.data.entries ||\n feedData.message) {\n if (!feedData)\n graceFail({ message: 'Feed not found' });\n if (feedData?.message)\n graceFail({ message: `Feed data errors: ${feedData.message}` });\n return null;\n }\n return {\n entries: feedData.data.entries,\n count: feedData.data.entryCount,\n };\n};\nconst fetch_load = async (props) => {\n const { getContainer, getOffset, displayResults, getTotalEntries } = props;\n const container = getContainer();\n const currentCount = getOffset();\n const totalEntries = getTotalEntries();\n lazy_load.remove({ container });\n macros_loader.display({ container });\n fetch_getEntries(data_apiVariables(props)).then((feedData) => {\n if (feedData) {\n displayResults({ feedData: feedData.entries });\n aria_live.update({\n container,\n message: `Showing ${currentCount + feedData.entries.length} of ${totalEntries} articles`,\n });\n }\n });\n};\nconst fetch_start = async (props) => {\n const { displayNoResults, displayResultStart, setTotalEntries } = props;\n fetch_getEntries(data_apiVariables(props)).then((feedData) => {\n if (!feedData || !feedData.entries) {\n displayNoResults({\n ...props,\n message: 'An error occurred while fetching the data.',\n });\n return;\n }\n const totalEntries = feedData.count;\n if (totalEntries === 0) {\n displayNoResults({ ...props });\n return;\n }\n setTotalEntries(totalEntries);\n return displayResultStart({ ...props, feedData: feedData.entries });\n });\n};\n\n;// CONCATENATED MODULE: ./source/composite/news/common/display.ts\n\n\n\n\n\nconst common_display_ID_GRID_LAYOUT_CONTAINER = 'umd-grid-gap-layout-container';\nconst display_setShadowStyles = async ({ shadowRoot, styles, }) => {\n const styleElement = document.createElement('style');\n const optimizedCss = await web_styles_library_.utilities.transform.css.removeDuplicates(styles);\n styleElement.textContent = optimizedCss;\n shadowRoot.appendChild(styleElement);\n};\nconst display_noResults = ({ getContainer, getStyles, getShadowRoot, setStyles, message = 'No results found', linkUrl = 'https://today.umd.edu', linkText = 'View all articles', isThemeDark, }) => {\n const container = getContainer();\n const shadowRoot = getShadowRoot();\n const noResultsContent = no_results({\n message,\n linkUrl,\n linkText,\n isThemeDark,\n });\n const ariaLiveContent = aria_live.create({\n message,\n });\n container.innerHTML = '';\n container.appendChild(noResultsContent.element);\n container.appendChild(ariaLiveContent);\n setStyles(noResultsContent.styles);\n dispatch(container, eventNames.FEED_ERROR, {\n error: 'No results found',\n message,\n });\n setTimeout(() => {\n const styles = getStyles();\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n }, 100);\n};\nconst display_resultLoad = async (props) => {\n const { entries, getContainer, setStyles, setOffset } = props;\n const container = getContainer();\n const grid = container.querySelector(`#${common_display_ID_GRID_LAYOUT_CONTAINER}`);\n macros_loader.remove({ container });\n lazy_load.remove({ container });\n setOffset(entries.length);\n return new Promise((resolve) => {\n entries.forEach((entry) => {\n grid.appendChild(entry.element);\n setStyles(entry.styles);\n });\n const lazyLoadButton = lazy_load.create(data_lazyLoadVariables({\n ...props,\n callback: fetch_load,\n }));\n if (lazyLoadButton) {\n container.appendChild(lazyLoadButton.element);\n setStyles(lazyLoadButton.styles);\n }\n resolve();\n });\n};\nconst display_resultStart = (props) => {\n const { feedData, numberOfColumnsToShow = 1, numberOfRowsToStart, isLazyLoad, displayResults, getContainer, getTotalEntries, setTotalEntries, setStyles, layoutElement, } = props;\n const container = getContainer();\n const totalEntries = getTotalEntries();\n const showAmount = numberOfColumnsToShow || 1 * numberOfRowsToStart;\n const message = isLazyLoad\n ? `Showing ${showAmount} of ${totalEntries} articles`\n : `Showing ${showAmount} articles`;\n if (totalEntries)\n setTotalEntries(totalEntries);\n layoutElement.element.setAttribute('id', common_display_ID_GRID_LAYOUT_CONTAINER);\n container.appendChild(layoutElement.element);\n setStyles(layoutElement.styles);\n dispatch(container, eventNames.FEED_LOADED, {\n items: feedData,\n count: feedData.length,\n total: totalEntries || feedData.length,\n });\n displayResults({ feedData });\n container.appendChild(aria_live.create({\n message,\n }));\n};\n\n;// CONCATENATED MODULE: ./source/composite/news/featured.ts\n\n\n\n\n\n\n/* harmony default export */ const featured = ((props) => (() => {\n const { isThemeDark, isLazyLoad, isLayoutReversed, isTransparent, overwriteStickyPosition, } = props;\n const loader = macros_loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let numberOfColumnsToShow = 3;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const setPosition = (position) => {\n const overlayElement = container.querySelector(`.${web_elements_library_.Composite.card.overlay.imageClassRef}`);\n if (overlayElement)\n overlayElement.style.top = `${position}px`;\n };\n const layoutElement = gridGap({ count: 2 });\n const displayGridOffsetResults = async ({ feedData }) => {\n let entries = [];\n if (feedData.length >= 2) {\n const offsetLayout = gridOffsetGap({\n count: 2,\n isLayoutReversed,\n overwriteStickyPosition,\n });\n const firstEntry = feedData[0];\n const overlayCard = web_elements_library_.Composite.card.overlay.image({\n ...common_data_display({ entry: firstEntry }),\n backgroundImage: standard({\n images: firstEntry.image,\n url: firstEntry.url,\n }),\n });\n offsetLayout.element.appendChild(overlayCard.element);\n offsetLayout.element.appendChild(layoutElement.element);\n container.appendChild(offsetLayout.element);\n setStyles(offsetLayout.styles);\n setStyles(overlayCard.styles);\n entries = feedData.slice(1, 3).map((entry) => web_elements_library_.Composite.card.block({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: true,\n isTransparent,\n }));\n }\n else {\n entries = feedData.map((entry) => web_elements_library_.Composite.card.overlay.image({\n ...common_data_display({ entry, isThemeDark }),\n backgroundImage: standard({\n images: entry.image,\n url: entry.url,\n }),\n }));\n container.appendChild(layoutElement.element);\n }\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n numberOfColumnsToShow: 2,\n displayResults,\n entries,\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const displayResults = async ({ feedData }) => {\n const entries = feedData.map((entry) => web_elements_library_.Composite.card.block({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: true,\n isTransparent,\n }));\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n numberOfColumnsToShow: 2,\n displayResults,\n entries,\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const resultStart = (props) => {\n const { feedData, setOffset, getOffset } = props;\n const totalEntries = getTotalEntries();\n const showAmount = 3;\n const message = isLazyLoad\n ? `Showing ${showAmount} of ${totalEntries} articles`\n : `Showing ${showAmount} articles`;\n setOffset(getOffset() + 1);\n if (totalEntries)\n setTotalEntries(totalEntries);\n layoutElement.element.setAttribute('id', common_display_ID_GRID_LAYOUT_CONTAINER);\n setStyles(layoutElement.styles);\n displayGridOffsetResults({ feedData });\n container.appendChild(aria_live.create({\n message,\n }));\n };\n container.appendChild(loader.element);\n fetch_start({\n ...props,\n ...helperFunctions,\n numberOfColumnsToShow,\n displayResults,\n displayResultStart: resultStart,\n displayNoResults: display_noResults,\n layoutElement,\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n setPosition,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/news/grid.ts\n\n\n\n\n\n\n/* harmony default export */ const news_grid = ((props) => (() => {\n const { isThemeDark, isTransparent, numberOfColumnsToShow, isTypeOverlay } = props;\n const loader = macros_loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n const entries = feedData.map((entry) => {\n if (isTypeOverlay) {\n return web_elements_library_.Composite.card.overlay.image({\n ...common_data_display({ entry }),\n backgroundImage: standard({\n images: entry.image,\n url: entry.url,\n }),\n });\n }\n return web_elements_library_.Composite.card.block({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: true,\n isTransparent,\n });\n });\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries,\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n const layoutElement = isTypeOverlay\n ? grid({ count: numberOfColumnsToShow })\n : gridGap({ count: numberOfColumnsToShow });\n container.appendChild(loader.element);\n fetch_start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: display_resultStart,\n displayNoResults: display_noResults,\n layoutElement,\n isThemeDark,\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/news/list.ts\n\n\n\n\n\n\n/* harmony default export */ const news_list = ((props) => (() => {\n const { isThemeDark } = props;\n const loader = macros_loader.create({ isThemeDark });\n const container = document.createElement('div');\n const setTotalEntries = (count) => (totalEntries = count);\n const setOffset = (count) => (offset = offset + count);\n const setStyles = (additonalStyles) => (styles += additonalStyles);\n const getContainer = () => container;\n const getTotalEntries = () => totalEntries;\n const getOffset = () => offset;\n const getStyles = () => styles;\n const getShadowRoot = () => shadowRoot;\n let totalEntries = 0;\n let offset = 0;\n let styles = `\n ${loader.styles}\n `;\n let shadowRoot = null;\n const helperFunctions = {\n setTotalEntries,\n setOffset,\n setStyles,\n getContainer,\n getOffset,\n getTotalEntries,\n getStyles,\n getShadowRoot,\n };\n const callback = (shadow) => {\n shadowRoot = shadow;\n };\n const displayResults = async ({ feedData }) => {\n await display_resultLoad({\n ...props,\n ...helperFunctions,\n displayResults,\n entries: feedData.map((entry) => web_elements_library_.Composite.card.list({\n ...common_data_display({ entry, isThemeDark }),\n image: standard({\n images: entry.image,\n url: entry.url,\n }),\n isAligned: false,\n })),\n });\n if (shadowRoot) {\n display_setShadowStyles({\n shadowRoot,\n styles,\n });\n }\n };\n container.appendChild(loader.element);\n fetch_start({\n ...props,\n ...helperFunctions,\n displayResults,\n displayResultStart: display_resultStart,\n displayNoResults: display_noResults,\n layoutElement: stacked(),\n });\n return {\n element: container,\n styles,\n events: {\n callback,\n },\n };\n})());\n\n;// CONCATENATED MODULE: ./source/composite/news/index.ts\n\n\n\n\n;// CONCATENATED MODULE: ./source/index.ts\n\n\n\n\n\n//# sourceURL=webpack://@universityofmaryland/web-feeds-library/./source/index.ts_+_31_modules?")},149:e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__149__},708:e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__708__}},__webpack_module_cache__={};function __webpack_require__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.d=(e,n)=>{for(var t in n)__webpack_require__.o(n,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__webpack_require__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(314);return __webpack_exports__})()));
@@ -94,6 +94,10 @@
94
94
  !*** ./source/composite/academic/index.ts ***!
95
95
  \********************************************/
96
96
 
97
+ /*!********************************************!*\
98
+ !*** ./source/composite/events/grouped.ts ***!
99
+ \********************************************/
100
+
97
101
  /*!*********************************************!*\
98
102
  !*** ./source/composite/academic/slider.ts ***!
99
103
  \*********************************************/
@@ -1,6 +1,6 @@
1
1
  export { default as ariaLive } from './aria-live';
2
2
  export { default as buttonLazyLoad } from './lazy-load';
3
- export { default as loader, styles as loaderStyles } from './loader';
3
+ export { default as loader } from './loader';
4
4
  export { default as noResults } from './no-results';
5
5
  export { default as slider } from './slider';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/macros/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/macros/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -1,8 +1,14 @@
1
- export declare const styles = "\n @keyframes loader-first-animation {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n \n @keyframes loader-last-animation {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n \n @keyframes loader-middle-animation {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n }\n\n .umd-loader-container {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px 0;\n min-height: 40px;\n position: relative;\n grid-column: 1 / -1;\n }\n\n .umd-loader-container > div {\n position: relative;\n }\n\n .umd-loader-container > div > div {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--grayDark);\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n }\n\n .umd-loader-container > div > div:first-child {\n left: 5px;\n animation: loader-first-animation 0.6s infinite;\n }\n\n .umd-loader-container > div > div:nth-child(2) {\n left: 5px;\n animation: loader-middle-animation 0.6s infinite;\n }\n\n .umd-loader-container > div > div:nth-child(3) {\n left: 24px;\n animation: loader-middle-animation 0.6s infinite;\n }\n\n .umd-loader-container > div > div:last-child {\n left: 45px;\n animation: loader-last-animation 0.6s infinite;\n }\n";
2
1
  declare const _default: {
3
- create: () => HTMLDivElement;
4
- display: ({ container }: {
2
+ create: ({ isThemeDark }: {
3
+ isThemeDark?: boolean;
4
+ }) => {
5
+ element: HTMLElement;
6
+ className: string;
7
+ styles: string;
8
+ };
9
+ display: ({ container, isThemeDark, }: {
5
10
  container: HTMLElement;
11
+ isThemeDark?: boolean;
6
12
  }) => void;
7
13
  remove: ({ container }: {
8
14
  container: HTMLElement;
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../source/macros/loader.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,29CAwElB,CAAC;;;6BA4B8B;QAAE,SAAS,EAAE,WAAW,CAAA;KAAE;4BAN3B;QAAE,SAAS,EAAE,WAAW,CAAA;KAAE;;AAYzD,wBAIE"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../source/macros/loader.ts"],"names":[],"mappings":";8BAkCiC;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;2CAmGvD;QACD,SAAS,EAAE,WAAW,CAAC;QACvB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB;4BAZ8B;QAAE,SAAS,EAAE,WAAW,CAAA;KAAE;;AAkBzD,wBAIE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@universityofmaryland/web-feeds-library",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "UMD Feed Elements",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",