Skip to content

Commit 44ce789

Browse files
authored
feat: uui-scroll-container now uses auto scroll and has an enforce scroll option (#448)
1 parent b3217b0 commit 44ce789

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

packages/uui-scroll-container/lib/uui-scroll-container.element.ts

+14
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { defineElement } from '@umbraco-ui/uui-base/lib/registration';
22
import { css, html, LitElement } from 'lit';
3+
import { property } from 'lit/decorators.js';
34

45
/**
56
* @element uui-scroll-container
67
* @slot - for content
8+
* @attribute enforce-scroll - forces the scrollbar to appear
79
* @description - Component for displaying a larger amount of .
10+
*
811
*/
912
@defineElement('uui-scroll-container')
1013
export class UUIScrollContainerElement extends LitElement {
@@ -15,6 +18,10 @@ export class UUIScrollContainerElement extends LitElement {
1518
scrollbar-width: thin;
1619
scrollbar-color: var(--uui-color-disabled-contrast)
1720
var(--uui-color-surface);
21+
overflow-y: auto;
22+
}
23+
24+
:host([enforce-scroll]) {
1825
overflow-y: scroll;
1926
}
2027
@@ -34,6 +41,13 @@ export class UUIScrollContainerElement extends LitElement {
3441
`,
3542
];
3643

44+
/**
45+
* @type {boolean}
46+
* @attr forces the scrollbar to appear
47+
*/
48+
@property({ type: Boolean, reflect: true, attribute: 'enforce-scroll' })
49+
enforceScroll = false;
50+
3751
connectedCallback() {
3852
super.connectedCallback();
3953
if (!this.hasAttribute('tabindex')) {

packages/uui-scroll-container/lib/uui-scroll-container.story.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export const NotEnoughContent: Story = props =>
146146
`;
147147

148148
NotEnoughContent.args = {
149-
slot: 'Very little text, no Scrollbar appearing',
149+
slot: 'Very little text, no scrollbar appearing',
150150
};
151151

152152
export const VeryWideContent: Story = props =>
@@ -160,3 +160,14 @@ VeryWideContent.args = {
160160
slot: html` line is way toooo long
161161
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY<br />`,
162162
};
163+
164+
export const EnforceScroll: Story = props =>
165+
html`
166+
<uui-scroll-container style="width:400px; height:400px;" enforce-scroll>
167+
${props.slot}
168+
</uui-scroll-container>
169+
`;
170+
171+
EnforceScroll.args = {
172+
slot: 'Very little text, but has the enforce-scroll property\n(See with a dark background)',
173+
};

packages/uui-scroll-container/lib/uui-scroll-container.test.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { html, fixture, expect } from '@open-wc/testing';
1+
import { html, fixture, expect, elementUpdated } from '@open-wc/testing';
22
import { UUIScrollContainerElement } from './uui-scroll-container.element';
33
import '.';
44

@@ -115,3 +115,23 @@ describe('UUIScrollContainerElement with very little content', () => {
115115
await expect(element.scrollLeft).to.be.equal(0);
116116
});
117117
});
118+
119+
describe('properties', () => {
120+
let element: UUIScrollContainerElement;
121+
beforeEach(async () => {
122+
element = await fixture(
123+
html`<uui-scroll-container style="width:200px; height:200px;">
124+
Hello tests
125+
</uui-scroll-container>`
126+
);
127+
});
128+
129+
it('has a enforce-scroll property', () => {
130+
expect(element).to.have.property('enforceScroll');
131+
});
132+
it('enforceScroll property set', async () => {
133+
element.enforceScroll = true;
134+
await elementUpdated(element);
135+
expect(element.enforceScroll).to.be.true;
136+
});
137+
});

0 commit comments

Comments
 (0)