@odx/foundation 1.0.0-beta.67 → 1.0.0-beta.68
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.
- package/dist/components/dropdown/dropdown.d.ts +0 -2
- package/dist/components/popover/popover-host.d.ts +4 -1
- package/dist/components/popover/popover.d.ts +1 -0
- package/dist/components/tooltip/tooltip.d.ts +0 -1
- package/dist/components.js +24 -21
- package/dist/lib/utils/compute-popover-placement.d.ts +0 -1
- package/dist/main.js +6 -13
- package/package.json +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { PopoverPlacementOptions, ValuesOf } from '../../lib/main.js';
|
|
2
2
|
import { PropertyValues, TemplateResult } from 'lit';
|
|
3
|
-
import { OdxPopover } from '../popover/popover.js';
|
|
4
3
|
import { PopoverHost } from '../popover/popover-host.js';
|
|
5
4
|
declare global {
|
|
6
5
|
interface HTMLElementTagNameMap {
|
|
@@ -14,7 +13,6 @@ export declare const DropdownPlacement: {
|
|
|
14
13
|
};
|
|
15
14
|
export declare class OdxDropdown extends PopoverHost {
|
|
16
15
|
#private;
|
|
17
|
-
popoverElement: OdxPopover;
|
|
18
16
|
matchReferenceWidth: boolean;
|
|
19
17
|
placement: DropdownPlacement;
|
|
20
18
|
get options(): PopoverPlacementOptions;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { CanBeDisabled, CustomElement, Placement, PopoverPlacementOptions } from '../../lib/main.js';
|
|
2
|
+
import { OdxPopover } from './popover.js';
|
|
2
3
|
declare const PopoverHost_base: import('../../lib/main.js').Constructor<CanBeDisabled> & typeof CustomElement;
|
|
3
4
|
export declare class PopoverHost extends PopoverHost_base {
|
|
4
5
|
#private;
|
|
5
6
|
static readonly styles: import('lit').CSSResult;
|
|
6
7
|
private isOpen;
|
|
8
|
+
popoverElement: OdxPopover;
|
|
7
9
|
referenceElement: HTMLElement | null;
|
|
8
10
|
anchor: string;
|
|
9
11
|
placement: Placement;
|
|
12
|
+
fpsLimit: number;
|
|
10
13
|
get options(): PopoverPlacementOptions;
|
|
11
14
|
constructor();
|
|
12
15
|
connectedCallback(): void;
|
|
@@ -14,7 +17,7 @@ export declare class PopoverHost extends PopoverHost_base {
|
|
|
14
17
|
mountPopover(referenceElement: HTMLElement | null): void;
|
|
15
18
|
unmountPopover(_referenceElement: HTMLElement): void;
|
|
16
19
|
isPopoverOpen(): boolean;
|
|
17
|
-
showPopover(): void
|
|
20
|
+
showPopover(): Promise<void>;
|
|
18
21
|
hidePopover(): void;
|
|
19
22
|
togglePopover(state?: boolean): boolean;
|
|
20
23
|
canPopoverShow?(): boolean;
|
package/dist/components.js
CHANGED
|
@@ -201,7 +201,7 @@ const _OdxActionButton = class _OdxActionButton extends OdxButton {
|
|
|
201
201
|
${when(
|
|
202
202
|
!this.replaceContent && this.statusMessage,
|
|
203
203
|
(statusMessage) => html`
|
|
204
|
-
<odx-tooltip anchor=${this.id} placement="top" .
|
|
204
|
+
<odx-tooltip anchor=${this.id} placement="top" .popover=${"manual"} .show=${this.isStatusMessageShown} timeout=${this.statusMessageTimeout}>
|
|
205
205
|
<odx-text size="sm" strong>${statusMessage}</odx-text>
|
|
206
206
|
</odx-tooltip>
|
|
207
207
|
`
|
|
@@ -915,7 +915,7 @@ __decorateClass([
|
|
|
915
915
|
], _OdxCircularProgressBar.prototype, "size", 2);
|
|
916
916
|
let OdxCircularProgressBar = _OdxCircularProgressBar;
|
|
917
917
|
|
|
918
|
-
const styles$X = "@layer base{:host{--max-block-size: 100%;--max-inline-size: 100%;--_popover-color-background: var(--odx-color-background-level-2);--_popover-color-foreground: var(--odx-color-foreground-rest);--_popover-min-block-size: inherit;--_popover-max-block-size: 100%;--_popover-min-inline-size: inherit;--_popover-max-inline-size: 100%;--_popover-transition: var(--odx-popover-transition, var(--odx-motion-duration-default));--_popover-offset: var(--odx-size-50);--_popover-shadow: var(--odx-popover-shadow, var(--odx-shadow-level-1));--_popover-outer-padding: var(--odx-size-75);--_max-block-size: min(var(--_popover-max-block-size), var(--max-block-size));--_max-inline-size: min(var(--_popover-max-inline-size), var(--max-inline-size));top:var(--_popover-position-y);left:var(--_popover-position-x);transform:
|
|
918
|
+
const styles$X = "@layer base{:host{--max-block-size: 100%;--max-inline-size: 100%;--_popover-color-background: var(--odx-color-background-level-2);--_popover-color-foreground: var(--odx-color-foreground-rest);--_popover-min-block-size: inherit;--_popover-max-block-size: 100%;--_popover-min-inline-size: inherit;--_popover-max-inline-size: 100%;--_popover-transition: var(--odx-popover-transition, var(--odx-motion-duration-default));--_popover-offset: var(--odx-size-50);--_popover-shadow: var(--odx-popover-shadow, var(--odx-shadow-level-1));--_popover-outer-padding: var(--odx-size-75);--_popover-arrow-size: var(--odx-size-50);--_popover-arrow-offset: calc(var(--_popover-offset) - var(--_popover-arrow-size) / 2);--_max-block-size: min(var(--_popover-max-block-size), var(--max-block-size));--_max-inline-size: min(var(--_popover-max-inline-size), var(--max-inline-size));top:var(--_popover-position-y);left:var(--_popover-position-x);transform:translate3d(var(--_popover-transition-offset-x),var(--_popover-transition-offset-y),0);transition:opacity var(--_popover-transition),transform var(--_popover-transition) allow-discrete,overlay var(--_popover-transition) allow-discrete,display var(--_popover-transition) allow-discrete;opacity:0;margin:0;background-color:transparent;max-block-size:var(--_max-block-size);max-inline-size:var(--_max-inline-size)}:host(:popover-open){display:flex;transform:translate(0);opacity:1;@starting-style{transform:translate(var(--_popover-transition-offset-x),var(--_popover-transition-offset-y));opacity:0}}odx-popover::part(arrow){transform:rotate(45deg)}}@layer state{:host([popover-placement^=\"top\"]){--_popover-transition-offset-x: 0;--_popover-transition-offset-y: calc(-1 * var(--_popover-offset));padding-block:var(--_popover-outer-padding) var(--_popover-offset);max-block-size:calc(var(--_max-block-size) - var(--_popover-outer-padding));odx-popover::part(arrow){bottom:var(--_popover-arrow-offset)}}:host([popover-placement^=\"right\"]){--_popover-transition-offset-x: var(--_popover-offset);--_popover-transition-offset-y: 0;padding-inline:var(--_popover-offset) var(--_popover-outer-padding);max-inline-size:calc(var(--_max-inline-size) - var(--_popover-outer-padding));odx-popover::part(arrow){left:var(--_popover-arrow-offset)}}:host([popover-placement^=\"bottom\"]){--_popover-transition-offset-x: 0;--_popover-transition-offset-y: var(--_popover-offset);--_popover-arrow-offset-y: calc(var(--_popover-offset) - 6px);padding-block:var(--_popover-offset) var(--_popover-outer-padding);max-block-size:calc(var(--_max-block-size) - var(--_popover-outer-padding));odx-popover::part(arrow){top:var(--_popover-arrow-offset)}}:host([popover-placement^=\"left\"]){--_popover-transition-offset-x: calc(-1 * var(--_popover-offset));--_popover-transition-offset-y: 0;--_popover-arrow-offset-x: calc(var(--_popover-offset) - var(--_arrow-size) / 2);--_popover-arrow-offset-y: 0;padding-inline:var(--_popover-offset) var(--_popover-outer-padding);max-inline-size:calc(var(--_max-inline-size) - var(--_popover-outer-padding));odx-popover::part(arrow){right:var(--_popover-offset)}}}";
|
|
919
919
|
|
|
920
920
|
class PopoverHost extends CanBeDisabled(CustomElement) {
|
|
921
921
|
constructor() {
|
|
@@ -924,6 +924,7 @@ class PopoverHost extends CanBeDisabled(CustomElement) {
|
|
|
924
924
|
this.referenceElement = null;
|
|
925
925
|
this.anchor = "";
|
|
926
926
|
this.placement = Placement.BOTTOM;
|
|
927
|
+
this.fpsLimit = 60;
|
|
927
928
|
this.#handleToggle = async ({ newState }) => {
|
|
928
929
|
if (this.isOpen) {
|
|
929
930
|
this.onBeforePopoverShow?.();
|
|
@@ -946,7 +947,7 @@ class PopoverHost extends CanBeDisabled(CustomElement) {
|
|
|
946
947
|
#positionUpdater;
|
|
947
948
|
#observer;
|
|
948
949
|
get options() {
|
|
949
|
-
return PopoverPlacementOptions({ placement: this.placement });
|
|
950
|
+
return PopoverPlacementOptions({ arrowElement: this.popoverElement.arrowElement, placement: this.placement });
|
|
950
951
|
}
|
|
951
952
|
connectedCallback() {
|
|
952
953
|
super.connectedCallback();
|
|
@@ -971,8 +972,9 @@ class PopoverHost extends CanBeDisabled(CustomElement) {
|
|
|
971
972
|
isPopoverOpen() {
|
|
972
973
|
return this.isOpen;
|
|
973
974
|
}
|
|
974
|
-
showPopover() {
|
|
975
|
+
async showPopover() {
|
|
975
976
|
if (!this.referenceElement || this.isOpen || this.disabled || this.canPopoverShow?.() === false) return;
|
|
977
|
+
await 0;
|
|
976
978
|
computePopoverPlacement(this.referenceElement, this, this.options);
|
|
977
979
|
super.showPopover();
|
|
978
980
|
this.isOpen = true;
|
|
@@ -980,8 +982,7 @@ class PopoverHost extends CanBeDisabled(CustomElement) {
|
|
|
980
982
|
this.#positionUpdater = autoUpdate(
|
|
981
983
|
this.referenceElement,
|
|
982
984
|
this,
|
|
983
|
-
throttle(() => this.referenceElement && computePopoverPlacement(this.referenceElement, this, this.options), 1e3 /
|
|
984
|
-
{ animationFrame: true }
|
|
985
|
+
throttle(() => this.referenceElement && computePopoverPlacement(this.referenceElement, this, this.options), 1e3 / this.fpsLimit)
|
|
985
986
|
);
|
|
986
987
|
}
|
|
987
988
|
hidePopover() {
|
|
@@ -1022,6 +1023,9 @@ class PopoverHost extends CanBeDisabled(CustomElement) {
|
|
|
1022
1023
|
__decorateClass([
|
|
1023
1024
|
state()
|
|
1024
1025
|
], PopoverHost.prototype, "isOpen", 2);
|
|
1026
|
+
__decorateClass([
|
|
1027
|
+
query("odx-popover", true)
|
|
1028
|
+
], PopoverHost.prototype, "popoverElement", 2);
|
|
1025
1029
|
__decorateClass([
|
|
1026
1030
|
state()
|
|
1027
1031
|
], PopoverHost.prototype, "referenceElement", 2);
|
|
@@ -1031,6 +1035,9 @@ __decorateClass([
|
|
|
1031
1035
|
__decorateClass([
|
|
1032
1036
|
property({ reflect: true, useDefault: true })
|
|
1033
1037
|
], PopoverHost.prototype, "placement", 2);
|
|
1038
|
+
__decorateClass([
|
|
1039
|
+
property({ attribute: false })
|
|
1040
|
+
], PopoverHost.prototype, "fpsLimit", 2);
|
|
1034
1041
|
|
|
1035
1042
|
const styles$W = ":host{--_popover-offset: var(--odx-size-37)}";
|
|
1036
1043
|
|
|
@@ -1108,9 +1115,6 @@ const _OdxDropdown = class _OdxDropdown extends PopoverHost {
|
|
|
1108
1115
|
#handleClick;
|
|
1109
1116
|
#handleKeyboardEvent;
|
|
1110
1117
|
};
|
|
1111
|
-
__decorateClass([
|
|
1112
|
-
query("odx-popover", true)
|
|
1113
|
-
], _OdxDropdown.prototype, "popoverElement", 2);
|
|
1114
1118
|
__decorateClass([
|
|
1115
1119
|
property({ type: Boolean, reflect: true, useDefault: true, attribute: "match-reference-width" })
|
|
1116
1120
|
], _OdxDropdown.prototype, "matchReferenceWidth", 2);
|
|
@@ -1281,7 +1285,7 @@ const _OdxAutocomplete = class _OdxAutocomplete extends FormControl {
|
|
|
1281
1285
|
render() {
|
|
1282
1286
|
return html`
|
|
1283
1287
|
<slot name="control" @slotchange=${this.#handleControlSlotChange}></slot>
|
|
1284
|
-
<odx-dropdown part="dropdown" role="listbox" tabindex="-1" ?disabled=${this.disabled} match-reference-width popover="manual">
|
|
1288
|
+
<odx-dropdown part="dropdown" role="listbox" tabindex="-1" ?disabled=${this.disabled} match-reference-width .popover="${"manual"}">
|
|
1285
1289
|
<odx-highlight minlength=${this.minQueryLength} selector="odx-option" subtle .root=${this}>
|
|
1286
1290
|
<odx-stack gap="xs">
|
|
1287
1291
|
<slot></slot>
|
|
@@ -2842,7 +2846,7 @@ __decorateClass([
|
|
|
2842
2846
|
], _OdxPagination.prototype, "totalItems", 2);
|
|
2843
2847
|
let OdxPagination = _OdxPagination;
|
|
2844
2848
|
|
|
2845
|
-
const styles$s = ":host{
|
|
2849
|
+
const styles$s = ":host{display:flex;border-radius:var(--odx-border-radius-controls);box-shadow:var(--_popover-shadow);background-color:var(--_popover-color-background)}[part~=base]{display:flex;position:relative;inset-block-start:0!important;inset-inline-start:0!important;flex-direction:column;z-index:2;border-radius:inherit;block-size:fit-content;min-block-size:var(--_popover-min-block-size);max-block-size:100%;min-inline-size:var(--_popover-min-inline-size);max-inline-size:100%;overflow:auto;scrollbar-width:thin;scroll-behavior:smooth;scroll-padding-block:calc(var(--odx-size-150) + var(--_popover-outer-padding))}[part~=content]{display:flex;flex-direction:column;padding:var(--odx-size-75);color:var(--_popover-color-foreground)}[part~=arrow]{position:absolute;z-index:3;background-color:inherit;block-size:var(--_popover-arrow-size);inline-size:var(--_popover-arrow-size)}";
|
|
2846
2850
|
|
|
2847
2851
|
const _OdxPopover = class _OdxPopover extends CustomElement {
|
|
2848
2852
|
constructor() {
|
|
@@ -2863,6 +2867,9 @@ const _OdxPopover = class _OdxPopover extends CustomElement {
|
|
|
2863
2867
|
`;
|
|
2864
2868
|
}
|
|
2865
2869
|
};
|
|
2870
|
+
__decorateClass([
|
|
2871
|
+
query('[part="arrow"]')
|
|
2872
|
+
], _OdxPopover.prototype, "arrowElement", 2);
|
|
2866
2873
|
__decorateClass([
|
|
2867
2874
|
property({ type: Boolean, reflect: true, useDefault: true })
|
|
2868
2875
|
], _OdxPopover.prototype, "showArrow", 2);
|
|
@@ -4224,13 +4231,12 @@ __decorateClass([
|
|
|
4224
4231
|
], _OdxToggleContent.prototype, "hidden", 2);
|
|
4225
4232
|
let OdxToggleContent = _OdxToggleContent;
|
|
4226
4233
|
|
|
4227
|
-
const styles$1 = ":host{--_popover-color-background: var(--odx-color-background-level-3);--_popover-color-foreground: var(--odx-color-foreground-inverse-static)}:host(:not([interactive])){pointer-events:none}odx-popover{
|
|
4234
|
+
const styles$1 = ":host{--_popover-color-background: var(--odx-color-background-level-3);--_popover-color-foreground: var(--odx-color-foreground-inverse-static)}:host(:not([interactive])){pointer-events:none;user-select:none}odx-popover{border-radius:var(--odx-border-radius-md);&::part(content){padding-block:var(--odx-size-25);padding-inline:var(--odx-size-50)}}";
|
|
4228
4235
|
|
|
4229
4236
|
const TooltipPlacement = pick(Placement, ["TOP", "RIGHT", "BOTTOM", "LEFT"]);
|
|
4230
4237
|
const _OdxTooltip = class _OdxTooltip extends PopoverHost {
|
|
4231
4238
|
constructor() {
|
|
4232
4239
|
super(...arguments);
|
|
4233
|
-
this.manual = false;
|
|
4234
4240
|
this.show = false;
|
|
4235
4241
|
this.placement = TooltipPlacement.TOP;
|
|
4236
4242
|
this.interactive = false;
|
|
@@ -4266,10 +4272,10 @@ const _OdxTooltip = class _OdxTooltip extends PopoverHost {
|
|
|
4266
4272
|
clearTimeout(this.#timeout);
|
|
4267
4273
|
}
|
|
4268
4274
|
mountPopover(referenceElement) {
|
|
4269
|
-
super.mountPopover(referenceElement);
|
|
4270
4275
|
if (!referenceElement) return;
|
|
4276
|
+
super.mountPopover(referenceElement);
|
|
4271
4277
|
this.#updateAriaAttributes(referenceElement, this.id);
|
|
4272
|
-
if (this.manual) return;
|
|
4278
|
+
if (this.popover === "manual") return;
|
|
4273
4279
|
this.addEventListener("mouseleave", this.#handleMouseEvents);
|
|
4274
4280
|
referenceElement.addEventListener("mouseenter", this.#handleMouseEvents);
|
|
4275
4281
|
referenceElement.addEventListener("mouseleave", this.#handleReferenceMouseLeave);
|
|
@@ -4291,7 +4297,7 @@ const _OdxTooltip = class _OdxTooltip extends PopoverHost {
|
|
|
4291
4297
|
}
|
|
4292
4298
|
render() {
|
|
4293
4299
|
return html`
|
|
4294
|
-
<odx-popover>
|
|
4300
|
+
<odx-popover showArrow>
|
|
4295
4301
|
<slot></slot>
|
|
4296
4302
|
</odx-popover>
|
|
4297
4303
|
`;
|
|
@@ -4301,7 +4307,7 @@ const _OdxTooltip = class _OdxTooltip extends PopoverHost {
|
|
|
4301
4307
|
if (props.has("id") && this.referenceElement) {
|
|
4302
4308
|
this.#updateAriaAttributes(this.referenceElement, this.id);
|
|
4303
4309
|
}
|
|
4304
|
-
if (props.has("show") &&
|
|
4310
|
+
if (props.has("show") && this.popover === "manual") {
|
|
4305
4311
|
this.togglePopover(this.show);
|
|
4306
4312
|
}
|
|
4307
4313
|
}
|
|
@@ -4317,10 +4323,7 @@ const _OdxTooltip = class _OdxTooltip extends PopoverHost {
|
|
|
4317
4323
|
#handleKeyboardFocus;
|
|
4318
4324
|
};
|
|
4319
4325
|
__decorateClass([
|
|
4320
|
-
property({ type: Boolean
|
|
4321
|
-
], _OdxTooltip.prototype, "manual", 2);
|
|
4322
|
-
__decorateClass([
|
|
4323
|
-
property({ type: Boolean, attribute: false })
|
|
4326
|
+
property({ type: Boolean })
|
|
4324
4327
|
], _OdxTooltip.prototype, "show", 2);
|
|
4325
4328
|
__decorateClass([
|
|
4326
4329
|
property({ type: Number })
|
|
@@ -7,7 +7,6 @@ export interface PopoverPlacementOptions {
|
|
|
7
7
|
matchReferenceWidth: boolean;
|
|
8
8
|
minHeight?: number | null;
|
|
9
9
|
offset: number;
|
|
10
|
-
outerPadding: number;
|
|
11
10
|
}
|
|
12
11
|
export declare function PopoverPlacementOptions(options?: Partial<PopoverPlacementOptions>): PopoverPlacementOptions;
|
|
13
12
|
export declare function computePopoverPlacement(referenceElement: ReferenceElement, floatingElement: HTMLElement, options: PopoverPlacementOptions): Promise<void>;
|
package/dist/main.js
CHANGED
|
@@ -1109,14 +1109,13 @@ function PopoverPlacementOptions(options) {
|
|
|
1109
1109
|
fallbackAxisSideDirection: "end",
|
|
1110
1110
|
matchReferenceWidth: false,
|
|
1111
1111
|
offset: 0,
|
|
1112
|
-
outerPadding: 24,
|
|
1113
1112
|
...options
|
|
1114
1113
|
};
|
|
1115
1114
|
}
|
|
1116
1115
|
async function computePopoverPlacement(referenceElement, floatingElement, options) {
|
|
1117
|
-
const { arrowElement, placement, offset: offset$1, matchReferenceWidth, enableFallback, fallbackAxisSideDirection, minHeight
|
|
1116
|
+
const { arrowElement, placement, offset: offset$1, matchReferenceWidth, enableFallback, fallbackAxisSideDirection, minHeight } = options;
|
|
1118
1117
|
const arrowSize = arrowElement?.offsetWidth ?? 0;
|
|
1119
|
-
const arrowMiddleware = arrowElement ? arrow({ element: arrowElement, padding: arrowSize *
|
|
1118
|
+
const arrowMiddleware = arrowElement ? arrow({ element: arrowElement, padding: arrowSize * 2 }) : void 0;
|
|
1120
1119
|
const flipMiddleWare = enableFallback ? flip({ fallbackAxisSideDirection }) : void 0;
|
|
1121
1120
|
floatingElement.setAttribute("popover-placement", placement);
|
|
1122
1121
|
const result = await computePosition(referenceElement, floatingElement, {
|
|
@@ -1139,20 +1138,14 @@ async function computePopoverPlacement(referenceElement, floatingElement, option
|
|
|
1139
1138
|
hide()
|
|
1140
1139
|
]
|
|
1141
1140
|
});
|
|
1142
|
-
let arrowPositionX = null;
|
|
1143
|
-
let arrowPositionY = null;
|
|
1144
1141
|
if (arrowElement && result.middlewareData.arrow) {
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
arrowPositionX = arrow2.x ?? arrowOffsetX;
|
|
1150
|
-
arrowPositionY = arrow2.y ?? arrowOffsetY;
|
|
1142
|
+
Object.assign(arrowElement.style, {
|
|
1143
|
+
left: toPx(result.middlewareData.arrow.x),
|
|
1144
|
+
top: toPx(result.middlewareData.arrow.y)
|
|
1145
|
+
});
|
|
1151
1146
|
}
|
|
1152
1147
|
floatingElement.style.setProperty("--_popover-position-x", toPx(result.x));
|
|
1153
1148
|
floatingElement.style.setProperty("--_popover-position-y", toPx(result.y));
|
|
1154
|
-
floatingElement.style.setProperty("--_popover-arrow-position-x", toPx(arrowPositionX));
|
|
1155
|
-
floatingElement.style.setProperty("--_popover-arrow-position-y", toPx(arrowPositionY));
|
|
1156
1149
|
}
|
|
1157
1150
|
function positionUpdater(referenceElement, floatingElement, options) {
|
|
1158
1151
|
return autoUpdate(
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odx/foundation",
|
|
3
3
|
"description": "A library of Web Component building blocks for ODX",
|
|
4
|
-
"version": "1.0.0-beta.
|
|
4
|
+
"version": "1.0.0-beta.68",
|
|
5
5
|
"author": "Drägerwerk AG & Co.KGaA",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
7
7
|
"homepage": "https://odx.draeger.com",
|