Skip to content

Commit c18d5c4

Browse files
Feat: Implement use of popover container (Popover-api) (#674)
Co-authored-by: Niels Lyngsø <[email protected]>
1 parent 9708ccb commit c18d5c4

File tree

15 files changed

+136
-215
lines changed

15 files changed

+136
-215
lines changed

.vscode/settings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"deselectable",
66
"noopener",
77
"noreferrer",
8+
"svgs",
89
"Umbraco"
910
],
1011
"npm.enableRunFromFolder": true

package-lock.json

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/uui-button-group/lib/uui-button-group.element.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,6 @@ export class UUIButtonGroupElement extends LitElement {
4040
var(--uui-border-radius) 0;
4141
}
4242
43-
::slotted(uui-popover) {
44-
width: unset;
45-
--uui-popover-toggle-slot-button-border-radius: 0;
46-
}
47-
::slotted(uui-popover:not(:first-child)) {
48-
--uui-popover-toggle-slot-button-merge-border-left: 1;
49-
}
50-
::slotted(uui-popover:first-child) {
51-
--uui-popover-toggle-slot-button-border-radius: var(--uui-border-radius)
52-
0 0 var(--uui-border-radius);
53-
}
54-
::slotted(uui-popover:last-child) {
55-
--uui-popover-toggle-slot-button-border-radius: 0
56-
var(--uui-border-radius) var(--uui-border-radius) 0;
57-
}
58-
5943
::slotted(*:hover) {
6044
z-index: 1;
6145
}

packages/uui-button-group/lib/uui-button-group.story.ts

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -122,52 +122,3 @@ export const LooksAndColors = () => html`
122122
`
123123
)}
124124
`;
125-
126-
// //* DO NOT DELETE START! they will work when dropdown component will come to this branch
127-
export const WithDropdown = () => {
128-
const handleClick = (e: MouseEvent) => {
129-
//@ts-ignore
130-
e.target.parentNode.open = !e.target.parentNode.open;
131-
};
132-
133-
return html`
134-
<uui-button-group>
135-
<uui-popover placement="bottom-start" id="settings-popover" margin="14">
136-
<uui-button
137-
slot="trigger"
138-
look="outline"
139-
label="Open dropdown"
140-
id="myPopoverBtn"
141-
@click=${handleClick}>
142-
Open dropdown 1
143-
</uui-button>
144-
<div slot="popover">My Content appearing inside popover box.</div>
145-
</uui-popover>
146-
<uui-button label="Button 1" look="outline"></uui-button>
147-
<uui-button label="Button 2" look="outline"></uui-button>
148-
<uui-popover placement="bottom-start" id="settings-popover" margin="14">
149-
<uui-button
150-
slot="trigger"
151-
look="outline"
152-
label="Open dropdown"
153-
id="myPopoverBtn"
154-
@click=${handleClick}>
155-
Open dropdown 2
156-
</uui-button>
157-
<div slot="popover">My Content appearing inside popover box.</div>
158-
</uui-popover>
159-
<uui-button label="Button 4" look="outline"></uui-button>
160-
<uui-popover placement="bottom-start" id="settings-popover" margin="14">
161-
<uui-button
162-
slot="trigger"
163-
look="outline"
164-
label="Open dropdown"
165-
id="myPopoverBtn"
166-
@click=${handleClick}>
167-
Open dropdown 3
168-
</uui-button>
169-
<div slot="popover">My Content appearing inside popover box.</div>
170-
</uui-popover>
171-
</uui-button-group>
172-
`;
173-
};

packages/uui-color-picker/lib/uui-color-picker.element.ts

Lines changed: 15 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,24 @@ import { clamp, demandCustomElement } from '@umbraco-ui/uui-base/lib/utils';
1313

1414
import { styleMap } from 'lit/directives/style-map.js';
1515

16-
import {
16+
import type {
1717
UUIColorAreaElement,
1818
UUIColorAreaEvent,
1919
} from '@umbraco-ui/uui-color-area/lib';
2020

21-
import {
21+
import type {
2222
UUIColorSliderElement,
2323
UUIColorSliderEvent,
2424
} from '@umbraco-ui/uui-color-slider/lib';
2525

26-
import {
26+
import type {
2727
UUIColorSwatchesElement,
2828
UUIColorSwatchesEvent,
2929
} from '@umbraco-ui/uui-color-swatches/lib';
3030

31-
import { UUIColorSwatchElement } from '@umbraco-ui/uui-color-swatch/lib';
31+
import type { UUIColorSwatchElement } from '@umbraco-ui/uui-color-swatch/lib';
3232

33-
import { UUIPopoverElement } from '@umbraco-ui/uui-popover/lib';
34-
35-
import { UUIInputElement } from '@umbraco-ui/uui-input/lib';
33+
import type { UUIInputElement } from '@umbraco-ui/uui-input/lib';
3634
import { UUIColorPickerChangeEvent } from './UUIColorPickerEvent';
3735
import { LabelMixin } from '@umbraco-ui/uui-base/lib/mixins';
3836

@@ -189,11 +187,11 @@ export class UUIColorPickerElement extends LabelMixin('label', LitElement) {
189187
demandCustomElement(this, 'uui-input');
190188
demandCustomElement(this, 'uui-button');
191189
demandCustomElement(this, 'uui-button-group');
192-
demandCustomElement(this, 'uui-popover');
193190
demandCustomElement(this, 'uui-color-swatches');
194191
demandCustomElement(this, 'uui-color-swatch');
195192
demandCustomElement(this, 'uui-color-area');
196193
demandCustomElement(this, 'uui-color-slider');
194+
demandCustomElement(this, 'uui-popover-container');
197195
}
198196

199197
/** Returns the current value as a string in the specified format. */
@@ -346,26 +344,6 @@ export class UUIColorPickerElement extends LabelMixin('label', LitElement) {
346344
});
347345
}
348346

349-
openColorPicker(event: Event) {
350-
event.stopImmediatePropagation();
351-
352-
const target = event.target as HTMLElement;
353-
const popover = target.parentElement as UUIPopoverElement;
354-
355-
popover.open = !popover?.open;
356-
357-
target.setAttribute('aria-expanded', popover.open.toString());
358-
}
359-
360-
closeColorPicker(event: Event) {
361-
const target = event.target as UUIPopoverElement;
362-
const trigger = target.querySelector('button[part=trigger]');
363-
364-
if (trigger) {
365-
trigger.setAttribute('aria-expanded', 'false');
366-
}
367-
}
368-
369347
handleEyeDropper() {
370348
if (!hasEyeDropper) {
371349
return;
@@ -520,13 +498,9 @@ export class UUIColorPickerElement extends LabelMixin('label', LitElement) {
520498
}
521499

522500
private _renderPreviewButton() {
523-
return html`<uui-popover
524-
placement="bottom-start"
525-
@close=${this.closeColorPicker}>
526-
<button
501+
return html` <button
527502
type="button"
528503
part="trigger"
529-
slot="trigger"
530504
aria-label="${this.label || 'Open Color picker'}"
531505
class=${classMap({
532506
'color-picker__trigger': true,
@@ -542,11 +516,12 @@ export class UUIColorPickerElement extends LabelMixin('label', LitElement) {
542516
}%, ${this.alpha / 100})`,
543517
})}
544518
?disabled=${this.disabled}
545-
@click=${this.openColorPicker}
546519
aria-haspopup="true"
547-
aria-expanded="false"></button>
548-
<div slot="popover">${this._renderColorPicker()}</div>
549-
</uui-popover>`;
520+
aria-expanded="false"
521+
popovertarget="color-picker-popover"></button>
522+
<uui-popover-container id="color-picker-popover">
523+
${this._renderColorPicker()}
524+
</uui-popover-container>`;
550525
}
551526

552527
render() {
@@ -564,6 +539,9 @@ export class UUIColorPickerElement extends LabelMixin('label', LitElement) {
564539
display: block;
565540
width: var(--uui-color-picker-width, 280px);
566541
}
542+
uui-popover-container {
543+
width: inherit;
544+
}
567545
.color-picker {
568546
width: 100%;
569547
background-color: #fff;
@@ -681,12 +659,6 @@ export class UUIColorPickerElement extends LabelMixin('label', LitElement) {
681659
height: 36px;
682660
}
683661
684-
uui-popover {
685-
display: block;
686-
width: 100%;
687-
margin: 5px 0;
688-
}
689-
690662
uui-input {
691663
/* lower the font size to avoid overflow with hlsa format */
692664
font-size: 0.85rem;

packages/uui-color-picker/lib/uui-color-picker.story.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import '@umbraco-ui/uui-color-swatches/lib';
2-
import '@umbraco-ui/uui-color-swatch/lib';
3-
import '@umbraco-ui/uui-color-slider/lib';
4-
import '@umbraco-ui/uui-color-area/lib';
5-
import '@umbraco-ui/uui-input/lib';
6-
import '@umbraco-ui/uui-button/lib';
71
import '@umbraco-ui/uui-button-group/lib';
2+
import '@umbraco-ui/uui-button/lib';
3+
import '@umbraco-ui/uui-color-area/lib';
4+
import '@umbraco-ui/uui-color-slider/lib';
5+
import '@umbraco-ui/uui-color-swatch/lib';
6+
import '@umbraco-ui/uui-color-swatches/lib';
87
import '@umbraco-ui/uui-icon/lib';
9-
import '@umbraco-ui/uui-popover/lib';
8+
import '@umbraco-ui/uui-input/lib';
9+
import '@umbraco-ui/uui-popover-container/lib';
1010

1111
import type { Meta, StoryObj } from '@storybook/web-components';
1212
import { withActions } from '@storybook/addon-actions/decorator';

packages/uui-color-picker/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
],
3232
"dependencies": {
3333
"@umbraco-ui/uui-base": "1.6.0-rc.1",
34+
"@umbraco-ui/uui-popover-container": "1.6.0-rc.1",
3435
"colord": "^2.9.3"
3536
},
3637
"scripts": {

packages/uui-color-picker/tsconfig.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"references": [
1313
{
1414
"path": "../uui-base"
15+
},
16+
{
17+
"path": "../uui-popover-container"
1518
}
1619
]
1720
}

0 commit comments

Comments
 (0)