@krumio/trailhand-ui 1.11.1 → 1.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement, TemplateResult } from 'lit';
|
|
1
|
+
import { LitElement, TemplateResult, PropertyValues } from 'lit';
|
|
2
2
|
import '../icon/icon';
|
|
3
3
|
export type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
4
4
|
export interface PopoverProps {
|
|
@@ -7,6 +7,7 @@ export interface PopoverProps {
|
|
|
7
7
|
placement: PopoverPlacement;
|
|
8
8
|
title: string;
|
|
9
9
|
subtitle: string;
|
|
10
|
+
escapeBoundary: boolean;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* A popover component that appears on click of a trigger element.
|
|
@@ -25,7 +26,10 @@ export declare class Popover extends LitElement {
|
|
|
25
26
|
placement: PopoverPlacement;
|
|
26
27
|
title: string;
|
|
27
28
|
subtitle: string;
|
|
29
|
+
escapeBoundary: boolean;
|
|
28
30
|
private _hasHeadingSlot;
|
|
31
|
+
private _clampOffsetX;
|
|
32
|
+
private _clampOffsetY;
|
|
29
33
|
private _boundHandleClickOutside;
|
|
30
34
|
static styles: import("lit").CSSResult;
|
|
31
35
|
constructor();
|
|
@@ -34,6 +38,9 @@ export declare class Popover extends LitElement {
|
|
|
34
38
|
private _handleClickOutside;
|
|
35
39
|
private _handleTriggerClick;
|
|
36
40
|
private _open;
|
|
41
|
+
private _computeFixedPosition;
|
|
42
|
+
updated(changed: PropertyValues<this>): void;
|
|
43
|
+
private _clampToViewport;
|
|
37
44
|
private _close;
|
|
38
45
|
private _handleHeadingSlotChange;
|
|
39
46
|
private _renderHeader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../src/components/popover/popover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,cAAc,EAAW,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../src/components/popover/popover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,cAAc,EAAW,cAAc,EAAE,MAAM,KAAK,CAAC;AAGrF,OAAO,cAAc,CAAC;AAEtB,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IAErC,IAAI,UAAS;IAEb;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,SAAS,EAAE,gBAAgB,CAAY;IAGvC,KAAK,SAAM;IAGX,QAAQ,SAAM;IAKd,cAAc,UAAS;IAEd,OAAO,CAAC,eAAe,CAAS;IAIhC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAEnC,OAAO,CAAC,wBAAwB,CAAqB;IAErD,OAAgB,MAAM,0BAuHpB;;IAOO,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAKrC,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,qBAAqB;IA0CpB,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAkBrD,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,aAAa;IAkBZ,MAAM,IAAI,cAAc;CAuClC"}
|
|
@@ -6,6 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { LitElement, html, css, nothing } from 'lit';
|
|
8
8
|
import { property, state } from 'lit/decorators.js';
|
|
9
|
+
import { styleMap } from 'lit/directives/style-map.js';
|
|
9
10
|
import '../icon/icon';
|
|
10
11
|
/**
|
|
11
12
|
* A popover component that appears on click of a trigger element.
|
|
@@ -26,7 +27,14 @@ export class Popover extends LitElement {
|
|
|
26
27
|
this.placement = 'bottom';
|
|
27
28
|
this.title = '';
|
|
28
29
|
this.subtitle = '';
|
|
30
|
+
// When true, the popover is positioned via `position: fixed` computed from the trigger,
|
|
31
|
+
// so it escapes a clipping ancestor (overflow: hidden/auto) instead of being cut off by it.
|
|
32
|
+
this.escapeBoundary = false;
|
|
29
33
|
this._hasHeadingSlot = false;
|
|
34
|
+
// These offsets are computed in `_clampToViewport()` and applied via CSS custom properties to
|
|
35
|
+
// the placement transforms, so the popover can be re-centered against the viewport instead of just the trigger.
|
|
36
|
+
this._clampOffsetX = 0;
|
|
37
|
+
this._clampOffsetY = 0;
|
|
30
38
|
this._boundHandleClickOutside = this._handleClickOutside.bind(this);
|
|
31
39
|
}
|
|
32
40
|
connectedCallback() {
|
|
@@ -58,6 +66,97 @@ export class Popover extends LitElement {
|
|
|
58
66
|
this.open = true;
|
|
59
67
|
this.dispatchEvent(new CustomEvent('popover-open', { bubbles: true, composed: true }));
|
|
60
68
|
}
|
|
69
|
+
_computeFixedPosition() {
|
|
70
|
+
const gap = 8;
|
|
71
|
+
const rect = this.getBoundingClientRect();
|
|
72
|
+
let style;
|
|
73
|
+
switch (this.placement) {
|
|
74
|
+
case 'top':
|
|
75
|
+
style = {
|
|
76
|
+
position: 'fixed',
|
|
77
|
+
left: `${rect.left + rect.width / 2}px`,
|
|
78
|
+
bottom: `${window.innerHeight - rect.top + gap}px`,
|
|
79
|
+
transform: `translateX(-50%) translateX(${this._clampOffsetX}px)`,
|
|
80
|
+
};
|
|
81
|
+
break;
|
|
82
|
+
case 'left':
|
|
83
|
+
style = {
|
|
84
|
+
position: 'fixed',
|
|
85
|
+
top: `${rect.top + rect.height / 2}px`,
|
|
86
|
+
right: `${window.innerWidth - rect.left + gap}px`,
|
|
87
|
+
transform: `translateY(-50%) translateY(${this._clampOffsetY}px)`,
|
|
88
|
+
};
|
|
89
|
+
break;
|
|
90
|
+
case 'right':
|
|
91
|
+
style = {
|
|
92
|
+
position: 'fixed',
|
|
93
|
+
top: `${rect.top + rect.height / 2}px`,
|
|
94
|
+
left: `${rect.right + gap}px`,
|
|
95
|
+
transform: `translateY(-50%) translateY(${this._clampOffsetY}px)`,
|
|
96
|
+
};
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
style = {
|
|
100
|
+
position: 'fixed',
|
|
101
|
+
left: `${rect.left + rect.width / 2}px`,
|
|
102
|
+
top: `${rect.bottom + gap}px`,
|
|
103
|
+
transform: `translateX(-50%) translateX(${this._clampOffsetX}px)`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return style;
|
|
107
|
+
}
|
|
108
|
+
updated(changed) {
|
|
109
|
+
super.updated(changed);
|
|
110
|
+
if (this.open) {
|
|
111
|
+
// Content isn't visible (opacity/visibility) while closed, but it's still laid
|
|
112
|
+
// out in the DOM, so its rect is measurable as soon as it's open. Runs in every
|
|
113
|
+
// positioning mode, not just escape-boundary.
|
|
114
|
+
this._clampToViewport();
|
|
115
|
+
}
|
|
116
|
+
else if (changed.has('open')) {
|
|
117
|
+
// Reset so a stale offset from this position doesn't leak into the next open,
|
|
118
|
+
// e.g. after the trigger (or the viewport) has moved.
|
|
119
|
+
this._clampOffsetX = 0;
|
|
120
|
+
this._clampOffsetY = 0;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Re-centers the popover's placement against the viewport instead of just the
|
|
124
|
+
// trigger, so a trigger near a screen edge doesn't push the popover off it.
|
|
125
|
+
_clampToViewport() {
|
|
126
|
+
const content = this.shadowRoot?.querySelector('.popover-content');
|
|
127
|
+
if (!content) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const margin = 8;
|
|
131
|
+
const hostRect = this.getBoundingClientRect();
|
|
132
|
+
const contentRect = content.getBoundingClientRect();
|
|
133
|
+
if (this.placement === 'left' || this.placement === 'right') {
|
|
134
|
+
const naturalTop = hostRect.top + hostRect.height / 2 - contentRect.height / 2;
|
|
135
|
+
let offsetY = 0;
|
|
136
|
+
if (naturalTop < margin) {
|
|
137
|
+
offsetY = margin - naturalTop;
|
|
138
|
+
}
|
|
139
|
+
else if (naturalTop + contentRect.height > window.innerHeight - margin) {
|
|
140
|
+
offsetY = (window.innerHeight - margin) - (naturalTop + contentRect.height);
|
|
141
|
+
}
|
|
142
|
+
if (offsetY !== this._clampOffsetY) {
|
|
143
|
+
this._clampOffsetY = offsetY;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const naturalLeft = hostRect.left + hostRect.width / 2 - contentRect.width / 2;
|
|
148
|
+
let offsetX = 0;
|
|
149
|
+
if (naturalLeft < margin) {
|
|
150
|
+
offsetX = margin - naturalLeft;
|
|
151
|
+
}
|
|
152
|
+
else if (naturalLeft + contentRect.width > window.innerWidth - margin) {
|
|
153
|
+
offsetX = (window.innerWidth - margin) - (naturalLeft + contentRect.width);
|
|
154
|
+
}
|
|
155
|
+
if (offsetX !== this._clampOffsetX) {
|
|
156
|
+
this._clampOffsetX = offsetX;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
61
160
|
_close() {
|
|
62
161
|
this.open = false;
|
|
63
162
|
this.dispatchEvent(new CustomEvent('popover-close', { bubbles: true, composed: true }));
|
|
@@ -84,6 +183,19 @@ export class Popover extends LitElement {
|
|
|
84
183
|
`;
|
|
85
184
|
}
|
|
86
185
|
render() {
|
|
186
|
+
// The viewport clamp offsets are applied via CSS custom properties so the
|
|
187
|
+
// placement transforms can consume them.
|
|
188
|
+
// Computed fresh on every render rather than cached in state: caching it
|
|
189
|
+
// meant a stale value could briefly apply whenever open/escapeBoundary/
|
|
190
|
+
// placement changed together, since state set during `updated()` only
|
|
191
|
+
// takes effect on the render after next.
|
|
192
|
+
const contentStyle = {
|
|
193
|
+
'--th-popover-clamp-x': `${this._clampOffsetX}px`,
|
|
194
|
+
'--th-popover-clamp-y': `${this._clampOffsetY}px`,
|
|
195
|
+
};
|
|
196
|
+
if (this.open && this.escapeBoundary) {
|
|
197
|
+
Object.assign(contentStyle, this._computeFixedPosition());
|
|
198
|
+
}
|
|
87
199
|
return html `
|
|
88
200
|
<div
|
|
89
201
|
class="trigger-wrapper"
|
|
@@ -96,6 +208,7 @@ export class Popover extends LitElement {
|
|
|
96
208
|
|
|
97
209
|
<div
|
|
98
210
|
class="popover-content ${this.open ? 'popover-content--open' : ''}"
|
|
211
|
+
style=${styleMap(contentStyle)}
|
|
99
212
|
role="dialog"
|
|
100
213
|
aria-hidden=${!this.open}
|
|
101
214
|
>
|
|
@@ -179,45 +292,45 @@ Popover.styles = css `
|
|
|
179
292
|
:host(:not([placement])) .popover-content {
|
|
180
293
|
top: calc(100% + 8px);
|
|
181
294
|
left: 50%;
|
|
182
|
-
transform: translateX(-50%) translateY(-6px);
|
|
295
|
+
transform: translateX(-50%) translateX(var(--th-popover-clamp-x, 0px)) translateY(-6px);
|
|
183
296
|
}
|
|
184
297
|
|
|
185
298
|
:host([placement='bottom']) .popover-content--open,
|
|
186
299
|
:host(:not([placement])) .popover-content--open {
|
|
187
|
-
transform: translateX(-50%) translateY(0);
|
|
300
|
+
transform: translateX(-50%) translateX(var(--th-popover-clamp-x, 0px)) translateY(0);
|
|
188
301
|
}
|
|
189
302
|
|
|
190
303
|
/* Placement: top */
|
|
191
304
|
:host([placement='top']) .popover-content {
|
|
192
305
|
bottom: calc(100% + 8px);
|
|
193
306
|
left: 50%;
|
|
194
|
-
transform: translateX(-50%) translateY(6px);
|
|
307
|
+
transform: translateX(-50%) translateX(var(--th-popover-clamp-x, 0px)) translateY(6px);
|
|
195
308
|
}
|
|
196
309
|
|
|
197
310
|
:host([placement='top']) .popover-content--open {
|
|
198
|
-
transform: translateX(-50%) translateY(0);
|
|
311
|
+
transform: translateX(-50%) translateX(var(--th-popover-clamp-x, 0px)) translateY(0);
|
|
199
312
|
}
|
|
200
313
|
|
|
201
314
|
/* Placement: right */
|
|
202
315
|
:host([placement='right']) .popover-content {
|
|
203
316
|
left: calc(100% + 8px);
|
|
204
317
|
top: 50%;
|
|
205
|
-
transform: translateY(-50%) translateX(-6px);
|
|
318
|
+
transform: translateY(-50%) translateY(var(--th-popover-clamp-y, 0px)) translateX(-6px);
|
|
206
319
|
}
|
|
207
320
|
|
|
208
321
|
:host([placement='right']) .popover-content--open {
|
|
209
|
-
transform: translateY(-50%) translateX(0);
|
|
322
|
+
transform: translateY(-50%) translateY(var(--th-popover-clamp-y, 0px)) translateX(0);
|
|
210
323
|
}
|
|
211
324
|
|
|
212
325
|
/* Placement: left */
|
|
213
326
|
:host([placement='left']) .popover-content {
|
|
214
327
|
right: calc(100% + 8px);
|
|
215
328
|
top: 50%;
|
|
216
|
-
transform: translateY(-50%) translateX(6px);
|
|
329
|
+
transform: translateY(-50%) translateY(var(--th-popover-clamp-y, 0px)) translateX(6px);
|
|
217
330
|
}
|
|
218
331
|
|
|
219
332
|
:host([placement='left']) .popover-content--open {
|
|
220
|
-
transform: translateY(-50%) translateX(0);
|
|
333
|
+
transform: translateY(-50%) translateY(var(--th-popover-clamp-y, 0px)) translateX(0);
|
|
221
334
|
}
|
|
222
335
|
|
|
223
336
|
/* Dark mode */
|
|
@@ -242,8 +355,17 @@ __decorate([
|
|
|
242
355
|
__decorate([
|
|
243
356
|
property({ type: String })
|
|
244
357
|
], Popover.prototype, "subtitle", void 0);
|
|
358
|
+
__decorate([
|
|
359
|
+
property({ type: Boolean, attribute: 'escape-boundary' })
|
|
360
|
+
], Popover.prototype, "escapeBoundary", void 0);
|
|
245
361
|
__decorate([
|
|
246
362
|
state()
|
|
247
363
|
], Popover.prototype, "_hasHeadingSlot", void 0);
|
|
364
|
+
__decorate([
|
|
365
|
+
state()
|
|
366
|
+
], Popover.prototype, "_clampOffsetX", void 0);
|
|
367
|
+
__decorate([
|
|
368
|
+
state()
|
|
369
|
+
], Popover.prototype, "_clampOffsetY", void 0);
|
|
248
370
|
customElements.define('trailhand-popover', Popover);
|
|
249
371
|
//# sourceMappingURL=popover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../../../src/components/popover/popover.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAkB,OAAO,
|
|
1
|
+
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../../../src/components/popover/popover.ts"],"names":[],"mappings":"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"}
|