@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 +17 -115
- package/dist/composite/events/__tests__/grouped.test.d.ts +2 -0
- package/dist/composite/events/__tests__/grouped.test.d.ts.map +1 -0
- package/dist/composite/events/common/fetch.d.ts.map +1 -1
- package/dist/composite/events/grouped.d.ts +5 -0
- package/dist/composite/events/grouped.d.ts.map +1 -0
- package/dist/composite/events/index.d.ts +1 -0
- package/dist/composite/events/index.d.ts.map +1 -1
- package/dist/composite/news/featured.d.ts.map +1 -1
- package/dist/elements/layout.d.ts +1 -0
- package/dist/elements/layout.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +4 -0
- package/dist/macros/index.d.ts +1 -1
- package/dist/macros/index.d.ts.map +1 -1
- package/dist/macros/loader.d.ts +9 -3
- package/dist/macros/loader.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# University of Maryland Feeds Library
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@universityofmaryland/web-feeds-library)
|
|
4
4
|
|
|
5
5
|
Dynamic content feed components for displaying University of Maryland news, events, and academic information with automatic updates, caching, and brand-compliant styling.
|
|
6
6
|
|
|
@@ -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;
|
|
165
|
-
isThemeDark?: boolean;
|
|
166
|
-
isTransparent?: boolean;
|
|
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](
|
|
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 @@
|
|
|
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;
|
|
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 @@
|
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/composite/events/index.ts"],"names":[],"mappings":"
|
|
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":"
|
|
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"}
|
|
@@ -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,
|
|
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
|
\*********************************************/
|
package/dist/macros/index.d.ts
CHANGED
|
@@ -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
|
|
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,
|
|
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"}
|
package/dist/macros/loader.d.ts
CHANGED
|
@@ -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: (
|
|
4
|
-
|
|
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":"
|
|
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"}
|