Skip to content

Commit a634e39

Browse files
committed
feat(lint): add rule to restrict container="full" usage
- Introduced a new ESLint rule to restrict the use of container="full" to direct children of nve-page elements. - Updated relevant documentation and examples to reflect this change. - Adjusted existing components and tests to comply with the new linting rule. Signed-off-by: Cory Rylan <crylan@nvidia.com>
1 parent 216a7a9 commit a634e39

21 files changed

Lines changed: 481 additions & 123 deletions

‎projects/core/eslint.config.js‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ export default [
3535
'@nvidia-elements/lint/no-missing-gap-space': ['off']
3636
}
3737
},
38+
{
39+
files: ['src/alert/alert-group.test.visual.ts'],
40+
rules: {
41+
'@nvidia-elements/lint/no-restricted-container-full': ['off']
42+
}
43+
},
3844
{
3945
files: ['src/button/button.test.visual.ts'],
4046
rules: {

‎projects/core/src/alert/alert.examples.ts‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { html } from 'lit';
55
import'@nvidia-elements/core/alert/define.js';
66
import'@nvidia-elements/core/button/define.js';
77
import'@nvidia-elements/core/divider/define.js';
8+
import'@nvidia-elements/core/page/define.js';
89

910
exportdefault{
1011
title: 'Elements/Alert',
@@ -20,6 +21,7 @@ export const Default = {
2021

2122
/**
2223
* @summary Alert status variants for semantic messaging. Use accent for informational updates, warning for cautionary messages requiring attention, success for confirmations, and danger for errors or critical issues that may block user progress.
24+
* @tags test-case
2325
*/
2426
exportconstSupportStatus={
2527
render: ()=>html`
@@ -35,6 +37,7 @@ export const SupportStatus = {
3537

3638
/**
3739
* @summary Extended status variants for workflow and process state communication. Use these specialized states (scheduled, queued, running, failed, etc.) in dashboards, build pipelines, or task management interfaces where users need detailed visibility into process lifecycle stages.
40+
* @tags test-case
3841
*/
3942
exportconstStatus={
4043
render: ()=>html`
@@ -196,27 +199,27 @@ export const Actions = {
196199
*/
197200
exportconstProminence={
198201
render: ()=>html`
199-
<divnve-layout="column gap:md">
200-
<nve-alert-groupprominence="emphasis" container="full">
202+
<nve-pagedocument-scroll>
203+
<nve-alert-groupslot="header" prominence="emphasis" container="full">
201204
<nve-alertclosable><spanslot="prefix">Standard</span> banner message <ahref="#" nve-text="link" slot="actions">view details</a></nve-alert>
202205
</nve-alert-group>
203206
204-
<nve-alert-groupstatus="accent" prominence="emphasis" container="full">
207+
<nve-alert-groupslot="header" status="accent" prominence="emphasis" container="full">
205208
<nve-alertclosable><spanslot="prefix">Accent</span> banner message <ahref="#" nve-text="link" slot="actions">view details</a></nve-alert>
206209
</nve-alert-group>
207210
208-
<nve-alert-groupstatus="warning" prominence="emphasis" container="full">
211+
<nve-alert-groupslot="header" status="warning" prominence="emphasis" container="full">
209212
<nve-alertclosable><spanslot="prefix">Warning</span> banner message <ahref="#" nve-text="link" slot="actions">view details</a></nve-alert>
210213
</nve-alert-group>
211214
212-
<nve-alert-groupstatus="success" prominence="emphasis" container="full">
215+
<nve-alert-groupslot="header" status="success" prominence="emphasis" container="full">
213216
<nve-alertclosable><spanslot="prefix">Success</span> banner message <ahref="#" nve-text="link" slot="actions">view details</a></nve-alert>
214217
</nve-alert-group>
215218
216-
<nve-alert-groupstatus="danger" prominence="emphasis" container="full">
219+
<nve-alert-groupslot="header" status="danger" prominence="emphasis" container="full">
217220
<nve-alertclosable><spanslot="prefix">Danger</span> banner message <ahref="#" nve-text="link" slot="actions">view details</a></nve-alert>
218221
</nve-alert-group>
219-
</div>
222+
</nve-page>
220223
`
221224
}
222225

‎projects/core/src/card/card.examples.ts‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import '@nvidia-elements/core/icon-button/define.js';
88
import'@nvidia-elements/core/icon/define.js';
99
import'@nvidia-elements/core/tabs/define.js';
1010
import'@nvidia-elements/core/divider/define.js';
11+
import'@nvidia-elements/core/page/define.js';
1112

1213
exportdefault{
1314
title: 'Elements/Card',
@@ -148,19 +149,23 @@ export const WithTabs = {
148149

149150
/**
150151
* @summary Card with full container styling that extends to the edges, suitable for full-width layouts or when you want the card to blend with its container.
152+
* @tags test-case
151153
*/
152154
exportconstContainerFull={
153155
render: ()=>html`
154-
<nve-cardcontainer="full">
155-
<nve-card-content>
156-
<pnve-text="body">container full</p>
157-
</nve-card-content>
158-
</nve-card>
156+
<nve-pagedocument-scroll>
157+
<nve-cardcontainer="full">
158+
<nve-card-content>
159+
<pnve-text="body">container full</p>
160+
</nve-card-content>
161+
</nve-card>
162+
</nve-page>
159163
`
160164
}
161165

162166
/**
163167
* @summary Card with flat container styling that removes the default card elevation, ideal for subtle content containers or when you want a more minimal appearance.
168+
* @tags test-case
164169
*/
165170
exportconstContainerFlat={
166171
render: ()=>html`
@@ -198,6 +203,7 @@ export const Audit = {
198203

199204
/**
200205
* @summary Card with overflow content, where the card body scrolls when content exceeds the card height.
206+
* @tags test-case
201207
*/
202208
exportconstOverflowContent={
203209
render: ()=>html`

‎projects/core/src/grid/grid.examples.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,6 +1084,7 @@ export const Placeholder = {
10841084

10851085
/**
10861086
* @summary Full-width grid container for max space use, providing edge-to-edge data display for comprehensive information presentation.
1087+
* @tags test-case
10871088
*/
10881089
exportconstFull={
10891090
render: ()=>html`
@@ -1102,6 +1103,7 @@ export const Full = {
11021103

11031104
/**
11041105
* @summary Flat container styling for minimal visual weight, providing subtle grid presentation that integrates seamlessly with surrounding content.
1106+
* @tags test-case
11051107
*/
11061108
exportconstFlat={
11071109
render: ()=>html`

‎projects/core/src/grid/grid.test.visual.ts‎

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function head(theme: '' | 'dark' = '') {
1111
import '@nvidia-elements/core/checkbox/define.js';
1212
import '@nvidia-elements/core/radio/define.js';
1313
import '@nvidia-elements/core/icon-button/define.js';
14+
import '@nvidia-elements/core/page/define.js';
1415
document.documentElement.setAttribute('nve-theme', '${theme}');
1516
</script>
1617
<style>
@@ -411,27 +412,29 @@ function columnAlignEnd(theme: '' | 'dark' = '') {
411412
functioncontainerFull(theme: ''|'dark'=''){
412413
return/* html */`
413414
${head(theme)}
414-
<nve-grid container="full">
415-
<nve-grid-header>
416-
${Array(5)
417-
.fill('')
418-
.map(()=>`<nve-grid-column>•︎•︎•︎•︎•︎•︎</nve-grid-column> `)
419-
.join('')}
420-
</nve-grid-header>
421-
${Array(6)
422-
.fill('')
423-
.map(
424-
()=>`
425-
<nve-grid-row>
415+
<nve-page document-scroll>
416+
<nve-grid container="full">
417+
<nve-grid-header>
426418
${Array(5)
427419
.fill('')
428-
.map(()=>`<nve-grid-cell>•︎•︎•︎•︎•︎•︎</nve-grid-cell> `)
420+
.map(()=>`<nve-grid-column>•︎•︎•︎•︎•︎•︎</nve-grid-column> `)
429421
.join('')}
430-
</nve-grid-row>
431-
`
432-
)
433-
.join('')}
434-
</nve-grid>`;
422+
</nve-grid-header>
423+
${Array(6)
424+
.fill('')
425+
.map(
426+
()=>`
427+
<nve-grid-row>
428+
${Array(5)
429+
.fill('')
430+
.map(()=>`<nve-grid-cell>•︎•︎•︎•︎•︎•︎</nve-grid-cell> `)
431+
.join('')}
432+
</nve-grid-row>
433+
`
434+
)
435+
.join('')}
436+
</nve-grid>
437+
</nve-page>`;
435438
}
436439

437440
functioncontainerFlat(theme: ''|'dark'=''){

‎projects/core/src/page/page.css‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
:host {
55
--background: var(--nve-sys-layer-canvas-background);
66
--color: var(--nve-sys-layer-canvas-color);
7+
--gap: var(--nve-ref-space-md);
78
--padding: 0;
89
display: block;
910
height: 100vh;
@@ -151,7 +152,7 @@ slot {
151152
}
152153

153154
slot:not([name]) {
154-
gap:var(--nve-ref-space-md);
155+
gap:var(--gap);
155156
padding:var(--padding);
156157
display: flex;
157158
flex-direction: column;

‎projects/core/src/page/page.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import styles from './page.css?inline';
2929
* @cssprop --border-radius
3030
* @cssprop --box-shadow
3131
* @cssprop --min-height
32+
* @cssprop --gap - Vertical gap spacing between main content items
3233
* @aria https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/
3334
* @responsive false
3435
*

‎projects/core/src/toggletip/toggletip.examples.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export const AlertGroup = {
136136
render: ()=>html`
137137
<nve-toggletipid="toggletip-alert-group">
138138
<nve-toggletip-header>
139-
<nve-alert-groupstatus="danger" container="full" prominence="emphasis">
139+
<nve-alert-groupstatus="danger" prominence="emphasis">
140140
<nve-alert>Workflow Failed</nve-alert>
141141
</nve-alert-group>
142142
</nve-toggletip-header>

‎projects/core/src/toolbar/toolbar.examples.ts‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import '@nvidia-elements/core/button/define.js';
1010
import'@nvidia-elements/core/divider/define.js';
1111
import'@nvidia-elements/core/progressive-filter-chip/define.js';
1212
import'@nvidia-elements/core/input/define.js';
13+
import'@nvidia-elements/core/page/define.js';
1314

1415
exportdefault{
1516
title: 'Elements/Toolbar',
@@ -60,11 +61,13 @@ export const ContainerInset = {
6061
*/
6162
exportconstContainerFull={
6263
render: ()=>html`
63-
<nve-toolbarcontainer="full">
64-
<nve-button><nve-iconname="add"></nve-icon> create</nve-button>
65-
<nve-button><nve-iconname="delete"></nve-icon> delete</nve-button>
66-
<nve-icon-buttoncontainer="flat" icon-name="gear" slot="suffix" aria-label="settings"></nve-icon-button>
67-
</nve-toolbar>
64+
<nve-pagedocument-scroll>
65+
<nve-toolbarslot="subheader" container="full">
66+
<nve-button><nve-iconname="add"></nve-icon> create</nve-button>
67+
<nve-button><nve-iconname="delete"></nve-icon> delete</nve-button>
68+
<nve-icon-buttoncontainer="flat" icon-name="gear" slot="suffix" aria-label="settings"></nve-icon-button>
69+
</nve-toolbar>
70+
</nve-page>
6871
`
6972
};
7073

@@ -223,4 +226,4 @@ export const Container = {
223226
</nve-toolbar>
224227
</div>
225228
`
226-
};
229+
};

‎projects/internals/patterns/src/browse.examples.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default {
2727
*/
2828
exportconstContentRow={
2929
render: ()=>html`
30-
<nve-cardrole="listitem" container="full">
30+
<nve-cardrole="listitem" container="flat">
3131
<nve-card-content>
3232
<divnve-layout="grid align:vertical-center align:space-between gap:md">
3333
<divnve-layout="span:4 row gap:md align:vertical-center">

0 commit comments

Comments
 (0)