@asd20/ui-next 2.31.2 → 2.31.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.31.3](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.31.2...ui-next-v2.31.3) (2026-10-09)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * fix test specification for handbook modal ([407d79b](https://github.com/academydistrict20/asd20-ui-next/commit/407d79b2ebe68319661551bddf8944da777a25fc))
9
+ * move download button for handbooks into header; add handbook help button ([4d0ccc9](https://github.com/academydistrict20/asd20-ui-next/commit/4d0ccc9765b68c79492458603954f85418d68895))
10
+
3
11
  ## [2.31.2](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.31.1...ui-next-v2.31.2) (2026-10-09)
4
12
 
5
13
  ## [2.31.1](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.31.0...ui-next-v2.31.1) (2026-10-08)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asd20/ui-next",
3
- "version": "2.31.2",
3
+ "version": "2.31.3",
4
4
  "private": false,
5
5
  "description": "ASD20 UI component library for Vue 3.",
6
6
  "license": "MIT",
@@ -140,35 +140,41 @@
140
140
  </aside>
141
141
 
142
142
  <div
143
- v-if="callsToAction.length > 0"
143
+ v-if="hasCallsToAction"
144
144
  class="asd20-page-header__call-to-action"
145
+ :class="{ 'asd20-page-header__call-to-action--custom': $slots['calls-to-action'] }"
145
146
  >
146
- <asd20-button
147
- v-if="callsToAction.length >= 1"
147
+ <slot
148
+ name="calls-to-action"
148
149
  :size="mq === 'sm' ? 'sm' : 'lg'"
149
- :label="callsToAction[0].label"
150
- :icon="callsToAction[0].icon"
151
- :link="callsToAction[0].url"
152
- :tracking-code="callsToAction[0].trackingCode"
153
- :public-form-id="callsToAction[0].publicFormId"
154
- reversed
155
- horizontal
156
- centered
157
- highlighted
158
- />
159
- <asd20-button
160
- v-if="callsToAction.length >= 2"
161
- :size="mq === 'sm' ? 'sm' : 'lg'"
162
- :label="callsToAction[1].label"
163
- :icon="callsToAction[1].icon"
164
- :link="callsToAction[1].url"
165
- :tracking-code="callsToAction[1].trackingCode"
166
- :public-form-id="callsToAction[1].publicFormId"
167
- reversed
168
- horizontal
169
- centered
170
- highlighted
171
- />
150
+ >
151
+ <asd20-button
152
+ v-if="callsToAction.length >= 1"
153
+ :size="mq === 'sm' ? 'sm' : 'lg'"
154
+ :label="callsToAction[0].label"
155
+ :icon="callsToAction[0].icon"
156
+ :link="callsToAction[0].url"
157
+ :tracking-code="callsToAction[0].trackingCode"
158
+ :public-form-id="callsToAction[0].publicFormId"
159
+ reversed
160
+ horizontal
161
+ centered
162
+ highlighted
163
+ />
164
+ <asd20-button
165
+ v-if="callsToAction.length >= 2"
166
+ :size="mq === 'sm' ? 'sm' : 'lg'"
167
+ :label="callsToAction[1].label"
168
+ :icon="callsToAction[1].icon"
169
+ :link="callsToAction[1].url"
170
+ :tracking-code="callsToAction[1].trackingCode"
171
+ :public-form-id="callsToAction[1].publicFormId"
172
+ reversed
173
+ horizontal
174
+ centered
175
+ highlighted
176
+ />
177
+ </slot>
172
178
  </div>
173
179
  <div
174
180
  v-if="fullscreen"
@@ -229,11 +235,12 @@ export default {
229
235
  classes() {
230
236
  return {
231
237
  'asd20-page-header--fullscreen': this.fullscreen,
232
- 'asd20-page-header--has-cta': this.callsToAction
233
- ? this.callsToAction.length > 0
234
- : false,
238
+ 'asd20-page-header--has-cta': this.hasCallsToAction,
235
239
  }
236
240
  },
241
+ hasCallsToAction() {
242
+ return Boolean(this.$slots['calls-to-action']) || this.callsToAction.length > 0
243
+ },
237
244
  isDetailPage() {
238
245
  if (typeof window === 'undefined') return false
239
246
  return (
@@ -503,7 +510,7 @@ export default {
503
510
  z-index: 1;
504
511
  display: flex;
505
512
 
506
- .asd20-button {
513
+ :deep(.asd20-button) {
507
514
  box-sizing: border-box;
508
515
  flex-shrink: 1;
509
516
  min-height: space(2);
@@ -706,7 +713,7 @@ export default {
706
713
 
707
714
  &__call-to-action {
708
715
  margin: space(-1) 60vw space(-1) space(3);
709
- .asd20-button {
716
+ :deep(.asd20-button) {
710
717
  font-size: 1rem !important;
711
718
  flex-shrink: 0;
712
719
  padding: 0.25rem 2rem;
@@ -812,11 +819,25 @@ export default {
812
819
 
813
820
  &__call-to-action {
814
821
  margin: space(-1) 60vw space(-1) space(3);
815
- .asd20-button {
822
+ :deep(.asd20-button) {
816
823
  font-size: 1rem !important;
817
824
  flex-shrink: 0;
818
825
  }
819
826
  }
820
827
  }
821
828
  }
829
+ // Keep custom interactive CTAs usable when labels wrap on narrow screens.
830
+ .asd20-page-header .asd20-page-header__call-to-action--custom {
831
+ flex-wrap: wrap;
832
+ gap: space(0.5);
833
+ margin-right: space(1);
834
+
835
+ :deep(.asd20-button) {
836
+ min-height: 44px;
837
+ }
838
+
839
+ :deep(.asd20-button:not(:last-child)) {
840
+ margin-right: 0;
841
+ }
842
+ }
822
843
  </style>
@@ -35,6 +35,22 @@
35
35
  :language-code="languageCode"
36
36
  @update:languageCode="$emit('update:languageCode', $event)"
37
37
  >
38
+ <template #calls-to-action="{ size }">
39
+ <slot
40
+ name="header-actions"
41
+ :size="size"
42
+ />
43
+ <asd20-button
44
+ label="Handbook Help"
45
+ :size="size"
46
+ aria-haspopup="dialog"
47
+ data-asd20-print-hide
48
+ reversed
49
+ horizontal
50
+ centered
51
+ @click="handbookHelpOpen = true"
52
+ />
53
+ </template>
38
54
  <template #top>
39
55
  <asd20-notification-group
40
56
  class="asd20-notification-group--floating"
@@ -49,6 +65,45 @@
49
65
 
50
66
  <slot name="document-actions" />
51
67
 
68
+ <div
69
+ class="asd20-template-handbook__help"
70
+ data-asd20-print-hide
71
+ >
72
+ <asd20-modal
73
+ :open="handbookHelpOpen"
74
+ title="All About Handbooks"
75
+ dismissable
76
+ windowed
77
+ @update:open="handbookHelpOpen = $event"
78
+ >
79
+ <asd20-viewport
80
+ class="asd20-template-handbook__help-content"
81
+ scrollable
82
+ >
83
+ <h3>Handbook Downloads</h3>
84
+ <p>
85
+ Our handbooks are available on our website and as a PDF download. We continuously update our handbooks and you'll always see the latest version online. Since downloaded or printed documents can become out-of-date, always check the online version for the most recent information.
86
+ </p>
87
+ <p>
88
+ When you download a PDF of the handbook, it may be dated prior to the date you download it. That's because there are no changes since that date.
89
+ </p>
90
+ <p>
91
+ We ask families to acknowledge that they've read the handbook prior to the start of the school year.
92
+ </p>
93
+ <h3>Alternate Languages</h3>
94
+ <p>
95
+ Our handbooks are presented in English. You can use the translate button at the top of the page to view the handbook in your preferred language.
96
+ </p>
97
+ <p>
98
+ <strong>Coming Soon:</strong> if you are viewing the handbook in a language other than English, and click Download PDF, you'll get a handbook version in that selected language.
99
+ </p>
100
+ <p>
101
+ Translations are automated and are not verified by a native speaker.
102
+ </p>
103
+ </asd20-viewport>
104
+ </asd20-modal>
105
+ </div>
106
+
52
107
  <asd20-print-header
53
108
  v-if="documentPrint"
54
109
  :organization-title="organization?.title || organization?.name || ''"
@@ -204,6 +259,9 @@
204
259
  import Asd20SkipTo from '../../../components/atoms/Asd20SkipTo'
205
260
  import Asd20Messaging from '../../../components/atoms/Asd20Messaging'
206
261
  import Asd20Icon from '../../../components/atoms/Asd20Icon'
262
+ import Asd20Button from '../../atoms/Asd20Button'
263
+ import Asd20Modal from '../../molecules/Asd20Modal'
264
+ import Asd20Viewport from '../../atoms/Asd20Viewport'
207
265
  import Asd20PageHeader from '../../../components/organisms/Asd20PageHeader'
208
266
  import Asd20SiteNavigation from '../../../components/organisms/Asd20SiteNavigation'
209
267
  import Asd20NotificationGroup from '../../../components/organisms/Asd20NotificationGroup'
@@ -222,6 +280,9 @@ export default {
222
280
  Asd20SkipTo,
223
281
  Asd20Messaging,
224
282
  Asd20Icon,
283
+ Asd20Button,
284
+ Asd20Modal,
285
+ Asd20Viewport,
225
286
  Asd20PageHeader,
226
287
  Asd20SiteNavigation,
227
288
  Asd20NotificationGroup,
@@ -245,6 +306,7 @@ export default {
245
306
  selectedMessageId: null,
246
307
  expandedTopicId: null,
247
308
  topicsOpen: false,
309
+ handbookHelpOpen: false,
248
310
  }),
249
311
  computed: {
250
312
  handbookDocument() {
@@ -337,6 +399,20 @@ export default {
337
399
  min-width: 0;
338
400
  margin-top: space(2.25);
339
401
 
402
+ &__help .asd20-modal {
403
+ max-width: 44rem;
404
+ color: var(--website-page__foreground-color);
405
+ }
406
+
407
+ &__help-content {
408
+ padding: space(1);
409
+
410
+ p {
411
+ font-size: 1rem;
412
+ line-height: 1.5;
413
+ }
414
+ }
415
+
340
416
  &__layout {
341
417
  display: grid;
342
418
  grid-template-columns: minmax(0, 1fr);
@@ -519,6 +595,8 @@ export default {
519
595
 
520
596
  @media print {
521
597
  .asd20-template-handbook {
598
+ &__help,
599
+ .asd20-page-header__call-to-action,
522
600
  &__index {
523
601
  display: none;
524
602
  }