@asd20/ui-next 2.10.4 → 2.10.6
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,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.10.6](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.10.5...ui-next-v2.10.6) (2026-05-15)
|
|
4
|
+
|
|
5
|
+
## [2.10.5](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.10.4...ui-next-v2.10.5) (2026-05-15)
|
|
6
|
+
|
|
3
7
|
## [2.10.4](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.10.3...ui-next-v2.10.4) (2026-05-14)
|
|
4
8
|
|
|
5
9
|
|
package/README.md
CHANGED
|
@@ -1,53 +1,145 @@
|
|
|
1
1
|
# @asd20/ui-next
|
|
2
2
|
|
|
3
|
-
Vue 3
|
|
3
|
+
Shared Vue 3 UI package for Academy District 20 websites and web apps.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Current local version: `2.10.4`
|
|
6
|
+
|
|
7
|
+
This package is the active shared presentation layer for the ASD20 web platform.
|
|
8
|
+
It provides reusable components, public website templates, app-shell templates,
|
|
9
|
+
icons, design tokens, Sass helpers, assets, directives, and helper functions
|
|
10
|
+
used by the Nuxt website, standalone apps, and selected CommCenter preview
|
|
11
|
+
surfaces.
|
|
12
|
+
|
|
13
|
+
## Platform Role
|
|
14
|
+
|
|
15
|
+
This repo owns the packaged UI contract for:
|
|
16
|
+
|
|
17
|
+
- public website templates consumed by `asd20-website`
|
|
18
|
+
- app templates and components consumed by calendar, directory, school
|
|
19
|
+
directory, and file directory apps
|
|
20
|
+
- selected CommCenter preview components and icon/template imports
|
|
21
|
+
- global design tokens and Sass helpers shared across consumers
|
|
22
|
+
- icon metadata and SVG component exports
|
|
23
|
+
- helper functions for event/message/page/file/people mapping, search calls,
|
|
24
|
+
organization labels, link handling, cookies, email, and analytics feedback
|
|
25
|
+
|
|
26
|
+
The package is published to npm as `@asd20/ui-next`. It should be treated as a
|
|
27
|
+
multi-repo contract, not as an app-local component folder.
|
|
28
|
+
|
|
29
|
+
## Runtime Contract
|
|
30
|
+
|
|
31
|
+
- Node `>=20`
|
|
32
|
+
- npm `>=10`
|
|
33
|
+
- Vue peer dependency `^3.0.0`
|
|
34
|
+
- Package build system: Vue CLI / webpack
|
|
35
|
+
- Unit test runner: Vitest
|
|
36
|
+
- Component development: Storybook
|
|
6
37
|
|
|
7
38
|
## Public Entry Points
|
|
8
39
|
|
|
40
|
+
Supported import paths are defined in `package.json` and guarded by
|
|
41
|
+
`scripts/public-api-contract.js`:
|
|
42
|
+
|
|
9
43
|
- `@asd20/ui-next`
|
|
10
44
|
- `@asd20/ui-next/components`
|
|
11
45
|
- `@asd20/ui-next/templates`
|
|
46
|
+
- `@asd20/ui-next/templates/*`
|
|
12
47
|
- `@asd20/ui-next/icons`
|
|
13
48
|
- `@asd20/ui-next/helpers`
|
|
14
49
|
- `@asd20/ui-next/directives`
|
|
50
|
+
- `@asd20/ui-next/install`
|
|
15
51
|
- `@asd20/ui-next/styles.css`
|
|
16
52
|
- `@asd20/ui-next/design/*`
|
|
17
53
|
- `@asd20/ui-next/assets/*`
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
54
|
+
- `@asd20/ui-next/package.json`
|
|
55
|
+
|
|
56
|
+
Downstream repos should import through those paths. Private source imports are
|
|
57
|
+
not part of the supported contract unless they are explicitly covered by the
|
|
58
|
+
package `exports` map.
|
|
59
|
+
|
|
60
|
+
## Source Layout
|
|
61
|
+
|
|
62
|
+
| Path | Purpose |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| `components.js` | Public component exports. |
|
|
65
|
+
| `templates.js` | Public template exports. |
|
|
66
|
+
| `icons.js` | Generated icon component exports. |
|
|
67
|
+
| `helpers.js` | Public helper exports. |
|
|
68
|
+
| `directives.js` | Public directive exports. |
|
|
69
|
+
| `install.js` | Vue plugin install helpers. |
|
|
70
|
+
| `src/components/atoms/` | Base UI components. |
|
|
71
|
+
| `src/components/molecules/` | Combined controls and display units. |
|
|
72
|
+
| `src/components/organisms/` | Larger site/app sections. |
|
|
73
|
+
| `src/components/templates/` | Website and app templates. |
|
|
74
|
+
| `src/design/` | CSS tokens, Sass helpers, typography, template stack, images. |
|
|
75
|
+
| `src/assets/icons/` | Raw SVG icon assets. |
|
|
76
|
+
| `src/helpers/` | Shared helper implementation. |
|
|
77
|
+
| `src/directives/` | Directive implementation. |
|
|
78
|
+
| `scripts/` | Build, package, release, and verification scripts. |
|
|
79
|
+
| `docs/migration/` | Historical migration and release notes. |
|
|
80
|
+
|
|
81
|
+
## Local Development
|
|
82
|
+
|
|
83
|
+
```sh
|
|
22
84
|
npm install
|
|
23
85
|
npm run storybook
|
|
86
|
+
npm test
|
|
24
87
|
npm run build
|
|
25
88
|
```
|
|
26
89
|
|
|
27
|
-
|
|
90
|
+
Regenerate icon metadata after adding, removing, or renaming SVG icon assets:
|
|
28
91
|
|
|
29
|
-
|
|
92
|
+
```sh
|
|
93
|
+
npm run generate:icons
|
|
94
|
+
npm run verify:icon-metadata
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Package Verification
|
|
98
|
+
|
|
99
|
+
Build the staged publish artifact:
|
|
30
100
|
|
|
31
|
-
```
|
|
101
|
+
```sh
|
|
32
102
|
npm run build:package
|
|
33
103
|
```
|
|
34
104
|
|
|
35
|
-
|
|
105
|
+
Verify the source and staged package contract:
|
|
36
106
|
|
|
37
|
-
```
|
|
107
|
+
```sh
|
|
38
108
|
npm run verify:publish
|
|
39
109
|
```
|
|
40
110
|
|
|
41
|
-
That
|
|
111
|
+
That command rebuilds `dist/package`, verifies public exports, verifies Vue 3
|
|
112
|
+
input/lifecycle/instance-id contracts, verifies the staged package, and runs
|
|
113
|
+
`npm pack --dry-run`.
|
|
42
114
|
|
|
43
|
-
|
|
115
|
+
Verify the packed consumer install path:
|
|
44
116
|
|
|
45
|
-
```
|
|
117
|
+
```sh
|
|
46
118
|
npm run verify:release
|
|
47
119
|
```
|
|
48
120
|
|
|
49
|
-
That
|
|
121
|
+
That command packs the staged package, installs it into a temporary Vue 3 smoke
|
|
122
|
+
app, imports the public components/templates/icons/helpers/directives/styles,
|
|
123
|
+
and confirms the consumer build succeeds.
|
|
124
|
+
|
|
125
|
+
## Release
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
npm run release
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The release flow publishes from `dist/package`, tags as `ui-next-v${version}`,
|
|
132
|
+
and runs `npm run verify:release` before publishing.
|
|
133
|
+
|
|
134
|
+
## Change Guidance
|
|
135
|
+
|
|
136
|
+
Before changing this package, identify which public entry point is affected and
|
|
137
|
+
which downstream repos consume it. Template, style/token, icon, input model, and
|
|
138
|
+
helper changes are especially likely to require downstream website or app
|
|
139
|
+
verification.
|
|
50
140
|
|
|
51
|
-
|
|
141
|
+
For broader architecture context, see
|
|
142
|
+
`../asd20-website/docs/platform/shared-ui-contract.md`.
|
|
52
143
|
|
|
53
|
-
The
|
|
144
|
+
The migration record under `docs/migration/` is retained for audit history,
|
|
145
|
+
release decisions, and future cleanup planning.
|
package/package.json
CHANGED
|
@@ -137,17 +137,6 @@
|
|
|
137
137
|
v-if="callsToAction.length > 0"
|
|
138
138
|
class="asd20-page-header__call-to-action"
|
|
139
139
|
>
|
|
140
|
-
<!-- <asd20-button
|
|
141
|
-
v-for="(cta, index) in callsToAction"
|
|
142
|
-
:key="index"
|
|
143
|
-
:size="['sm', 'md'].indexOf(mq) > -1 ? 'sm' : 'lg'"
|
|
144
|
-
:label="cta.label"
|
|
145
|
-
:icon="cta.icon"
|
|
146
|
-
:link="cta.url"
|
|
147
|
-
reversed
|
|
148
|
-
horizontal
|
|
149
|
-
centered
|
|
150
|
-
/> -->
|
|
151
140
|
<asd20-button
|
|
152
141
|
v-if="callsToAction.length >= 1"
|
|
153
142
|
:size="mq === 'sm' ? 'sm' : 'lg'"
|
|
@@ -183,7 +172,6 @@
|
|
|
183
172
|
import scrollTrack from '../../../directives/scroll-track'
|
|
184
173
|
import responsiveBreakpointMixin from '../../../mixins/responsiveBreakpointMixin'
|
|
185
174
|
import Asd20Button from '../../atoms/Asd20Button'
|
|
186
|
-
// import Asd20DistrictLogo from '../../../components/atoms/Asd20DistrictLogo'
|
|
187
175
|
import Asd20OrganizationPicker from '../../../components/organisms/Asd20OrganizationPicker'
|
|
188
176
|
import Asd20Breadcrumb from '../../../components/atoms/Asd20Breadcrumb'
|
|
189
177
|
import Asd20LanguageTranslation from '../../molecules/Asd20LanguageTranslation'
|
|
@@ -196,7 +184,6 @@ export default {
|
|
|
196
184
|
name: 'Asd20PageHeader',
|
|
197
185
|
components: {
|
|
198
186
|
Asd20Button,
|
|
199
|
-
// Asd20DistrictLogo,
|
|
200
187
|
Asd20OrganizationPicker,
|
|
201
188
|
Asd20Breadcrumb,
|
|
202
189
|
Asd20LanguageTranslation,
|
|
@@ -455,26 +442,6 @@ export default {
|
|
|
455
442
|
background: var(--website-header__background-color) var(--imageBackground)
|
|
456
443
|
left center / cover no-repeat;
|
|
457
444
|
}
|
|
458
|
-
/* .add-fade {*/
|
|
459
|
-
/* &::before {*/
|
|
460
|
-
/* content: '';*/
|
|
461
|
-
/* // height: auto;*/
|
|
462
|
-
/* display: block;*/
|
|
463
|
-
/* position: absolute;*/
|
|
464
|
-
/* z-index: -1;*/
|
|
465
|
-
/* top: 0;*/
|
|
466
|
-
/* bottom: auto;*/
|
|
467
|
-
/* left: 0;*/
|
|
468
|
-
/* width: 100%;*/
|
|
469
|
-
/* height: 100%;*/
|
|
470
|
-
/* background: linear-gradient(*/
|
|
471
|
-
/* 30deg,*/
|
|
472
|
-
/* rgba(6, 11, 31, 0.7) 10%,*/
|
|
473
|
-
/* rgba(6, 11, 31, 0.5) 55%,*/
|
|
474
|
-
/* transparent 70%*/
|
|
475
|
-
/* );*/
|
|
476
|
-
/* }*/
|
|
477
|
-
/* }*/
|
|
478
445
|
|
|
479
446
|
h1 {
|
|
480
447
|
position: relative;
|
|
@@ -680,7 +647,6 @@ export default {
|
|
|
680
647
|
flex-grow: 1;
|
|
681
648
|
padding: 1rem 1rem 1rem 2rem;
|
|
682
649
|
min-height: clamp(240px, 40vh, 300px);
|
|
683
|
-
/* margin-right: space(3);*/
|
|
684
650
|
background: transparent;
|
|
685
651
|
}
|
|
686
652
|
|
|
@@ -701,7 +667,6 @@ export default {
|
|
|
701
667
|
max-height: inherit;
|
|
702
668
|
object-fit: cover;
|
|
703
669
|
border-top: none;
|
|
704
|
-
/* opacity: 0;*/
|
|
705
670
|
}
|
|
706
671
|
}
|
|
707
672
|
|
|
@@ -712,9 +677,6 @@ export default {
|
|
|
712
677
|
&__title-content {
|
|
713
678
|
position: relative;
|
|
714
679
|
max-width: space(35);
|
|
715
|
-
/* .asd20-page-header__lead {*/
|
|
716
|
-
/* margin-right: 25%;*/
|
|
717
|
-
/* }*/
|
|
718
680
|
}
|
|
719
681
|
|
|
720
682
|
& :deep(.asd20-organization-picker) {
|
|
@@ -759,7 +721,6 @@ export default {
|
|
|
759
721
|
flex-grow: 1;
|
|
760
722
|
padding: space(0) space(2) space(1) space(3);
|
|
761
723
|
min-height: clamp(240px, 40vh, 300px);
|
|
762
|
-
/* margin-right: space(3);*/
|
|
763
724
|
background: transparent;
|
|
764
725
|
}
|
|
765
726
|
&__image {
|
|
@@ -780,7 +741,6 @@ export default {
|
|
|
780
741
|
max-height: inherit;
|
|
781
742
|
object-fit: cover;
|
|
782
743
|
border-top: none;
|
|
783
|
-
/* opacity: 0;*/
|
|
784
744
|
}
|
|
785
745
|
}
|
|
786
746
|
h1 {
|
|
@@ -794,9 +754,6 @@ export default {
|
|
|
794
754
|
&__title-content {
|
|
795
755
|
position: relative;
|
|
796
756
|
max-width: space(35);
|
|
797
|
-
/* .asd20-page-header__lead {*/
|
|
798
|
-
/* margin-right: 25%;*/
|
|
799
|
-
/* }*/
|
|
800
757
|
}
|
|
801
758
|
|
|
802
759
|
& :deep(.asd20-organization-picker) {
|
|
@@ -293,20 +293,6 @@ export default {
|
|
|
293
293
|
return this.loginsByTab.find(t => this.tab === t.hash)
|
|
294
294
|
},
|
|
295
295
|
},
|
|
296
|
-
// created() {
|
|
297
|
-
// if (typeof window !== 'undefined' && this.tabsList.length) {
|
|
298
|
-
// window.location.hash = this.tabsList[0].hash
|
|
299
|
-
// console.log(this.tabsList[0].hash)
|
|
300
|
-
// if (
|
|
301
|
-
// typeof window !== 'undefined' &&
|
|
302
|
-
// window.location.hash.indexOf('#tab-') > -1
|
|
303
|
-
// ) {
|
|
304
|
-
// this.tab = window.location.hash
|
|
305
|
-
// console.log(window.location.hash)
|
|
306
|
-
// }
|
|
307
|
-
// window.focus(this.tab)
|
|
308
|
-
// }
|
|
309
|
-
// },
|
|
310
296
|
|
|
311
297
|
created() {
|
|
312
298
|
if (typeof window === 'undefined' || !this.tabsList.length) return
|
|
@@ -359,13 +345,9 @@ export default {
|
|
|
359
345
|
overflow: hidden;
|
|
360
346
|
margin-top: space(2.25);
|
|
361
347
|
.asd20-page-header::after {
|
|
362
|
-
|
|
363
|
-
}
|
|
364
|
-
.asd20-page-header {
|
|
365
|
-
margin-bottom: space(0) !important;
|
|
366
|
-
.asd20-page-header__tools {
|
|
367
|
-
}
|
|
348
|
+
display: none;
|
|
368
349
|
}
|
|
350
|
+
|
|
369
351
|
.notification-group--floating {
|
|
370
352
|
position: absolute;
|
|
371
353
|
right: space(0.5);
|
|
@@ -381,9 +363,9 @@ export default {
|
|
|
381
363
|
background-position-y: top;
|
|
382
364
|
padding: space(1) 0;
|
|
383
365
|
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
366
|
+
.logins-tab-bar {
|
|
367
|
+
border-bottom: none;
|
|
368
|
+
}
|
|
387
369
|
.logins-list {
|
|
388
370
|
display: flex;
|
|
389
371
|
flex-direction: column;
|
|
@@ -421,9 +403,6 @@ export default {
|
|
|
421
403
|
.notification-group--inline {
|
|
422
404
|
margin: space(2) space(3) space(1) space(3);
|
|
423
405
|
}
|
|
424
|
-
.asd20-page-header::after {
|
|
425
|
-
border-bottom-left-radius: 0;
|
|
426
|
-
}
|
|
427
406
|
.asd20-page-content {
|
|
428
407
|
margin-top: space(1);
|
|
429
408
|
}
|