Layout
Scroll Area
Usage#
import { WdsScrollAreaComponent } from '@wds/angular/scroll-area';viewport returns the scrolling element for scrollTo().
Examples#
Default#
label names the area as a region.
import { Component } from '@angular/core';
import { WdsScrollAreaComponent } from '@wds/angular/scroll-area';
@Component({
selector: 'app-scroll-area-default-demo',
imports: [WdsScrollAreaComponent],
template: `
<wds-scroll-area class="h-72 w-48 rounded-md border border-border" label="Tags">
<div class="p-4">
<div class="mb-4 text-sm font-medium leading-none">Tags</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.50</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.49</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.48</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.47</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.46</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.45</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.44</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.43</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.42</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.41</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.40</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.39</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.38</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.37</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.36</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.35</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.34</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.33</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.32</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.31</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.30</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.29</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.28</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.27</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.26</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.25</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.24</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.23</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.22</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.21</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.20</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.19</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.18</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.17</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.16</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.15</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.14</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.13</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.12</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.11</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.10</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.9</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.8</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.7</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.6</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.5</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.4</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.3</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.2</div>
<div class="border-b border-border py-2 text-sm">v1.2.0-beta.1</div>
</div>
</wds-scroll-area>
`,
})
export class ScrollAreaDefaultDemo {}Horizontal#
orientation="horizontal" scrolls sideways.
import { Component } from '@angular/core';
import { WdsScrollAreaComponent } from '@wds/angular/scroll-area';
@Component({
selector: 'app-scroll-area-horizontal-demo',
imports: [WdsScrollAreaComponent],
template: `
<wds-scroll-area orientation="horizontal" class="w-full max-w-md rounded-md border border-border" label="Photos">
<div class="flex w-max gap-4 p-4">
<figure class="m-0 shrink-0">
<div class="h-40 w-36 rounded-md bg-muted"></div>
<figcaption class="pt-2 text-xs text-muted-foreground">Photo by <span class="font-semibold text-foreground">Ornella Binni</span></figcaption>
</figure>
<figure class="m-0 shrink-0">
<div class="h-40 w-36 rounded-md bg-muted"></div>
<figcaption class="pt-2 text-xs text-muted-foreground">Photo by <span class="font-semibold text-foreground">Tom Byrom</span></figcaption>
</figure>
<figure class="m-0 shrink-0">
<div class="h-40 w-36 rounded-md bg-muted"></div>
<figcaption class="pt-2 text-xs text-muted-foreground">Photo by <span class="font-semibold text-foreground">Vladimir Malyavko</span></figcaption>
</figure>
<figure class="m-0 shrink-0">
<div class="h-40 w-36 rounded-md bg-muted"></div>
<figcaption class="pt-2 text-xs text-muted-foreground">Photo by <span class="font-semibold text-foreground">Mira Stone</span></figcaption>
</figure>
<figure class="m-0 shrink-0">
<div class="h-40 w-36 rounded-md bg-muted"></div>
<figcaption class="pt-2 text-xs text-muted-foreground">Photo by <span class="font-semibold text-foreground">Ola Nowak</span></figcaption>
</figure>
<figure class="m-0 shrink-0">
<div class="h-40 w-36 rounded-md bg-muted"></div>
<figcaption class="pt-2 text-xs text-muted-foreground">Photo by <span class="font-semibold text-foreground">Pedro Duarte</span></figcaption>
</figure>
</div>
</wds-scroll-area>
`,
})
export class ScrollAreaHorizontalDemo {}Both directions#
orientation="both" scrolls both ways, e.g. a wide table; the two scrollbars leave the corner free.
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 | Column 7 | Column 8 | Column 9 | Column 10 | Column 11 | Column 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| R1C1 | R1C2 | R1C3 | R1C4 | R1C5 | R1C6 | R1C7 | R1C8 | R1C9 | R1C10 | R1C11 | R1C12 |
| R2C1 | R2C2 | R2C3 | R2C4 | R2C5 | R2C6 | R2C7 | R2C8 | R2C9 | R2C10 | R2C11 | R2C12 |
| R3C1 | R3C2 | R3C3 | R3C4 | R3C5 | R3C6 | R3C7 | R3C8 | R3C9 | R3C10 | R3C11 | R3C12 |
| R4C1 | R4C2 | R4C3 | R4C4 | R4C5 | R4C6 | R4C7 | R4C8 | R4C9 | R4C10 | R4C11 | R4C12 |
| R5C1 | R5C2 | R5C3 | R5C4 | R5C5 | R5C6 | R5C7 | R5C8 | R5C9 | R5C10 | R5C11 | R5C12 |
| R6C1 | R6C2 | R6C3 | R6C4 | R6C5 | R6C6 | R6C7 | R6C8 | R6C9 | R6C10 | R6C11 | R6C12 |
| R7C1 | R7C2 | R7C3 | R7C4 | R7C5 | R7C6 | R7C7 | R7C8 | R7C9 | R7C10 | R7C11 | R7C12 |
| R8C1 | R8C2 | R8C3 | R8C4 | R8C5 | R8C6 | R8C7 | R8C8 | R8C9 | R8C10 | R8C11 | R8C12 |
| R9C1 | R9C2 | R9C3 | R9C4 | R9C5 | R9C6 | R9C7 | R9C8 | R9C9 | R9C10 | R9C11 | R9C12 |
| R10C1 | R10C2 | R10C3 | R10C4 | R10C5 | R10C6 | R10C7 | R10C8 | R10C9 | R10C10 | R10C11 | R10C12 |
| R11C1 | R11C2 | R11C3 | R11C4 | R11C5 | R11C6 | R11C7 | R11C8 | R11C9 | R11C10 | R11C11 | R11C12 |
| R12C1 | R12C2 | R12C3 | R12C4 | R12C5 | R12C6 | R12C7 | R12C8 | R12C9 | R12C10 | R12C11 | R12C12 |
| R13C1 | R13C2 | R13C3 | R13C4 | R13C5 | R13C6 | R13C7 | R13C8 | R13C9 | R13C10 | R13C11 | R13C12 |
| R14C1 | R14C2 | R14C3 | R14C4 | R14C5 | R14C6 | R14C7 | R14C8 | R14C9 | R14C10 | R14C11 | R14C12 |
| R15C1 | R15C2 | R15C3 | R15C4 | R15C5 | R15C6 | R15C7 | R15C8 | R15C9 | R15C10 | R15C11 | R15C12 |
| R16C1 | R16C2 | R16C3 | R16C4 | R16C5 | R16C6 | R16C7 | R16C8 | R16C9 | R16C10 | R16C11 | R16C12 |
| R17C1 | R17C2 | R17C3 | R17C4 | R17C5 | R17C6 | R17C7 | R17C8 | R17C9 | R17C10 | R17C11 | R17C12 |
| R18C1 | R18C2 | R18C3 | R18C4 | R18C5 | R18C6 | R18C7 | R18C8 | R18C9 | R18C10 | R18C11 | R18C12 |
| R19C1 | R19C2 | R19C3 | R19C4 | R19C5 | R19C6 | R19C7 | R19C8 | R19C9 | R19C10 | R19C11 | R19C12 |
| R20C1 | R20C2 | R20C3 | R20C4 | R20C5 | R20C6 | R20C7 | R20C8 | R20C9 | R20C10 | R20C11 | R20C12 |
import { Component } from '@angular/core';
import { WdsScrollAreaComponent } from '@wds/angular/scroll-area';
@Component({
selector: 'app-scroll-area-both-demo',
imports: [WdsScrollAreaComponent],
template: `
<wds-scroll-area orientation="both" class="h-72 w-full max-w-lg rounded-md border border-border" label="Results">
<table class="border-collapse text-sm">
<thead>
<tr><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 1</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 2</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 3</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 4</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 5</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 6</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 7</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 8</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 9</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 10</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 11</th><th class="border-b border-border px-3 py-2 text-start font-medium whitespace-nowrap">Column 12</th></tr>
</thead>
<tbody>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R1C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R2C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R3C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R4C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R5C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R6C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R7C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R8C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R9C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R10C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R11C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R12C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R13C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R14C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R15C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R16C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R17C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R18C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R19C12</td></tr>
<tr><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C1</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C2</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C3</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C4</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C5</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C6</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C7</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C8</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C9</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C10</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C11</td><td class="border-b border-border px-3 py-2 whitespace-nowrap">R20C12</td></tr>
</tbody>
</table>
</wds-scroll-area>
`,
})
export class ScrollAreaBothDemo {}Fade#
fade fades out the edges behind which there is more content.
Scrolling stays native: the mouse wheel, touch, the keyboard and find in page work as usual.
Only the browser scrollbars are replaced with thin ones drawn over the content.
With fade, the edges behind which there is more content fade out, so it is clear that the list goes on.
The top edge fades only after you scroll down, and the bottom one disappears at the end.
Scrolling stays native: the mouse wheel, touch, the keyboard and find in page work as usual.
Only the browser scrollbars are replaced with thin ones drawn over the content.
With fade, the edges behind which there is more content fade out, so it is clear that the list goes on.
The top edge fades only after you scroll down, and the bottom one disappears at the end.
Scrolling stays native: the mouse wheel, touch, the keyboard and find in page work as usual.
Only the browser scrollbars are replaced with thin ones drawn over the content.
With fade, the edges behind which there is more content fade out, so it is clear that the list goes on.
The top edge fades only after you scroll down, and the bottom one disappears at the end.
import { Component } from '@angular/core';
import { WdsScrollAreaComponent } from '@wds/angular/scroll-area';
@Component({
selector: 'app-scroll-area-fade-demo',
imports: [WdsScrollAreaComponent],
template: `
<wds-scroll-area fade class="h-56 w-full max-w-sm rounded-md border border-border" label="Notes">
<div class="p-4 text-sm">
<p class="m-0 mb-4">Scrolling stays native: the mouse wheel, touch, the keyboard and find in page work as usual.</p>
<p class="m-0 mb-4">Only the browser scrollbars are replaced with thin ones drawn over the content.</p>
<p class="m-0 mb-4">With fade, the edges behind which there is more content fade out, so it is clear that the list goes on.</p>
<p class="m-0 mb-4">The top edge fades only after you scroll down, and the bottom one disappears at the end.</p>
<p class="m-0 mb-4">Scrolling stays native: the mouse wheel, touch, the keyboard and find in page work as usual.</p>
<p class="m-0 mb-4">Only the browser scrollbars are replaced with thin ones drawn over the content.</p>
<p class="m-0 mb-4">With fade, the edges behind which there is more content fade out, so it is clear that the list goes on.</p>
<p class="m-0 mb-4">The top edge fades only after you scroll down, and the bottom one disappears at the end.</p>
<p class="m-0 mb-4">Scrolling stays native: the mouse wheel, touch, the keyboard and find in page work as usual.</p>
<p class="m-0 mb-4">Only the browser scrollbars are replaced with thin ones drawn over the content.</p>
<p class="m-0 mb-4">With fade, the edges behind which there is more content fade out, so it is clear that the list goes on.</p>
<p class="m-0 mb-4">The top edge fades only after you scroll down, and the bottom one disappears at the end.</p>
</div>
</wds-scroll-area>
`,
})
export class ScrollAreaFadeDemo {}Gutter#
gutter (right) reserves space for it, so it never covers text.
import { Component } from '@angular/core';
import { WdsScrollAreaComponent } from '@wds/angular/scroll-area';
@Component({
selector: 'app-scroll-area-gutter-demo',
imports: [WdsScrollAreaComponent],
template: `
<div class="flex flex-wrap justify-center gap-6">
<wds-scroll-area class="h-56 w-64 rounded-md border border-border" label="Invoices">
<div class="px-4 text-sm">
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1040</span><span class="tabular-nums">$20.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1041</span><span class="tabular-nums">$57.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1042</span><span class="tabular-nums">$94.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1043</span><span class="tabular-nums">$131.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1044</span><span class="tabular-nums">$168.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1045</span><span class="tabular-nums">$205.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1046</span><span class="tabular-nums">$242.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1047</span><span class="tabular-nums">$279.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1048</span><span class="tabular-nums">$316.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1049</span><span class="tabular-nums">$353.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1050</span><span class="tabular-nums">$390.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1051</span><span class="tabular-nums">$427.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1052</span><span class="tabular-nums">$464.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1053</span><span class="tabular-nums">$501.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1054</span><span class="tabular-nums">$38.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1055</span><span class="tabular-nums">$75.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1056</span><span class="tabular-nums">$112.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1057</span><span class="tabular-nums">$149.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1058</span><span class="tabular-nums">$186.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1059</span><span class="tabular-nums">$223.00</span></div>
</div>
</wds-scroll-area>
<wds-scroll-area gutter class="h-56 w-64 rounded-md border border-border" label="Invoices with gutter">
<div class="px-4 text-sm">
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1040</span><span class="tabular-nums">$20.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1041</span><span class="tabular-nums">$57.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1042</span><span class="tabular-nums">$94.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1043</span><span class="tabular-nums">$131.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1044</span><span class="tabular-nums">$168.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1045</span><span class="tabular-nums">$205.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1046</span><span class="tabular-nums">$242.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1047</span><span class="tabular-nums">$279.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1048</span><span class="tabular-nums">$316.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1049</span><span class="tabular-nums">$353.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1050</span><span class="tabular-nums">$390.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1051</span><span class="tabular-nums">$427.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1052</span><span class="tabular-nums">$464.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1053</span><span class="tabular-nums">$501.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1054</span><span class="tabular-nums">$38.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1055</span><span class="tabular-nums">$75.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1056</span><span class="tabular-nums">$112.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1057</span><span class="tabular-nums">$149.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1058</span><span class="tabular-nums">$186.00</span></div>
<div class="flex justify-between border-b border-border py-2"><span>Invoice #1059</span><span class="tabular-nums">$223.00</span></div>
</div>
</wds-scroll-area>
</div>
`,
})
export class ScrollAreaGutterDemo {}Scrollbar visibility#
type sets when the scrollbars show: hover (default: pointer over the area or scrolling), scroll (only while scrolling), auto (whenever the content overflows) or always. scroll-hide-delay sets how long they stay after scrolling (default 600 ms).
import { Component } from '@angular/core';
import { WdsScrollAreaComponent } from '@wds/angular/scroll-area';
@Component({
selector: 'app-scroll-area-type-demo',
imports: [WdsScrollAreaComponent],
template: `
<div class="flex flex-wrap justify-center gap-4">
<div class="flex flex-col gap-2">
<span class="text-xs text-muted-foreground">hover</span>
<wds-scroll-area type="hover" class="h-40 w-40 rounded-md border border-border" label="type hover">
<div class="px-3 text-sm">
<div class="border-b border-border py-2">Item 1</div>
<div class="border-b border-border py-2">Item 2</div>
<div class="border-b border-border py-2">Item 3</div>
<div class="border-b border-border py-2">Item 4</div>
<div class="border-b border-border py-2">Item 5</div>
<div class="border-b border-border py-2">Item 6</div>
<div class="border-b border-border py-2">Item 7</div>
<div class="border-b border-border py-2">Item 8</div>
<div class="border-b border-border py-2">Item 9</div>
<div class="border-b border-border py-2">Item 10</div>
<div class="border-b border-border py-2">Item 11</div>
<div class="border-b border-border py-2">Item 12</div>
<div class="border-b border-border py-2">Item 13</div>
<div class="border-b border-border py-2">Item 14</div>
<div class="border-b border-border py-2">Item 15</div>
</div>
</wds-scroll-area>
</div>
<div class="flex flex-col gap-2">
<span class="text-xs text-muted-foreground">scroll</span>
<wds-scroll-area type="scroll" class="h-40 w-40 rounded-md border border-border" label="type scroll">
<div class="px-3 text-sm">
<div class="border-b border-border py-2">Item 1</div>
<div class="border-b border-border py-2">Item 2</div>
<div class="border-b border-border py-2">Item 3</div>
<div class="border-b border-border py-2">Item 4</div>
<div class="border-b border-border py-2">Item 5</div>
<div class="border-b border-border py-2">Item 6</div>
<div class="border-b border-border py-2">Item 7</div>
<div class="border-b border-border py-2">Item 8</div>
<div class="border-b border-border py-2">Item 9</div>
<div class="border-b border-border py-2">Item 10</div>
<div class="border-b border-border py-2">Item 11</div>
<div class="border-b border-border py-2">Item 12</div>
<div class="border-b border-border py-2">Item 13</div>
<div class="border-b border-border py-2">Item 14</div>
<div class="border-b border-border py-2">Item 15</div>
</div>
</wds-scroll-area>
</div>
<div class="flex flex-col gap-2">
<span class="text-xs text-muted-foreground">auto</span>
<wds-scroll-area type="auto" class="h-40 w-40 rounded-md border border-border" label="type auto">
<div class="px-3 text-sm">
<div class="border-b border-border py-2">Item 1</div>
<div class="border-b border-border py-2">Item 2</div>
<div class="border-b border-border py-2">Item 3</div>
<div class="border-b border-border py-2">Item 4</div>
<div class="border-b border-border py-2">Item 5</div>
<div class="border-b border-border py-2">Item 6</div>
<div class="border-b border-border py-2">Item 7</div>
<div class="border-b border-border py-2">Item 8</div>
<div class="border-b border-border py-2">Item 9</div>
<div class="border-b border-border py-2">Item 10</div>
<div class="border-b border-border py-2">Item 11</div>
<div class="border-b border-border py-2">Item 12</div>
<div class="border-b border-border py-2">Item 13</div>
<div class="border-b border-border py-2">Item 14</div>
<div class="border-b border-border py-2">Item 15</div>
</div>
</wds-scroll-area>
</div>
<div class="flex flex-col gap-2">
<span class="text-xs text-muted-foreground">always</span>
<wds-scroll-area type="always" class="h-40 w-40 rounded-md border border-border" label="type always">
<div class="px-3 text-sm">
<div class="border-b border-border py-2">Item 1</div>
<div class="border-b border-border py-2">Item 2</div>
<div class="border-b border-border py-2">Item 3</div>
<div class="border-b border-border py-2">Item 4</div>
<div class="border-b border-border py-2">Item 5</div>
<div class="border-b border-border py-2">Item 6</div>
<div class="border-b border-border py-2">Item 7</div>
<div class="border-b border-border py-2">Item 8</div>
<div class="border-b border-border py-2">Item 9</div>
<div class="border-b border-border py-2">Item 10</div>
<div class="border-b border-border py-2">Item 11</div>
<div class="border-b border-border py-2">Item 12</div>
<div class="border-b border-border py-2">Item 13</div>
<div class="border-b border-border py-2">Item 14</div>
<div class="border-b border-border py-2">Item 15</div>
</div>
</wds-scroll-area>
</div>
</div>
`,
})
export class ScrollAreaTypeDemo {}API References#
wds-scroll-area#
label when it is a distinct region of the page.
Attributes
| Attribute | Type | Default | Description |
|---|---|---|---|
| orientation | WdsScrollAreaOrientation | 'vertical' | vertical, horizontal or both. |
| type | WdsScrollAreaType | 'hover' | hover (pointer over the area, or scrolling), scroll (only while scrolling),
auto (whenever the content overflows) or always (also without overflow, as an empty track). |
| scroll-hide-delay.scrollHideDelay | number | 600 | hover and scroll). |
| fade | boolean | false | |
| gutter | boolean | false | |
| label | string | undefined | region landmark. |
Slots
| Slot | Description |
|---|---|
| (default) |
CSS parts (::part)
| Part | Description |
|---|---|
| viewport | |
| scrollbar | |
| thumb |
CSS custom properties
| Property | Description |
|---|---|
| --wds-scroll-area-scrollbar-size | |
| --wds-scroll-area-thumb | --wds-border). |
Accessibility#
Screen reader#
label the area is a region landmark with that name. Leave it out for small lists inside other components.
Keyboard support#
| Key | Function |
|---|---|