Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion projects/cli/src/mcp/ui/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export const examplesRenderResource: UIResource = {
mimeType: MCP_UI_MIME_TYPE,
resourceUri: 'ui://elements/example-preview',
description:
'Use this MCP app when an Elements example or template should be shown to the user. It renders validated nve-* HTML from examples_get or examples_render so users can inspect component layout, theme, and validation messages visually instead of reading markup only.',
'Use this MCP app when an NVIDIA Elements UI example or template should be shown to the user. It renders validated nve-* HTML from examples_get or examples_render so users can inspect component layout, theme, and validation messages visually instead of reading markup only.',
getHtml: () => examplesRenderHtml
};

Expand Down
4 changes: 2 additions & 2 deletions projects/core/.visual/tabs-group.layout-end.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion projects/core/src/accordion/accordion.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ describe('accordion lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(22.7);
expect(report.payload.javascript.kb).toBeLessThan(22.9);
Comment thread
coryrylan marked this conversation as resolved.
});
});
4 changes: 2 additions & 2 deletions projects/core/src/alert/alert.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ describe('alert lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(23.4);
expect(report.payload.javascript.kb).toBeLessThan(23.6);
});

test('alert-group should meet lighthouse benchmarks', async () => {
Expand All @@ -33,6 +33,6 @@ describe('alert lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(23.4);
expect(report.payload.javascript.kb).toBeLessThan(23.6);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/button/button.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ describe('button lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(14.3);
expect(report.payload.javascript.kb).toBeLessThan(14.4);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ describe('button lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(14.3);
expect(report.payload.javascript.kb).toBeLessThan(14.4);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/color/color.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ describe('color lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(26.1);
expect(report.payload.javascript.kb).toBeLessThan(26.3);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/combobox/combobox.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ describe('combobox lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(36.3);
expect(report.payload.javascript.kb).toBeLessThan(36.4);
});

test('combobox multi select with large dataset should meet lighthouse benchmarks', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ describe('copy-button lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(26.2);
expect(report.payload.javascript.kb).toBeLessThan(26.4);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/datetime/datetime.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ describe('datetime lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.7);
expect(report.payload.javascript.kb).toBeLessThan(25.8);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/dialog/dialog.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ describe('dialog lighthouse report', () => {
expect(report.scores.performance).toBeGreaterThan(97); // bfcache
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.1);
expect(report.payload.javascript.kb).toBeLessThan(25.3);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ describe('dropdown-group lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25);
expect(report.payload.javascript.kb).toBeLessThan(25.2);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ describe('ButtonFormControlMixin core usage', () => {
expect(button.tabIndex).toBe(-1);

button.disabled = false;
button.readonly = true;
button.readOnly = true;
await elementIsStable(button);
expect(button.readOnly).toBe(true);
expect(button.hasAttribute('readonly')).toBe(true);
Expand All @@ -122,6 +122,38 @@ describe('ButtonFormControlMixin core usage', () => {
expect(button._internals.ariaExpanded).toBe('true');
});

it('should expose native invoker property and attribute pairings', async () => {
const button = await createButton(usage);
const commandTarget = getElement<HTMLElement>(fixture, '#target');
const interestTarget = document.createElement('div');
interestTarget.id = 'interest-target';
const popoverTarget = document.createElement('div');
popoverTarget.id = 'popover-target';
popoverTarget.popover = 'auto';
fixture.append(interestTarget, popoverTarget);

button.setAttribute('interestfor', interestTarget.id);
button.setAttribute('popovertarget', popoverTarget.id);
button.setAttribute('popovertargetaction', 'show');
await elementIsStable(button);

expect(button.commandForElement).toBe(commandTarget);
expect(button.interestForElement).toBe(interestTarget);
expect(button.popoverTargetElement).toBe(popoverTarget);
expect(button.popoverTargetAction).toBe('show');

button.commandForElement = commandTarget;
button.interestForElement = interestTarget;
button.popoverTargetElement = popoverTarget;
button.popoverTargetAction = 'hide';
await elementIsStable(button);

expect(button.getAttribute('commandfor')).toBe('');
expect(button.getAttribute('interestfor')).toBe('');
expect(button.getAttribute('popovertarget')).toBe('');
expect(button.getAttribute('popovertargetaction')).toBe('hide');
});

it('should dispatch commands and suppress interaction while unavailable', async () => {
const button = await createButton(usage);
const target = getElement<HTMLElement>(fixture, '#target');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ describe('icon-button lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(19.6);
expect(report.payload.javascript.kb).toBeLessThan(19.8);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/index.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ describe('lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.requests['index.js'].kb).toBeLessThan(133.1);
expect(report.payload.javascript.requests['index.js'].kb).toBeLessThan(133.3);

// if sudden drop in size, check vite bundle config and bundle demo to ensure side effects are properly preserved
expect(report.payload.javascript.requests['index.js'].kb).toBeGreaterThan(120);
Expand Down
2 changes: 1 addition & 1 deletion projects/core/src/menu/menu.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ describe('menu lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(16.1);
expect(report.payload.javascript.kb).toBeLessThan(16.3);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/month/month.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ describe('month lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.7);
expect(report.payload.javascript.kb).toBeLessThan(25.8);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ describe('notification lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.5);
expect(report.payload.javascript.kb).toBeLessThan(25.6);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/pagination/pagination.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ describe('pagination lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(38.6);
expect(report.payload.javascript.kb).toBeLessThan(38.7);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/panel/panel.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ describe('panel lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(21.6);
expect(report.payload.javascript.kb).toBeLessThan(21.8);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/password/password.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ describe('password lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.8);
expect(report.payload.javascript.kb).toBeLessThan(25.9);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ describe('preferences-input lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(32.7);
expect(report.payload.javascript.kb).toBeLessThan(32.9);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/search/search.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ describe('search lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.5);
expect(report.payload.javascript.kb).toBeLessThan(25.7);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/select/select.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ describe('select lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(34.8);
expect(report.payload.javascript.kb).toBeLessThan(34.9);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ describe('sort-button lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(18.9);
expect(report.payload.javascript.kb).toBeLessThan(19.1);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/steps/steps.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ describe('steps lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(23.9);
expect(report.payload.javascript.kb).toBeLessThan(24);
});
});
1 change: 1 addition & 0 deletions projects/core/src/tabs/tabs-group.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
:host {
--padding: var(--nve-ref-space-sm) 0 0 0;
display: block;
width: 100%;
}

:host(:is([alignment='start'], [alignment='end'])) {
Expand Down
2 changes: 1 addition & 1 deletion projects/core/src/tag/tag.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ describe('tag lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(18.7);
expect(report.payload.javascript.kb).toBeLessThan(18.9);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/time/time.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ describe('time lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.5);
expect(report.payload.javascript.kb).toBeLessThan(25.6);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/toast/toast.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ describe('toast lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(24.8);
expect(report.payload.javascript.kb).toBeLessThan(25);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/tree/tree.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ describe('tree lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(29.9);
expect(report.payload.javascript.kb).toBeLessThan(30);
});
});
2 changes: 1 addition & 1 deletion projects/core/src/week/week.test.lighthouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ describe('week lighthouse report', () => {
expect(report.scores.performance).toBe(100);
expect(report.scores.accessibility).toBe(100);
expect(report.scores.bestPractices).toBe(100);
expect(report.payload.javascript.kb).toBeLessThan(25.7);
expect(report.payload.javascript.kb).toBeLessThan(25.9);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,55 @@ describe('InterestInvokerController', () => {
expect(element.interestForElement).toBe(target);
});

it('should re-resolve inferred targets when popovertarget changes', async () => {
fixture = await createFixture(html`
<interest-invoker-controller-test-element popovertarget="first"></interest-invoker-controller-test-element>
<div id="first" popover="hint"></div>
<div id="second" popover="hint"></div>
`);
const element = fixture.querySelector<InterestInvokerControllerTestElement>(
'interest-invoker-controller-test-element'
)!;
const first = fixture.querySelector<HTMLElement>('#first')!;
const second = fixture.querySelector<HTMLElement>('#second')!;
const firstDispatch = vi.spyOn(first, 'dispatchEvent');
const secondDispatch = vi.spyOn(second, 'dispatchEvent');

element.dispatchEvent(new MouseEvent('mouseenter'));
element.setAttribute('popovertarget', 'second');
element.dispatchEvent(new MouseEvent('mouseenter'));
element.dispatchEvent(new MouseEvent('mouseleave'));

expect(firstDispatch.mock.calls.map(([event]) => event.type)).toEqual(['interest']);
expect(secondDispatch.mock.calls.map(([event]) => event.type)).toEqual(['interest', 'loseinterest']);
expect(element.interestForElement).toBe(second);
});

it('should preserve explicitly assigned interest targets when popovertarget changes', async () => {
fixture = await createFixture(html`
<interest-invoker-controller-test-element popovertarget="first"></interest-invoker-controller-test-element>
<div id="first" popover="hint"></div>
<div id="second" popover="hint"></div>
<div id="explicit"></div>
`);
const element = fixture.querySelector<InterestInvokerControllerTestElement>(
'interest-invoker-controller-test-element'
)!;
const first = fixture.querySelector<HTMLElement>('#first')!;
const explicit = fixture.querySelector<HTMLElement>('#explicit')!;

element.dispatchEvent(new MouseEvent('mouseenter'));
expect(element.interestForElement).toBe(first);

const explicitInterest = untilEvent<InterestTestEvent>(explicit, 'interest');
element.interestForElement = explicit;
element.setAttribute('popovertarget', 'second');
element.dispatchEvent(new MouseEvent('mouseenter'));

expect((await explicitInterest).source).toBe(element);
expect(element.interestForElement).toBe(explicit);
});

it('should no-op for missing targets and after disconnect', async () => {
fixture = await createFixture(
html`<interest-invoker-controller-test-element interestfor="missing"></interest-invoker-controller-test-element>`
Expand Down
Loading