Skip to content

Commit 859c8f9

Browse files
committed
feat(media): init
Signed-off-by: Cory Rylan <crylan@nvidia.com>
1 parent 5618862 commit 859c8f9

139 files changed

Lines changed: 6513 additions & 221 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎knip.config.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ export default {
160160
entry: [
161161
...PACKAGE_FILES,
162162
...SOURCE_INDEX,
163+
...EXAMPLE_ENTRIES,
163164
...TEST_ENTRIES,
164165
...TEST_VARIANT_ENTRIES,
165166
...VITE_CONFIGS,

‎pnpm-lock.yaml‎

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎projects/internals/metadata/package.json‎

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@
109109
"../../forms/dist/custom-elements.json",
110110
"../../markdown/package.json",
111111
"../../markdown/dist/custom-elements.json",
112+
"../../media/package.json",
113+
"../../media/dist/custom-elements.json",
112114
"../../monaco/package.json",
113115
"../../monaco/dist/custom-elements.json",
114116
"../../patterns/package.json",
@@ -142,6 +144,10 @@
142144
"script": "../../markdown:build",
143145
"cascade": false
144146
},
147+
{
148+
"script": "../../media:build",
149+
"cascade": false
150+
},
145151
{
146152
"script": "../../monaco:build",
147153
"cascade": false
@@ -171,6 +177,9 @@
171177
"../../markdown/package.json",
172178
"../../markdown/README.md",
173179
"../../markdown/CHANGELOG.md",
180+
"../../media/package.json",
181+
"../../media/README.md",
182+
"../../media/CHANGELOG.md",
174183
"../../monaco/package.json",
175184
"../../monaco/README.md",
176185
"../../monaco/CHANGELOG.md",
@@ -212,6 +221,11 @@
212221
"../../markdown/coverage/unit/summary.json",
213222
"../../markdown/coverage/visual/summary.json",
214223
"../../markdown/coverage/ssr/summary.json",
224+
"../../media/coverage/unit/coverage-summary.json",
225+
"../../media/coverage/unit/summary.json",
226+
"../../media/coverage/axe/summary.json",
227+
"../../media/coverage/visual/summary.json",
228+
"../../media/coverage/ssr/summary.json",
215229
"../../monaco/coverage/unit/coverage-summary.json",
216230
"../../monaco/coverage/unit/summary.json",
217231
"../../monaco/coverage/visual/summary.json",
@@ -259,6 +273,22 @@
259273
"script": "../../markdown:test:coverage",
260274
"cascade": false
261275
},
276+
{
277+
"script": "../../media:test:coverage",
278+
"cascade": false
279+
},
280+
{
281+
"script": "../../media:test:axe",
282+
"cascade": false
283+
},
284+
{
285+
"script": "../../media:test:ssr",
286+
"cascade": false
287+
},
288+
{
289+
"script": "../../media:test:visual",
290+
"cascade": false
291+
},
262292
{
263293
"script": "../../monaco:test:coverage",
264294
"cascade": false
@@ -291,7 +321,8 @@
291321
"../../monaco/dist/**/*.examples.json",
292322
"../../code/dist/**/*.examples.json",
293323
"../../forms/dist/**/*.examples.json",
294-
"../../markdown/dist/**/*.examples.json"
324+
"../../markdown/dist/**/*.examples.json",
325+
"../../media/dist/**/*.examples.json"
295326
],
296327
"output": [
297328
"static/examples.json"
@@ -321,6 +352,10 @@
321352
"script": "../../monaco:build",
322353
"cascade": false
323354
},
355+
{
356+
"script": "../../media:build",
357+
"cascade": false
358+
},
324359
{
325360
"script": "../patterns:build",
326361
"cascade": false

‎projects/internals/metadata/src/services/api.service.test.ts‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
import{describe,expect,it}from'vitest';
4+
importMiniSearchfrom'minisearch';
5+
import{describe,expect,it,vi}from'vitest';
56
import{ApiService}from'./api.service.js';
67

78
describe('ApiService',()=>{
@@ -41,7 +42,12 @@ describe('ApiService', () => {
4142
});
4243

4344
it('should prioritize exact matches over fuzzy matches',async()=>{
45+
constsearchSpy=vi.spyOn(MiniSearch.prototype,'search').mockReturnValue([
46+
{id: 'nve-button-group',terms: ['button'],queryTerms: ['button'],score: 2,match: {}},
47+
{id: 'nve-button',terms: ['button'],queryTerms: ['button'],score: 1,match: {}}
48+
]);
4449
constresults=awaitApiService.search('nve-button');
50+
searchSpy.mockRestore();
4551

4652
expect(results[0]?.name).toBe('nve-button');
4753
});

‎projects/internals/metadata/src/tasks/api.utils.test.ts‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,65 @@
44
import{describe,expect,it}from'vitest';
55
import{getApi}from'./api.utils.js';
66

7+
typeApi=Awaited<ReturnType<typeofgetApi>>;
8+
typeApiElement=Api['data']['elements'][number];
9+
10+
functiongetElement(api: Api,name: string){
11+
returnapi.data.elements.find(element=>element.name===name);
12+
}
13+
14+
functiongetMember(element: ApiElement|undefined,name: string){
15+
returnelement?.manifest?.members.find(member=>member.name===name);
16+
}
17+
18+
functiongetAttribute(element: ApiElement|undefined,name: string){
19+
returnelement?.manifest?.attributes?.find(attribute=>attribute.name===name);
20+
}
21+
722
describe('ApiUtils',()=>{
823
it('should return the api json',async()=>{
924
expect(getApi).toBeDefined();
1025
});
26+
27+
it('should include attribute names for inherited button members',async()=>{
28+
constapi=awaitgetApi();
29+
constbutton=getElement(api,'nve-button');
30+
31+
expect(getMember(button,'pressed')?.attribute).toBe('pressed');
32+
expect(getMember(button,'readOnly')?.attribute).toBe('readonly');
33+
expect(getMember(button,'commandForElement')?.attribute).toBe('commandfor');
34+
expect(button?.markdown).toContain('| readOnly (readonly) |');
35+
});
36+
37+
it('should project checkbox and button mixin APIs onto media mute button',async()=>{
38+
constapi=awaitgetApi();
39+
constmuteButton=getElement(api,'nve-media-mute-button');
40+
41+
expect(getMember(muteButton,'pressed')?.attribute).toBe('pressed');
42+
expect(getMember(muteButton,'checked')?.attribute).toBe('checked');
43+
expect(getMember(muteButton,'readOnly')?.attribute).toBe('readonly');
44+
expect(getMember(muteButton,'commandForElement')?.attribute).toBe('commandfor');
45+
expect(getAttribute(muteButton,'commandForElement')).toBeUndefined();
46+
expect(muteButton?.markdown).toContain('| checked |');
47+
});
48+
49+
it('should project slider mixin APIs onto media time range',async()=>{
50+
constapi=awaitgetApi();
51+
consttimeRange=getElement(api,'nve-media-time-range');
52+
53+
expect(getMember(timeRange,'min')?.attribute).toBe('min');
54+
expect(getMember(timeRange,'valueAsNumber')?.attribute).toBeUndefined();
55+
expect(getAttribute(timeRange,'commandForElement')).toBeUndefined();
56+
expect(timeRange?.markdown).toContain('| valueAsNumber |');
57+
});
58+
59+
it('should project select mixin APIs onto media playback rate select',async()=>{
60+
constapi=awaitgetApi();
61+
constplaybackRateSelect=getElement(api,'nve-media-playback-rate-select');
62+
63+
expect(getMember(playbackRateSelect,'selectedIndex')?.attribute).toBeUndefined();
64+
expect(getMember(playbackRateSelect,'value')?.attribute).toBe('value');
65+
expect(getAttribute(playbackRateSelect,'commandForElement')).toBeUndefined();
66+
expect(playbackRateSelect?.markdown).toContain('| selectedIndex |');
67+
});
1168
});

‎projects/internals/metadata/src/tasks/api.utils.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ export async function getApi(): Promise<{
133133
'../../../../themes',
134134
'../../../../code',
135135
'../../../../markdown',
136+
'../../../../media',
136137
'../../../../monaco'
137138
];
138139

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:4ab23ecf33a7e8e2aaf1cb1687342190b4d33edb04d6c6912b29ba2b208a9c0d
3-
size 163868
2+
oid sha256:dfcfc695c649e81bf293ef3d690bfa7effbc5dd752207c7f74948d2a347731cb
3+
size 196863
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:e91bd7c9d11912873a0fbcd81f3701ed94535e34bc0de28c77870e6f5a5f883f
3-
size 17357
2+
oid sha256:31de391d99d1142f68817d75a2e9c64edd01789776ce31230aafe57cded8468c
3+
size 18366
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:e07df5dad51d1b03d42dd8fe0ec6197a985a651a6b91debbb7dd0c36a28b6000
3-
size 2580493
2+
oid sha256:c99db0c9e11858b7b23e07dd5b7096cb0bd1d7dbb4a71fe1fb59716a980e729e
3+
size 2676247

0 commit comments

Comments
 (0)