@asd20/ui-next 2.10.3 → 2.10.5

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,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.10.5](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.10.4...ui-next-v2.10.5) (2026-05-15)
4
+
5
+ ## [2.10.4](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.10.3...ui-next-v2.10.4) (2026-05-14)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * fix semantic markup for search component ([d63ce71](https://github.com/academydistrict20/asd20-ui-next/commit/d63ce71b149db115813fda8ff14e905612c526ba))
11
+
3
12
  ## [2.10.3](https://github.com/academydistrict20/asd20-ui-next/compare/ui-next-v2.10.2...ui-next-v2.10.3) (2026-05-13)
4
13
 
5
14
 
package/README.md CHANGED
@@ -1,53 +1,145 @@
1
1
  # @asd20/ui-next
2
2
 
3
- Vue 3 component library for ASD20 shared UI surfaces.
3
+ Shared Vue 3 UI package for Academy District 20 websites and web apps.
4
4
 
5
- The current published baseline is `@asd20/ui-next@2.0.0`. This release is Vue 3-only and ships the model-only shared input contract.
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
- ## Development
20
-
21
- ```bash
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
- ## Release Validation
90
+ Regenerate icon metadata after adding, removing, or renaming SVG icon assets:
28
91
 
29
- Build the staged publish artifact with:
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
- ```bash
101
+ ```sh
32
102
  npm run build:package
33
103
  ```
34
104
 
35
- Validate the publish shape end to end with:
105
+ Verify the source and staged package contract:
36
106
 
37
- ```bash
107
+ ```sh
38
108
  npm run verify:publish
39
109
  ```
40
110
 
41
- That flow rebuilds `dist/package`, verifies the root and staged export contract, checks the public API surface, and runs `npm pack --dry-run` against the staged package.
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
- Validate the packed consumer install path with:
115
+ Verify the packed consumer install path:
44
116
 
45
- ```bash
117
+ ```sh
46
118
  npm run verify:release
47
119
  ```
48
120
 
49
- That flow packs the staged package into a tarball, installs it into a temporary Vue 3 smoke app, and confirms the consumer build succeeds against the installed package shape.
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
- ## Migration Record
141
+ For broader architecture context, see
142
+ `../asd20-website/docs/platform/shared-ui-contract.md`.
52
143
 
53
- The package is now release-ready and published, but the migration record is still kept under `docs/migration/` for downstream audit history, release decisions, and future cleanup planning.
144
+ The migration record under `docs/migration/` is retained for audit history,
145
+ release decisions, and future cleanup planning.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asd20/ui-next",
3
- "version": "2.10.3",
3
+ "version": "2.10.5",
4
4
  "private": false,
5
5
  "description": "ASD20 UI component library for Vue 3.",
6
6
  "license": "MIT",
@@ -32,8 +32,7 @@
32
32
  !searchingAi
33
33
  "
34
34
  title="Ask a Question or Search by Keyword"
35
- description="Asking a <b>question</b> will generate an AI answer with related pages and files. Or just search for pages and files by entering <b>keyword(s)</b>.
36
- <hr/>AI can make mistakes. Verify important information."
35
+ :description="idleSearchDescription"
37
36
  />
38
37
  <div
39
38
  v-if="showSearchInputBeforeResults"
@@ -268,8 +267,7 @@
268
267
  !searchingAi
269
268
  "
270
269
  title="Ask a Question or Search by Keyword"
271
- description="Asking a <b>question</b> will generate an AI answer with related pages and files. Or just search for pages and files by entering <b>keyword(s)</b>.
272
- <hr/>AI can make mistakes. Verify important information."
270
+ :description="idleSearchDescription"
273
271
  />
274
272
  <asd20-notification
275
273
  v-if="aiErrorMessage"
@@ -320,8 +318,7 @@
320
318
  !searchingAi
321
319
  "
322
320
  title="Ask a Question or Search by Keyword"
323
- description="Asking a <b>question</b> will generate an AI answer with related pages and files. Or just search for pages and files by entering <b>keyword(s)</b>.
324
- <hr/>AI can make mistakes. Verify important information."
321
+ :description="idleSearchDescription"
325
322
  />
326
323
  <asd20-notification
327
324
  v-if="
@@ -377,8 +374,7 @@
377
374
  !searchingAi
378
375
  "
379
376
  title="Ask a Question or Search by Keyword"
380
- description="Asking a <b>question</b> will generate an AI answer with related pages and files. Or just search for pages and files by entering <b>keyword(s)</b>.
381
- <hr/>AI can make mistakes. Verify important information."
377
+ :description="idleSearchDescription"
382
378
  />
383
379
  <asd20-notification
384
380
  v-if="keywords && currentFiles.length === 0 && !searchingFiles"
@@ -581,6 +577,11 @@ const SEARCH_NO_PAGE_RESULTS_FALLBACKS = NO_PAGE_RESULTS_FALLBACKS.map(
581
577
  ownerOrganizationId: DISTRICT_ORG_ID,
582
578
  })
583
579
  )
580
+ const IDLE_SEARCH_DESCRIPTION = [
581
+ 'Asking a <strong>question</strong> will generate an AI answer with related pages and files. ',
582
+ 'Or just search for pages and files by entering <strong>keyword(s)</strong>.',
583
+ '<hr/>AI can make mistakes. Verify important information.',
584
+ ].join('')
584
585
 
585
586
  // const SUBDOMAIN_LABELS = {
586
587
  // rampart: 'Rampart High School',
@@ -704,6 +705,10 @@ export default {
704
705
  }),
705
706
 
706
707
  computed: {
708
+ idleSearchDescription() {
709
+ return IDLE_SEARCH_DESCRIPTION
710
+ },
711
+
707
712
  currentPages() {
708
713
  if (Array.isArray(this.localSearchPages)) return this.localSearchPages
709
714
  return Array.isArray(this.resolvedPages) ? this.resolvedPages : []