Skip to content

Commit 5818804

Browse files
JesmoDeviOvergaard
andcommitted
fix(uui-tab-group): layout is causing issues due to missing display: flex (#730)
* add flex layout story * use mainElement for width * update stories * fix stories * make tab group flex * fix height * fix: add missing imports in test file --------- Co-authored-by: Jacob Overgaard <[email protected]>
1 parent b06aebb commit 5818804

File tree

3 files changed

+62
-19
lines changed

3 files changed

+62
-19
lines changed

packages/uui-tabs/lib/uui-tab-group.element.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export class UUITabGroupElement extends LitElement {
2525
@query('#popover-container')
2626
private _popoverContainerElement!: UUIPopoverContainerElement;
2727

28+
@query('#main') private _mainElement!: HTMLElement;
29+
2830
@queryAssignedElements({
2931
flatten: true,
3032
selector: 'uui-tab, [uui-tab], [role=tab]',
@@ -61,19 +63,24 @@ export class UUITabGroupElement extends LitElement {
6163

6264
connectedCallback() {
6365
super.connectedCallback();
66+
this.#initialize();
67+
}
6468

69+
disconnectedCallback() {
70+
super.disconnectedCallback();
71+
this.#resizeObserver.unobserve(this);
72+
this.#cleanupTabs();
73+
}
74+
75+
async #initialize() {
6576
demandCustomElement(this, 'uui-button');
6677
demandCustomElement(this, 'uui-popover-container');
6778
demandCustomElement(this, 'uui-symbol-more');
6879

69-
this.#resizeObserver.observe(this);
7080
if (!this.hasAttribute('role')) this.setAttribute('role', 'tablist');
71-
}
7281

73-
disconnectedCallback() {
74-
super.disconnectedCallback();
75-
this.#resizeObserver.unobserve(this);
76-
this.#cleanupTabs();
82+
await this.updateComplete;
83+
this.#resizeObserver.observe(this._mainElement);
7784
}
7885

7986
#onResize(entries: ResizeObserverEntry[]) {
@@ -174,9 +181,9 @@ export class UUITabGroupElement extends LitElement {
174181
}
175182

176183
const tolerance = 2;
177-
this.style.maxWidth = childrenWidth - gap + tolerance + 'px';
184+
this._mainElement.style.width = childrenWidth - gap + tolerance + 'px';
178185

179-
this.#updateCollapsibleTabs(this.offsetWidth);
186+
this.#updateCollapsibleTabs(this._mainElement.offsetWidth);
180187
}
181188

182189
#setTabArray() {
@@ -286,12 +293,15 @@ export class UUITabGroupElement extends LitElement {
286293
static styles = [
287294
css`
288295
:host {
289-
width: 100%;
296+
min-width: 0;
297+
display: flex;
298+
height: 100%;
290299
}
291300
292301
#main {
293302
display: flex;
294303
justify-content: space-between;
304+
overflow: hidden;
295305
}
296306
297307
#grid {

packages/uui-tabs/lib/uui-tabs.story.ts

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export const WithBorders: Story = () => html`
6868
display: flex;
6969
--uui-tab-divider: var(--uui-color-divider-standalone);
7070
">
71-
<uui-tab-group style="display: flex;">
71+
<uui-tab-group>
7272
<uui-tab label="content"> Content </uui-tab>
7373
<uui-tab label="Packages"> Packages </uui-tab>
7474
<uui-tab label="Media" active> Media </uui-tab>
@@ -87,7 +87,7 @@ export const Navbar: Story = () => html`
8787
height: 60px;
8888
font-size: var(--uui-type-default-size);
8989
">
90-
<uui-tab-group style="display: flex;">
90+
<uui-tab-group>
9191
<uui-tab label="content"> Content </uui-tab>
9292
<uui-tab label="Packages" active> Packages </uui-tab>
9393
<uui-tab label="Media"> Media </uui-tab>
@@ -291,17 +291,49 @@ Async.parameters = {
291291
},
292292
};
293293

294+
export const FlexLayout: Story = props => html`
295+
<uui-icon-registry-essential>
296+
<div style="display: flex;">
297+
<uui-input style="min-width: 200px; flex-grow: 1"></uui-input>
298+
<uui-tab-group
299+
dropdown-direction="horizontal"
300+
style="
301+
${props.inlineStyles}">
302+
<uui-tab label="content">Content</uui-tab>
303+
<uui-tab active label="packages">Packages</uui-tab>
304+
<uui-tab label="media">Media</uui-tab>
305+
<uui-tab label="settings">Settings</uui-tab>
306+
<uui-tab label="translations">Translations</uui-tab>
307+
</uui-tab-group>
308+
</div>
309+
</uui-icon-registry-essential>
310+
`;
311+
FlexLayout.parameters = {
312+
docs: {
313+
source: {
314+
code: `
315+
<div style="display: flex">
316+
<uui-tab-group style="margin: auto">
317+
<uui-tab label="content">Content</uui-tab>
318+
<uui-tab active label="packages">Packages</uui-tab>
319+
<uui-tab label="media">Media</uui-tab>
320+
<uui-tab label="settings">Settings</uui-tab>
321+
<uui-tab label="translations">Translations</uui-tab>
322+
</uui-tab-group>
323+
</div>
324+
`,
325+
},
326+
},
327+
};
328+
294329
export const CenterAlign: Story = props => html`
295330
<h3>Tabs implemented into Flex-box scenario</h3>
296331
<p>Here the tab group is center aligned in a flex-box container.</p>
297332
<uui-icon-registry-essential>
298-
<div style="display: flex;">
333+
<div style="display: flex; justify-content: center">
299334
<uui-tab-group
300335
dropdown-direction="horizontal"
301-
style="
302-
margin: auto;
303-
--uui-tab-group-gap: 25px;
304-
font-size: var(--uui-type-small-size);
336+
style="--uui-tab-group-gap: 25px;
305337
${props.inlineStyles}">
306338
<uui-tab label="content">Content</uui-tab>
307339
<uui-tab active label="packages">Packages</uui-tab>
@@ -334,13 +366,11 @@ export const RightAlign: Story = props => html`
334366
<h3>Tabs implemented into Flex-box scenario</h3>
335367
<p>Here the tab group is right aligned in a flex-box container.</p>
336368
<uui-icon-registry-essential>
337-
<div style="display: flex;">
369+
<div style="display: flex; justify-content: right">
338370
<uui-tab-group
339371
dropdown-direction="horizontal"
340372
style="
341-
margin-left: auto;
342373
--uui-tab-group-gap: 25px;
343-
font-size: var(--uui-type-small-size);
344374
${props.inlineStyles}">
345375
<uui-tab label="content">Content</uui-tab>
346376
<uui-tab active label="packages">Packages</uui-tab>

packages/uui-tabs/lib/uui-tabs.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { expect, fixture, html, oneEvent } from '@open-wc/testing';
33
import { UUITabGroupElement } from './uui-tab-group.element';
44
import { UUITabElement } from './uui-tab.element';
55

6+
import '@umbraco-ui/uui-button/lib';
7+
import '@umbraco-ui/uui-popover-container/lib';
8+
69
describe('UuiTab', () => {
710
let element: UUITabGroupElement;
811
let tabs: UUITabElement[];

0 commit comments

Comments
 (0)