@asd20/ui 3.4.4 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.js CHANGED
@@ -30,6 +30,7 @@ module.exports = {
30
30
  'no-console': 'off',
31
31
  'no-debugger': 'off',
32
32
  'vue/v-slot-style': 'off'
33
+ 'vue/html-self-closing': 'off'
33
34
  },
34
35
 
35
36
  // Useful in a component library to avoid linting built artfacts and external deps
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asd20/ui",
3
- "version": "3.4.4",
3
+ "version": "3.5.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "sideEffects": [
@@ -21,7 +21,7 @@
21
21
  </svg>
22
22
  <div v-if="tagline" class="asd20-district-logo__tagline">
23
23
  <hr />
24
- <p><i>We educate and inspire students to thrive.</i></p>
24
+ <p><i>Educate. Inspire. Thrive.</i></p>
25
25
  </div>
26
26
  </a>
27
27
  </template>
@@ -46,10 +46,10 @@ export default {
46
46
  // align-items: center;
47
47
  justify-content: center;
48
48
  min-width: 10rem;
49
+ max-width: 100%;
49
50
  svg {
50
- max-width: space(10);
51
- height: 100%;
52
- width: auto;
51
+ height: auto;
52
+ width: 100%;
53
53
  fill: var(--fill-one, #0f2c6c);
54
54
  .district {
55
55
  fill: var(--fill-two, rgb(136, 137, 138));
@@ -57,7 +57,7 @@ export default {
57
57
  }
58
58
  &__tagline {
59
59
  color: #fff;
60
- text-align: left;
60
+ text-align: center;
61
61
  p {
62
62
  font-family: var(--website-typography__font-family-headlines);
63
63
  }
@@ -69,8 +69,8 @@ export default {
69
69
  }
70
70
  }
71
71
  @media screen and (min-width: 768px) {
72
- .asd20-district-logo svg {
73
- max-width: space(12);
72
+ .asd20-district-logo {
73
+ max-width: 20rem;
74
74
  }
75
75
  .asd20-district-logo__tagline {
76
76
  text-align: center;
@@ -78,8 +78,8 @@ export default {
78
78
  }
79
79
 
80
80
  @media screen and (min-width: 1024px) {
81
- .asd20-district-logo svg {
82
- max-width: space(20);
81
+ .asd20-district-logo {
82
+ max-width: 25rem;
83
83
  }
84
84
  }
85
85
  </style>
@@ -5,101 +5,153 @@
5
5
  class="asd20-card__content"
6
6
  :class="emphasizedDate ? 'asd20-card__event-content' : ''"
7
7
  >
8
- <div class="asd20-card__header">
9
- <div class="asd20-card__emphasized-date" v-if="emphasizedDate">
10
- <div class="top">{{ weekday }}</div>
11
- <div class="middle">{{ day }}</div>
12
- <div class="bottom">{{ month }}</div>
13
- <small>{{ year }}</small>
14
- </div>
15
- <component :is="headerTag" v-if="title" class="asd20-card__title">
16
- <span v-html="title"></span>
17
- <div
18
- class="asd20-card__subtitle"
19
- v-if="subtitle"
20
- v-html="subtitle"
21
- ></div>
22
- </component>
23
- </div>
24
-
25
- <div
26
- class="asd20-card__date"
27
- v-if="!emphasizedDate && (date || (modifiedDate && showModifiedDate))"
28
- >
29
- <asd20-icon name="calendar" size="sm" />
30
-
31
- <div class="asd20-card__date-lines">
32
- <div class="asd20-card__date-line" v-if="date">
33
- <span class="label">Published:&nbsp;</span>
34
- <time>{{ date }}</time>
35
- </div>
36
-
37
- <div
38
- class="asd20-card__date-line"
39
- v-if="modifiedDate && showModifiedDate"
8
+ <!-- compact date-left layout -->
9
+ <template v-if="dateLeft">
10
+ <div class="asd20-card__date-left">
11
+ <time
12
+ class="asd20-card__date-badge"
13
+ :aria-label="fullDateLabel"
14
+ :datetime="year && month && day ? `${year}-${month}-${day}` : null"
40
15
  >
41
- <span class="label">Updated:&nbsp;</span>
42
- <time>{{ modifiedDate }}</time>
16
+ <span class="day">{{ day }}</span>
17
+ <span class="mon">{{ monthAbbr }}</span>
18
+ </time>
19
+
20
+ <div class="asd20-card__main">
21
+ <component :is="headerTag" v-if="title" class="asd20-card__title">
22
+ <span v-text="dateLeftTitle"></span>
23
+ </component>
24
+
25
+ <p v-if="time" class="asd20-card__time asd20-card__time--compact">
26
+ <asd20-icon name="hours-alt" size="sm" />
27
+ <span v-html="time"></span>
28
+ </p>
43
29
  </div>
30
+
31
+ <!-- invisible overlay link so the whole card is clickable -->
32
+ <a
33
+ class="asd20-card__link"
34
+ v-if="link"
35
+ :href="link"
36
+ :title="title"
37
+ :tabindex="disableFocus ? -1 : 0"
38
+ ></a>
39
+ </div>
40
+ <div
41
+ v-if="websiteLogo"
42
+ class="asd20-card__date-left-logo"
43
+ aria-hidden="true"
44
+ >
45
+ <img :src="websiteLogo" alt="" />
44
46
  </div>
45
- </div>
46
- <p v-if="time" class="asd20-card__time">
47
- <asd20-icon name="hours-alt" size="sm" />
48
- <span v-html="time"></span>
49
- </p>
50
-
51
- <p v-if="location" class="asd20-card__location">
52
- <asd20-icon name="map" size="sm" />
53
- <span v-html="location"></span>
54
- </p>
55
-
56
- <p class="asd20-card__description">
57
- <span
58
- v-if="!expandedDescription && truncatedDescription"
59
- v-html="truncatedDescription"
60
- ></span>
61
- <span
62
- v-if="expandedDescription && description"
63
- v-html="description"
64
- ></span>
65
- <a
66
- class="asd20-card__link"
67
- v-if="link"
68
- :href="link ? link : ''"
69
- :title="title"
70
- v-html="linkLabel"
71
- :tabindex="disableFocus ? -1 : 0"
72
- ></a>
73
- </p>
74
- <div v-if="showMeta" class="asd20-card__meta">
75
- <div v-if="categories" class="asd20-card__categories">
76
- <asd20-tag
77
- v-for="category in categories"
78
- :key="category"
79
- :label="category"
80
- transparent
81
- ></asd20-tag>
47
+ </template>
48
+
49
+ <!-- existing layout -->
50
+ <template v-else>
51
+ <div class="asd20-card__header">
52
+ <div class="asd20-card__emphasized-date" v-if="emphasizedDate">
53
+ <div class="top">{{ weekday }}</div>
54
+ <div class="middle">{{ day }}</div>
55
+ <div class="bottom">{{ month }}</div>
56
+ <small>{{ year }}</small>
57
+ </div>
58
+ <component :is="headerTag" v-if="title" class="asd20-card__title">
59
+ <span v-html="title"></span>
60
+ <div
61
+ class="asd20-card__subtitle"
62
+ v-if="subtitle"
63
+ v-html="subtitle"
64
+ ></div>
65
+ </component>
82
66
  </div>
67
+
83
68
  <div
84
- class="asd20-card__indicators"
85
- v-if="hasFile || hasGallery || hasVideo || sourceOrg"
69
+ class="asd20-card__date"
70
+ v-if="
71
+ !emphasizedDate &&
72
+ (date || (modifiedDate && showModifiedDate)) &&
73
+ cardType !== 'Feature'
74
+ "
86
75
  >
87
- <asd20-icon v-if="hasVideo" name="video" size="sm" />
88
- <asd20-icon v-if="hasGallery" name="gallery" size="sm" />
89
- <asd20-icon v-if="hasFile" name="file" size="sm" />
90
- <img
91
- v-if="sourceOrg"
92
- width="24px"
93
- :src="websiteLogo"
94
- :alt="`${sourceOrg} logo`"
95
- />
76
+ <asd20-icon name="calendar" size="sm" />
77
+ <div class="asd20-card__date-lines">
78
+ <div class="asd20-card__date-line" v-if="date && !showModifiedDate">
79
+ <span class="label">Published:&nbsp;</span>
80
+ <time>{{ date }}</time>
81
+ </div>
82
+ <div
83
+ class="asd20-card__date-line"
84
+ v-if="modifiedDate && showModifiedDate"
85
+ >
86
+ <span class="label">Updated:&nbsp;</span>
87
+ <time>{{ modifiedDate }}</time>
88
+ </div>
89
+ </div>
90
+ </div>
91
+
92
+ <p v-if="time" class="asd20-card__time">
93
+ <asd20-icon name="hours-alt" size="sm" />
94
+ <span v-html="time"></span>
95
+ </p>
96
+
97
+ <p v-if="location" class="asd20-card__location">
98
+ <asd20-icon name="map" size="sm" />
99
+ <span v-html="location"></span>
100
+ </p>
101
+
102
+ <p class="asd20-card__description">
103
+ <span
104
+ v-if="!expandedDescription && truncatedDescription"
105
+ v-html="truncatedDescription"
106
+ ></span>
107
+ <span
108
+ v-if="expandedDescription && description"
109
+ v-html="description"
110
+ ></span>
111
+ <a
112
+ class="asd20-card__link"
113
+ v-if="link"
114
+ :href="link ? link : ''"
115
+ :title="title"
116
+ v-html="linkLabel"
117
+ :tabindex="disableFocus ? -1 : 0"
118
+ ></a>
119
+ </p>
120
+
121
+ <div v-if="showMeta" class="asd20-card__meta">
122
+ <div v-if="categories" class="asd20-card__categories">
123
+ <asd20-tag
124
+ v-for="category in categories"
125
+ :key="category"
126
+ :label="category"
127
+ transparent
128
+ />
129
+ </div>
130
+ <div
131
+ class="asd20-card__indicators"
132
+ v-if="hasFile || hasGallery || hasVideo || sourceOrg"
133
+ >
134
+ <asd20-icon v-if="hasVideo" name="video" size="sm" />
135
+ <asd20-icon v-if="hasGallery" name="gallery" size="sm" />
136
+ <asd20-icon v-if="hasFile" name="file" size="sm" />
137
+ <img
138
+ v-if="sourceOrg"
139
+ width="24px"
140
+ :src="websiteLogo"
141
+ :alt="`${sourceOrg} logo`"
142
+ />
143
+ </div>
96
144
  </div>
97
- </div>
98
- <slot />
145
+
146
+ <slot />
147
+ </template>
99
148
  </component>
149
+
150
+ <!-- If you want the compact card to never show a cover image, CSS below will handle it -->
100
151
  <figure class="asd20-card__image" v-if="image && !noCoverImage">
101
152
  <img v-lazy="image" :key="image" :alt="alt || ''" />
102
153
  </figure>
154
+
103
155
  <asd20-icon
104
156
  v-if="pinned"
105
157
  class="asd20-card__pinned"
@@ -157,6 +209,8 @@ export default {
157
209
  noCoverImage: { type: Boolean, default: false },
158
210
  sourceOrg: { type: String, default: '' },
159
211
  websiteLogo: { type: String, default: '' },
212
+ dateLeft: { type: Boolean, default: false },
213
+ cardType: { type: String, default: '' },
160
214
  },
161
215
  computed: {
162
216
  truncatedDescription() {
@@ -180,6 +234,7 @@ export default {
180
234
  'asd20-card--emphasized-date': this.emphasizedDate,
181
235
  'asd20-card--expanded-header': this.expandedHeader,
182
236
  'asd20-card--expanded-description': this.expandedDescription,
237
+ 'asd20-card--date-left': this.dateLeft,
183
238
  }
184
239
  },
185
240
  showMeta() {
@@ -201,6 +256,26 @@ export default {
201
256
  // console.log(publishDateTimePlusOne, modifiedDateTimeString)
202
257
  return modifiedDateTimeString > publishDateTimePlusOne ? true : false
203
258
  },
259
+ monthAbbr() {
260
+ return (this.month || '').slice(0, 3).toUpperCase()
261
+ },
262
+ fullDateLabel() {
263
+ // e.g., "Friday, Nov 8, 2025"
264
+ const parts = [this.weekday, this.monthAbbr, this.day, this.year].filter(
265
+ Boolean
266
+ )
267
+ return parts.join(' ')
268
+ },
269
+ dateLeftTitle() {
270
+ if (!this.title) return ''
271
+
272
+ // strip any HTML tags from the title
273
+ const plain = this.title.replace(/<[^>]*>/g, '').trim()
274
+
275
+ // limit to 50 characters, then add "..." if longer
276
+ if (plain.length <= 65) return plain
277
+ return plain.slice(0, 65) + '...'
278
+ },
204
279
  },
205
280
  }
206
281
  </script>
@@ -423,6 +498,110 @@ export default {
423
498
  }
424
499
  }
425
500
 
501
+ &--date-left {
502
+ min-height: 0 !important; // compact
503
+ position: relative; // allow absolute positioning inside
504
+ background: var(--website-card__background-color);
505
+
506
+ .asd20-card__content {
507
+ padding: space(0.75);
508
+ position: relative;
509
+ z-index: 2; // keep content above the logo
510
+ }
511
+
512
+ // hide large-only sections
513
+ .asd20-card__description,
514
+ .asd20-card__meta,
515
+ .asd20-card__subtitle,
516
+ .asd20-card__image {
517
+ display: none !important;
518
+ }
519
+
520
+ .asd20-card__date-left {
521
+ display: flex;
522
+ align-items: flex-start;
523
+ gap: space(0.75);
524
+ position: relative; // for overlay link
525
+ }
526
+
527
+ .asd20-card__date-badge {
528
+ display: inline-flex;
529
+ flex-direction: column;
530
+ align-items: center;
531
+ justify-content: center;
532
+
533
+ width: 3rem;
534
+ height: 3rem;
535
+ min-width: 3rem;
536
+ border-radius: 999px;
537
+ background: var(--website-card__reverse-background-color)
538
+ var(--website-card__reverse-background-style);
539
+ color: var(--website-card__reverse-foreground-color);
540
+ text-transform: uppercase;
541
+ font-family: var(--website-typography__font-family-headlines);
542
+ line-height: 1;
543
+
544
+ .day {
545
+ font-weight: 700;
546
+ font-size: 1.2rem;
547
+ }
548
+ .mon {
549
+ font-weight: 700;
550
+ font-size: 0.75rem;
551
+ letter-spacing: 0.04em;
552
+ }
553
+ }
554
+
555
+ .asd20-card__main {
556
+ display: flex;
557
+ flex-direction: column;
558
+ min-width: 0; // allow text truncation
559
+ }
560
+
561
+ .asd20-card__title {
562
+ margin: 0;
563
+ font-size: 1rem;
564
+ line-height: 1.2;
565
+ color: var(--website-page__title-color);
566
+ overflow: hidden;
567
+ text-overflow: ellipsis;
568
+ }
569
+
570
+ .asd20-card__time--compact {
571
+ margin: space(0.25) 0 0 0;
572
+ font-size: 0.85rem;
573
+ font-weight: 600;
574
+ display: inline-flex;
575
+ align-items: center;
576
+ .asd20-icon {
577
+ margin-right: space(0.25);
578
+ }
579
+ }
580
+
581
+ // Logo in lower-right
582
+ .asd20-card__date-left-logo {
583
+ position: absolute;
584
+ right: -1.5rem;
585
+ bottom: -1rem;
586
+ opacity: 0.15;
587
+ pointer-events: none;
588
+ z-index: 1; // under text, above background
589
+
590
+ img {
591
+ display: block;
592
+ max-width: 128px;
593
+ max-height: 128px;
594
+ width: auto;
595
+ height: auto;
596
+ }
597
+ }
598
+
599
+ // keep the entire card clickable via existing overlay link style
600
+ .asd20-card__link::after {
601
+ border-radius: var(--website-shape__radius-m);
602
+ }
603
+ }
604
+
426
605
  &__categories {
427
606
  display: flex;
428
607
  flex-wrap: wrap;
@@ -61,9 +61,10 @@ export default {
61
61
  align-items: center;
62
62
  flex-shrink: 0;
63
63
  padding-bottom: 0.5rem;
64
+ padding-right: 0.5rem;
64
65
  h1 {
65
66
  margin: 0;
66
- font-size: 1.5rem;
67
+ font-size: 1.2rem;
67
68
  color: var(--color__on-primary);
68
69
  flex-grow: 1;
69
70
  width: 100%;
@@ -80,10 +81,12 @@ export default {
80
81
  }
81
82
 
82
83
  .asd20-district-logo {
84
+ position: absolute;
85
+ right: 0;
83
86
  margin-left: auto;
84
87
  margin-right: space(1);
85
88
  height: 1.5rem;
86
- padding: 0.75rem 0 0 0;
89
+ padding: 0.75rem 0 0 0;
87
90
  &::v-deep svg {
88
91
  fill: #fff;
89
92
  .district {
@@ -125,7 +128,13 @@ export default {
125
128
  @media (min-width: 768px) {
126
129
  .asd20-app-header {
127
130
  align-items: flex-end;
131
+ &__title {
132
+ .icon-and-title h1 {
133
+ font-size: 1.5rem;
134
+ }
135
+ }
128
136
  .asd20-district-logo {
137
+ position:block;
129
138
  padding: 0 0 0.25rem 0;
130
139
  height: space(1.5);
131
140
  }
@@ -146,7 +146,7 @@ export default {
146
146
  background-color: var(--color__secondary-t30);
147
147
  background-image: var(--website-texture__reverse);
148
148
  background-position-y: top;
149
- background-size: 640px auto;
149
+ background-size: 1040px auto;
150
150
  }
151
151
  .name {
152
152
  font-size: 1.25rem;
@@ -2,12 +2,26 @@
2
2
  <section class="asd20-feeds-section" aria-label="Feeds section">
3
3
  <slot name="before" />
4
4
 
5
+ <intersect @enter="$emit('events-in-view')">
6
+ <Asd20SwiperFeed
7
+ v-if="eventsFeedProps && (!Array.isArray(events) || events.length > 0)"
8
+ class="eventsFeed"
9
+ v-bind="eventsFeedProps"
10
+ :loading="!Array.isArray(events)"
11
+ :cards="eventCards"
12
+ :slidesPerView="4"
13
+ @select="onSelectEventCard"
14
+ cardType="Event"
15
+ ></Asd20SwiperFeed>
16
+ </intersect>
17
+
5
18
  <intersect @enter="$emit('announcements-in-view')">
6
19
  <Asd20SwiperFeed
7
20
  v-if="
8
21
  announcementsFeedProps &&
9
- (!Array.isArray(announcements) || announcements.length > 0)
22
+ (!Array.isArray(announcements) || announcements.length > 0)
10
23
  "
24
+ class="announcementsFeed"
11
25
  v-bind="announcementsFeedProps"
12
26
  :loading="!Array.isArray(announcements)"
13
27
  :cards="announcementCards"
@@ -17,23 +31,12 @@
17
31
  ></Asd20SwiperFeed>
18
32
  </intersect>
19
33
 
20
- <intersect @enter="$emit('events-in-view')">
21
- <Asd20SwiperFeed
22
- v-if="eventsFeedProps && (!Array.isArray(events) || events.length > 0)"
23
- v-bind="eventsFeedProps"
24
- :loading="!Array.isArray(events)"
25
- :cards="eventCards"
26
- :slidesPerView="4"
27
- @select="onSelectEventCard"
28
- cardType="Event"
29
- ></Asd20SwiperFeed>
30
- </intersect>
31
-
32
34
  <intersect @enter="$emit('stories-in-view')">
33
35
  <Asd20SwiperFeed
34
36
  v-if="
35
37
  storiesFeedProps && (!Array.isArray(stories) || stories.length > 0)
36
38
  "
39
+ class="storiesFeed"
37
40
  v-bind="storiesFeedProps"
38
41
  :loading="!Array.isArray(stories)"
39
42
  :cards="storyCards"
@@ -156,7 +159,7 @@ export default {
156
159
  eventCards() {
157
160
  if (!Array.isArray(this.events)) return []
158
161
  return expandEvents(this.events)
159
- .map(e => ({ ...mapEventToCard(e), event: e, zoom: true }))
162
+ .map(e => ({ ...mapEventToCard(e), event: e, zoom: true, websiteLogo: this.organization.logoImageUrl }))
160
163
  .slice(0, 9)
161
164
  },
162
165
  },
@@ -174,5 +177,40 @@ export default {
174
177
  @import '../../../design/_mixins.scss';
175
178
 
176
179
  .asd20-feeds-section {
180
+ .announcementsFeed,
181
+ .storiesFeed {
182
+ &:after {
183
+ content: '';
184
+ display: block;
185
+ position: absolute;
186
+ left: 0;
187
+ right: 0;
188
+ top: 30%;
189
+ bottom: 30%;
190
+ background: var(--website-page__alternate-background-color);
191
+ border-radius: 0;
192
+ // border-radius: var(--website-shape__radius-m);
193
+ // border-top-left-radius: 0;
194
+ // border-bottom-left-radius: 0;
195
+ z-index: 0;
196
+ }
197
+ }
198
+ .eventsFeed {
199
+ &:after {
200
+ content: '';
201
+ display: block;
202
+ position: absolute;
203
+ left: 0;
204
+ right: 0;
205
+ top: 40%;
206
+ bottom: 41%;
207
+ background: var(--website-page__alternate-background-color);
208
+ border-radius: 0;
209
+ // border-radius: var(--website-shape__radius-m);
210
+ // border-top-left-radius: 0;
211
+ // border-bottom-left-radius: 0;
212
+ z-index: 0;
213
+ }
214
+ }
177
215
  }
178
216
  </style>
@@ -10,6 +10,7 @@
10
10
  <div class="swiper-slide" v-for="(card, index) in cards" :key="index">
11
11
  <asd20-card
12
12
  v-bind="card"
13
+ :cardType="cardType"
13
14
  @click.native="$emit('select', card)"
14
15
  @keydown.tab.exact.native="nextCard"
15
16
  @keydown.tab.shift.native="prevCard"
@@ -152,21 +153,6 @@ export default {
152
153
  z-index: 1;
153
154
  }
154
155
 
155
- &:after {
156
- content: '';
157
- display: block;
158
- position: absolute;
159
- left: 0;
160
- right: 0;
161
- top: 30%;
162
- bottom: 30%;
163
- background: var(--website-page__alternate-background-color);
164
- border-radius: 0;
165
- // border-radius: var(--website-shape__radius-m);
166
- // border-top-left-radius: 0;
167
- // border-bottom-left-radius: 0;
168
- z-index: 0;
169
- }
170
156
 
171
157
  .swiper-title {
172
158
  display: flex;
@@ -222,7 +222,6 @@ export default {
222
222
  var(--website-homepage-header__background-style);
223
223
  }
224
224
  .header-messaging-section {
225
- display: relative;
226
225
  border-bottom: none;
227
226
  // width: 80%;
228
227
  &::v-deep .asd20-messaging {
@@ -37,7 +37,7 @@
37
37
  "instagram": "",
38
38
  "instructionTypes": [],
39
39
  "location": {},
40
- "logoImageUrl": "",
40
+ "logoImageUrl": "https://asd20websitestorage.blob.core.windows.net/asd20-images/school-logos/ASD20.png",
41
41
  "mascotImageUrl": "https://asd20websitestorage.blob.core.windows.net/asd20-images/school-logos/aees_logo.png",
42
42
  "mission": null,
43
43
  "modifiedByDisplayName": "",
@@ -80,7 +80,7 @@
80
80
  "id": null,
81
81
  "uid": "MDQwMDAwMDA4MjAwRTAwMDc0QzVCNzEwMUE4MkUwMDgwMDAwMDAwMERFRTE5NzcxNThBQ0RBMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDBFOEVBMjc5NkM0MDJ3RjRGODFFNzY1QzQ0M0VGMDA0Mx==",
82
82
  "type": "event",
83
- "summary": "Register for Summer School",
83
+ "summary": "Parent Academy: Financial Literacy 101 - Empowering Teens for Real World Money Smarts",
84
84
  "description": "Ok. We're actually registeriing for Summer School really, really, really early.",
85
85
  "location": "EAC",
86
86
  "start": "2025-12-24T16:01:00Z",
@@ -55,7 +55,7 @@
55
55
  "links": "[]",
56
56
  "channels": ["Announcements"],
57
57
  "audiences": [],
58
- "ownerOrganizationId": "f4656914-9ec6-1811-aa5d-31f532f483d5",
58
+ "ownerOrganizationId": "26eaf390-d8ab-11e9-a3a8-5de5bba4f125",
59
59
  "images": [{"files":[{"url":"https://asd20websitestorage.blob.core.windows.net/website-files/message-images/dollar5000-donated-to-high-plains-elementary-school/thumbnail-md/Unknown_250x250.jpg","name":"thumbnail-md","width":250,"height":250,"filename":"Unknown_250x250.jpg","filepath":"message-images/dollar5000-donated-to-high-plains-elementary-school/thumbnail-md/Unknown_250x250.jpg","filesize":26512},{"url":"https://asd20websitestorage.blob.core.windows.net/website-files/message-images/dollar5000-donated-to-high-plains-elementary-school/thumbnail-sm/Unknown_100x100.jpg","name":"thumbnail-sm","width":100,"height":100,"filename":"Unknown_100x100.jpg","filepath":"message-images/dollar5000-donated-to-high-plains-elementary-school/thumbnail-sm/Unknown_100x100.jpg","filesize":6411},{"url":"https://asd20websitestorage.blob.core.windows.net/website-files/message-images/dollar5000-donated-to-high-plains-elementary-school/thumbnail-xs/Unknown_50x50.jpg","name":"thumbnail-xs","width":50,"height":50,"filename":"Unknown_50x50.jpg","filepath":"message-images/dollar5000-donated-to-high-plains-elementary-school/thumbnail-xs/Unknown_50x50.jpg","filesize":2367},{"url":"https://asd20websitestorage.blob.core.windows.net/website-files/message-images/dollar5000-donated-to-high-plains-elementary-school/banner/Unknown_800x300.jpg","name":"banner","width":800,"height":300,"filename":"Unknown_800x300.jpg","filepath":"message-images/dollar5000-donated-to-high-plains-elementary-school/banner/Unknown_800x300.jpg","filesize":72551},{"url":"https://asd20websitestorage.blob.core.windows.net/website-files/message-images/dollar5000-donated-to-high-plains-elementary-school/full/Unknown_1200x800.jpg","name":"full","width":1200,"height":800,"filename":"Unknown_1200x800.jpg","filepath":"message-images/dollar5000-donated-to-high-plains-elementary-school/full/Unknown_1200x800.jpg","filesize":245500}],"isCover":true,"metadata":{"alt":""}}],
60
60
  "videos": "[]",
61
61
  "translations": "null",
@@ -392,7 +392,7 @@
392
392
  "hours": "7:30 a.m. - 4:30 p.m.",
393
393
  "instagram": "",
394
394
  "location": {},
395
- "logoImageUrl": "/",
395
+ "logoImageUrl": "https://asd20websitestorage.blob.core.windows.net/asd20-images/school-logos/ASD20.png",
396
396
  "mascotImageUrl": "",
397
397
  "phone": "(719) 234 - 1200",
398
398
  "primaryColor": "",
@@ -64,7 +64,7 @@ export default function mapEventToCard(event) {
64
64
  day: event.day,
65
65
  month: event.month,
66
66
  year: event.year,
67
- emphasizedDate: true,
67
+ dateLeft: true,
68
68
  location: event.location || event.calendarLocation,
69
69
  isFeatured: event.isFeatured || event.isDistrictFeatured,
70
70
  }
@@ -46,9 +46,7 @@ export default function mapMessageToCard(
46
46
  let websiteLogo = null
47
47
 
48
48
  if (
49
- message.ownerOrganizationId !== organization.id &&
50
- message.destinations &&
51
- message.destinations.length === 0
49
+ message.ownerOrganizationId !== organization.id
52
50
  ) {
53
51
  const matchedOrg = organizationOptions.find(
54
52
  org => org.id === message.ownerOrganizationId
@@ -58,6 +56,8 @@ export default function mapMessageToCard(
58
56
  websiteLogo = matchedOrg.logoImageUrl
59
57
  sourceOrg = matchedOrg.title
60
58
  }
59
+ } else {
60
+ websiteLogo = organization.logoImageUrl
61
61
  }
62
62
 
63
63
  // Safely format dates (handle missing/null)