Skip to content

Commit cc7f102

Browse files
committed
refactor: update popover component structure and styles for consistency
1 parent 8f7d04f commit cc7f102

File tree

6 files changed

+24
-46
lines changed

6 files changed

+24
-46
lines changed

packages/components/src/components/@shared/_popover.mixin.scss

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,22 @@
1010
}
1111

1212
.kol-popover {
13+
opacity: 0;
14+
background-color: transparent;
1315
position: absolute;
14-
height: 0;
16+
min-width: max-content;
17+
min-height: max-content;
18+
margin: 0; // popover tags get a default margin from the browser, which interferes with our alignment
19+
padding: 0;
20+
overflow: unset;
21+
border: none;
1522

16-
&__content {
17-
opacity: 0;
18-
background-color: transparent;
19-
position: absolute;
20-
min-width: max-content;
21-
min-height: max-content;
22-
margin: 0; // popover tags get a default margin from the browser, which interferes with our alignment
23-
padding: 0;
24-
overflow: unset;
25-
border: none;
26-
27-
&--visible {
28-
animation: 0.3s ease-in forwards fadeInOpacity;
29-
}
23+
&--visible {
24+
animation: 0.3s ease-in forwards fadeInOpacity;
25+
}
3026

31-
&--disappear {
32-
animation: 0.3s ease-in backwards fadeInOpacity;
33-
}
27+
&--disappear {
28+
animation: 0.3s ease-in backwards fadeInOpacity;
3429
}
3530

3631
&__arrow {

packages/components/src/components/popover-button/component.tsx

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -247,31 +247,16 @@ export class KolPopoverButton implements PopoverButtonProps {
247247
}
248248

249249
public componentDidRender() {
250-
// Find and setup the popover element
251250
if (!this.popoverElement) {
252-
// The button might be a web component, so we need to find the actual DOM element
253251
const buttonElement = this.refButton as HTMLElement;
254-
255-
// Look for the next sibling that is the popover wrapper
256252
let sibling = buttonElement?.nextElementSibling;
257253
while (sibling && !sibling.classList.contains('kol-popover')) {
258254
sibling = sibling.nextElementSibling;
259255
}
260-
261256
if (sibling) {
262-
const popoverWrapper = sibling as HTMLElement;
263-
264-
// Find the content element
265-
this.popoverElement = popoverWrapper.querySelector('.kol-popover__content') as HTMLDivElement;
266-
267-
if (this.popoverElement) {
268-
this.popoverElement.addEventListener('toggle', this.handleToggle);
269-
270-
// Now set the wrapper as host - button should be previousElementSibling
271-
this.popoverCtrl.setHostElement(popoverWrapper);
272-
}
273-
} else {
274-
console.log('❌ kol-popover not found!');
257+
this.popoverElement = sibling as HTMLDivElement;
258+
this.popoverElement.addEventListener('toggle', this.handleToggle);
259+
this.popoverCtrl.setHostElement(this.popoverElement);
275260
}
276261
}
277262
}

packages/components/src/components/split-button/split-button.e2e.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ test.describe('kol-split-button', () => {
77
const splitButton = page.locator('kol-split-button ');
88

99
const secondaryButton = splitButton.locator('.kol-split-button__secondary-button');
10-
const popover = splitButton.locator('.kol-popover__content');
10+
const popover = splitButton.locator('.kol-popover');
1111

1212
await expect(popover).not.toBeVisible();
1313
await secondaryButton.click();

packages/components/src/internal/functional-components/popover/component.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ export const PopoverFC: FC<PopoverFCProps> = (props) => {
1616
const { align = 'top', popoverRef, arrowRef, class: classNames } = props;
1717

1818
return (
19-
<div class={clsx('kol-popover', classNames)}>
20-
<div class="kol-popover__content" ref={popoverRef} popover="auto">
21-
<div class={clsx('kol-popover__arrow', `kol-popover__arrow--${align}`)} ref={arrowRef} />
22-
<slot />
23-
</div>
19+
<div class={clsx('kol-popover', classNames)} ref={popoverRef} popover="auto">
20+
<div class={clsx('kol-popover__arrow', `kol-popover__arrow--${align}`)} ref={arrowRef} />
21+
<slot />
2422
</div>
2523
);
2624
};

packages/components/src/internal/functional-components/popover/controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export class PopoverController {
7575
const toggleEvent = event as ToggleEvent;
7676
const isOpen = toggleEvent.newState === 'open';
7777

78-
this.popoverElement?.classList.toggle('kol-popover__content--visible', isOpen);
78+
this.popoverElement?.classList.toggle('kol-popover--visible', isOpen);
7979

8080
if (isOpen) {
8181
this.cleanupAutoUpdate?.();

packages/components/src/internal/functional-components/popover/popover.e2e.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ test.describe('kol-popover', () => {
55
test('should display popover when opened and hide when closed', async ({ page }) => {
66
await page.setContent(`<kol-split-button _label="Toggle">Popover content</kol-split-button>`);
77
const splitButton = page.locator('kol-split-button');
8-
const popoverElement = splitButton.locator('.kol-popover__content');
8+
const popoverElement = splitButton.locator('.kol-popover');
99

1010
await expect(popoverElement).not.toBeVisible();
1111
await splitButton.locator('.kol-split-button__secondary-button').click();
@@ -21,10 +21,10 @@ test.describe('kol-popover', () => {
2121
const splitButton = page.locator('kol-split-button');
2222

2323
await splitButton.locator('.kol-split-button__secondary-button').click();
24-
await expect(splitButton.locator('.kol-popover__content')).toBeVisible();
24+
await expect(splitButton.locator('.kol-popover')).toBeVisible();
2525

2626
await page.keyboard.press('Escape');
27-
await expect(splitButton.locator('.kol-popover__content')).not.toBeVisible();
27+
await expect(splitButton.locator('.kol-popover')).not.toBeVisible();
2828
});
2929
});
3030

0 commit comments

Comments
 (0)