@greypan/web-ui 8.1.0 → 9.1.0
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/README.CN.md +309 -135
- package/README.md +311 -135
- package/dist/assets/glass.js +1 -1
- package/dist/assets/glass.js.map +1 -1
- package/dist/assets/menu-portal.js +1 -1
- package/dist/assets/menu-portal.js.map +1 -1
- package/dist/assets/modal-surface.js +6 -0
- package/dist/assets/modal-surface.js.map +1 -0
- package/dist/assets/selection-control.js +1 -1
- package/dist/assets/selection-control.js.map +1 -1
- package/dist/assets/toast-containers.js +1 -1
- package/dist/assets/toast-containers.js.map +1 -1
- package/dist/components/autocomplete/index.d.ts +3 -2
- package/dist/components/autocomplete/index.js +40 -44
- package/dist/components/autocomplete/index.js.map +1 -1
- package/dist/components/autocomplete/style.js +1 -1
- package/dist/components/autocomplete/style.js.map +1 -1
- package/dist/components/avatar/index.js.map +1 -1
- package/dist/components/avatar/style.js +1 -1
- package/dist/components/avatar/style.js.map +1 -1
- package/dist/components/back-top/style.js +1 -1
- package/dist/components/back-top/style.js.map +1 -1
- package/dist/components/badge/style.js +1 -1
- package/dist/components/badge/style.js.map +1 -1
- package/dist/components/button/style.js +1 -1
- package/dist/components/button/style.js.map +1 -1
- package/dist/components/button-group/index.js +0 -1
- package/dist/components/button-group/index.js.map +1 -1
- package/dist/components/button-group/style.js +1 -1
- package/dist/components/button-group/style.js.map +1 -1
- package/dist/components/checkbox/index.js +4 -4
- package/dist/components/checkbox/index.js.map +1 -1
- package/dist/components/checkbox-group/style.js +1 -1
- package/dist/components/checkbox-group/style.js.map +1 -1
- package/dist/components/context-menu/index.d.ts +182 -3
- package/dist/components/context-menu/index.js +166 -91
- package/dist/components/context-menu/index.js.map +1 -1
- package/dist/components/context-menu/scrim.js +6 -0
- package/dist/components/context-menu/scrim.js.map +1 -0
- package/dist/components/context-menu/style.js +1 -1
- package/dist/components/context-menu/style.js.map +1 -1
- package/dist/components/dialog/index.d.ts +9 -0
- package/dist/components/dialog/index.js +68 -46
- package/dist/components/dialog/index.js.map +1 -1
- package/dist/components/dialog/style.js +1 -1
- package/dist/components/dialog/style.js.map +1 -1
- package/dist/components/drawer/index.d.ts +45 -0
- package/dist/components/drawer/index.js +122 -53
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/drawer/style.js +1 -1
- package/dist/components/drawer/style.js.map +1 -1
- package/dist/components/dropdown/index.d.ts +12 -0
- package/dist/components/dropdown/index.js +13 -10
- package/dist/components/dropdown/index.js.map +1 -1
- package/dist/components/dropdown-divider/style.js +1 -1
- package/dist/components/dropdown-divider/style.js.map +1 -1
- package/dist/components/dropdown-header/style.js +1 -1
- package/dist/components/dropdown-header/style.js.map +1 -1
- package/dist/components/dropdown-item/style.js +1 -1
- package/dist/components/dropdown-item/style.js.map +1 -1
- package/dist/components/editable-text/index.d.ts +39 -0
- package/dist/components/editable-text/index.js +6 -2
- package/dist/components/editable-text/index.js.map +1 -1
- package/dist/components/empty/index.d.ts +21 -4
- package/dist/components/empty/index.js +37 -32
- package/dist/components/empty/index.js.map +1 -1
- package/dist/components/empty/style.js +1 -1
- package/dist/components/empty/style.js.map +1 -1
- package/dist/components/image-preview/index.js +75 -63
- package/dist/components/image-preview/index.js.map +1 -1
- package/dist/components/image-preview/style.js +1 -1
- package/dist/components/image-preview/style.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +38 -37
- package/dist/components/input/style.js +1 -1
- package/dist/components/input/style.js.map +1 -1
- package/dist/components/input-number/style.js +1 -1
- package/dist/components/input-number/style.js.map +1 -1
- package/dist/components/layout/index.d.ts +21 -6
- package/dist/components/layout/index.js +47 -27
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/style.js +1 -1
- package/dist/components/layout/style.js.map +1 -1
- package/dist/components/middle-ellipsis/index.d.ts +100 -0
- package/dist/components/middle-ellipsis/index.js +112 -0
- package/dist/components/middle-ellipsis/index.js.map +1 -0
- package/dist/components/middle-ellipsis/style.js +6 -0
- package/dist/components/middle-ellipsis/style.js.map +1 -0
- package/dist/components/middle-ellipsis/truncate.d.ts +62 -0
- package/dist/components/middle-ellipsis/truncate.js +45 -0
- package/dist/components/middle-ellipsis/truncate.js.map +1 -0
- package/dist/components/option/style.js +1 -1
- package/dist/components/option/style.js.map +1 -1
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/popover/style.js +1 -1
- package/dist/components/popover/style.js.map +1 -1
- package/dist/components/radio/style.js +1 -1
- package/dist/components/radio/style.js.map +1 -1
- package/dist/components/radio-group/style.js +1 -1
- package/dist/components/radio-group/style.js.map +1 -1
- package/dist/components/segmented/index.d.ts +5 -0
- package/dist/components/segmented/index.js +45 -28
- package/dist/components/segmented/index.js.map +1 -1
- package/dist/components/segmented/style.js +1 -1
- package/dist/components/segmented/style.js.map +1 -1
- package/dist/components/segmented-trigger/style.js +1 -1
- package/dist/components/segmented-trigger/style.js.map +1 -1
- package/dist/components/select/index.js +0 -1
- package/dist/components/select/index.js.map +1 -1
- package/dist/components/select/style.js +1 -1
- package/dist/components/select/style.js.map +1 -1
- package/dist/components/slider/style.js +1 -1
- package/dist/components/slider/style.js.map +1 -1
- package/dist/components/spinner/style.js +1 -1
- package/dist/components/spinner/style.js.map +1 -1
- package/dist/components/svg-draw-lines/index.js.map +1 -1
- package/dist/components/switch/style.js +1 -1
- package/dist/components/switch/style.js.map +1 -1
- package/dist/components/textarea/index.js +2 -2
- package/dist/components/textarea/index.js.map +1 -1
- package/dist/components/textarea/style.js +1 -1
- package/dist/components/textarea/style.js.map +1 -1
- package/dist/components/theme/style.js +1 -1
- package/dist/components/theme/style.js.map +1 -1
- package/dist/components/toast/style.js +1 -1
- package/dist/components/toast/style.js.map +1 -1
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/components/tooltip/style.js +1 -1
- package/dist/components/tooltip/style.js.map +1 -1
- package/dist/icons/generated/akar-icons-circle-check.d.ts +6 -0
- package/dist/icons/generated/akar-icons-circle-check.js +10 -0
- package/dist/icons/generated/akar-icons-circle-check.js.map +1 -0
- package/dist/icons/generated/bi-check-lg.d.ts +6 -0
- package/dist/icons/generated/bi-check-lg.js +10 -0
- package/dist/icons/generated/bi-check-lg.js.map +1 -0
- package/dist/icons/generated/fluent-tag-search-24-regular.d.ts +6 -0
- package/dist/icons/generated/fluent-tag-search-24-regular.js +10 -0
- package/dist/icons/generated/fluent-tag-search-24-regular.js.map +1 -0
- package/dist/icons/generated/mdi-tag-search-outline.d.ts +6 -0
- package/dist/icons/generated/mdi-tag-search-outline.js +10 -0
- package/dist/icons/generated/mdi-tag-search-outline.js.map +1 -0
- package/dist/icons/index.d.ts +4 -0
- package/dist/icons/index.js +5 -1
- package/dist/scrollbars/index.d.ts +33 -0
- package/dist/scrollbars/index.js +18 -0
- package/dist/scrollbars/index.js.map +1 -0
- package/dist/scrollbars/style.css +10 -0
- package/dist/shared/element-height/index.js +47 -0
- package/dist/shared/element-height/index.js.map +1 -0
- package/dist/shared/element-width/index.js +37 -0
- package/dist/shared/element-width/index.js.map +1 -0
- package/dist/shared/menu-portal/menu-portal.js +11 -11
- package/dist/shared/menu-portal/menu-portal.js.map +1 -1
- package/dist/shared/menu-portal/menu-tree.js +2 -2
- package/dist/shared/menu-portal/menu-tree.js.map +1 -1
- package/dist/shared/overlay/anchored-panel.js.map +1 -1
- package/dist/shared/overlay/native-dialog-presence.js +23 -11
- package/dist/shared/overlay/native-dialog-presence.js.map +1 -1
- package/dist/shared/overlay/nested-drawer-layers.js +30 -23
- package/dist/shared/overlay/nested-drawer-layers.js.map +1 -1
- package/dist/shared/scroll-lock/scroll-lock.js +3 -3
- package/dist/shared/scroll-lock/scroll-lock.js.map +1 -1
- package/package.json +19 -5
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import e from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import "
|
|
10
|
-
import "
|
|
11
|
-
import "
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import { LitElement as
|
|
17
|
-
import { customElement as
|
|
2
|
+
import { normalizeNumber as t } from "../../shared/normalize/index.js";
|
|
3
|
+
import { dispatchOpenChangeEvent as n } from "../../shared/open-state/index.js";
|
|
4
|
+
import { computePosition as r, flip as i, shift as a } from "../../node_modules/.pnpm/@floating-ui_dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.js";
|
|
5
|
+
import { defineOverlayPositioningGeneration as o } from "../../shared/overlay/positioning-generation.js";
|
|
6
|
+
import { hideOverlayPresence as s, showOverlayPresence as c } from "../../shared/overlay/presence.js";
|
|
7
|
+
import { defineOpenOverlay as l } from "../../shared/overlay/open-overlay.js";
|
|
8
|
+
import { findNearestTheme as u } from "../../shared/overlay/theme-overlay-scope.js";
|
|
9
|
+
import { defineScrollLockLease as d } from "../../shared/scroll-lock/scroll-lock.js";
|
|
10
|
+
import { UserChangeController as f } from "../../shared/events/user-change.js";
|
|
11
|
+
import { captureFrameworkAnchors as p, findFocusedMenuItem as m, focusMenuItem as h, getMenuChildren as g, getMenuItemFromEvent as _, hideNestedMenuChildren as v, moveMenuChildren as y, orderManagedMenuItems as b, reconcileManagedMenuItems as x, restoreFrameworkAnchors as S, returnManagedMenuItemsToSlot as C } from "../../shared/menu-portal/menu-tree.js";
|
|
12
|
+
import { createClosingSubmenuStack as w, createMenuHoverBinder as T, createMenuOutsideClickGuard as E, getEnabledMenuLevelItems as D, getFocusedMenuItemFromPanels as O, handleMenuKeyboard as k } from "../../shared/menu-behavior/index.js";
|
|
13
|
+
import { createMenuPortalOverlay as A } from "../../shared/menu-portal/menu-portal.js";
|
|
14
|
+
import j from "./scrim.js";
|
|
15
|
+
import M from "./style.js";
|
|
16
|
+
import { LitElement as N, html as P, unsafeCSS as F } from "lit";
|
|
17
|
+
import { customElement as I, property as L, state as R } from "lit/decorators.js";
|
|
18
18
|
//#region src/components/context-menu/index.ts
|
|
19
|
-
var
|
|
19
|
+
var z = "wui-context-menu-item", B = 500, V = 5e3, H = 10, U = 1e3, W = "data-wui-menu-scrim", G = 5, K = 8, q = class extends N {
|
|
20
20
|
constructor(...e) {
|
|
21
|
-
super(...e), this.disabled = !1, this.noScrollLock = !1, this._isOpen = !1, this._x = 0, this._y = 0, this._activeSubmenus = [], this._activeSubmenuItems = [], this._submenuPositionEpochs = /* @__PURE__ */ new WeakMap(), this._menuHandle = null, this._submenuHandles = /* @__PURE__ */ new Map(), this._outsideClickGuard =
|
|
21
|
+
super(...e), this.disabled = !1, this.noScrollLock = !1, this.longPress = !1, this._longPressDelay = B, this._isOpen = !1, this._x = 0, this._y = 0, this._activeSubmenus = [], this._activeSubmenuItems = [], this._longPressOpenedAt = null, this._submenuPositionEpochs = /* @__PURE__ */ new WeakMap(), this._centerOnPressPoint = !1, this._closeSource = "default", this._menuHandle = null, this._submenuHandles = /* @__PURE__ */ new Map(), this._outsideClickGuard = E(this, (e) => this._menuHandle?.contains(e) ?? !1), this._closingSubmenus = w({
|
|
22
22
|
getPanel: (e) => e.panel,
|
|
23
23
|
restoreItems: (e, t) => this._restoreSubmenuItems(e, t),
|
|
24
24
|
dispose: (e) => {
|
|
@@ -33,13 +33,13 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
33
33
|
closeFrom: (e) => {
|
|
34
34
|
this._closeSubmenusFrom(e), this._hoverBinder.bind();
|
|
35
35
|
}
|
|
36
|
-
}, this._hoverBinder =
|
|
37
|
-
getFocusedItem: (e) =>
|
|
36
|
+
}, this._hoverBinder = T(this._hoverDelegate, "web-ui-dropdown-item"), this._keyboardDelegate = {
|
|
37
|
+
getFocusedItem: (e) => O(e, [this._menu?.content, ...this._activeSubmenus.map((e) => e.content)], "web-ui-dropdown-item"),
|
|
38
38
|
getLevelOf: (e) => {
|
|
39
39
|
let t = this._getItemLevel(e);
|
|
40
40
|
return t === -1 ? void 0 : t;
|
|
41
41
|
},
|
|
42
|
-
getEnabledItems: (e) =>
|
|
42
|
+
getEnabledItems: (e) => D(this._getLevelContainer(e)?.content),
|
|
43
43
|
isSubmenuItem: (e) => e.hasAttribute("submenu"),
|
|
44
44
|
openSubmenuInstant: (e) => this._openSubmenu(e, !0),
|
|
45
45
|
closeToParent: (e) => {
|
|
@@ -47,15 +47,42 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
47
47
|
return this._closeSubmenusFrom(e - 1), this._hoverBinder.bind(), t;
|
|
48
48
|
},
|
|
49
49
|
closeDeepestOrAll: () => this._closeLastSubmenuOrMenu()
|
|
50
|
-
}, this._overlay =
|
|
50
|
+
}, this._overlay = l().make({
|
|
51
51
|
requestClose: () => this._keyboardDelegate.closeDeepestOrAll(),
|
|
52
52
|
isConnected: () => this.isConnected
|
|
53
|
-
}), this._menuItemAnchors = /* @__PURE__ */ new Map(), this._scrollLock =
|
|
53
|
+
}), this._menuItemAnchors = /* @__PURE__ */ new Map(), this._scrollLock = d().make(), this._userOpenChange = new f(), this._shouldOpenInstantly = !0, this._suppressInitialFocusVisible = !0, this._refreshScheduled = !1, this._menuPositionGeneration = o().make(), this._contentObserver = new MutationObserver(() => {
|
|
54
54
|
this._isOpen && this._scheduleRefresh();
|
|
55
|
-
}), this._closeFromUser = () => {
|
|
56
|
-
this._isOpen && (this._userOpenChange.mark(), this.close());
|
|
55
|
+
}), this._closeFromUser = (e = "default") => {
|
|
56
|
+
this._isOpen && (this._userOpenChange.mark(), this._closeSource = e, this.close());
|
|
57
|
+
}, this._onScrimClick = (e) => {
|
|
58
|
+
e.target === this._scrim && (this._isLongPressFollowUp() || this._closeFromUser());
|
|
59
|
+
}, this._onScrimCancel = (e) => {
|
|
60
|
+
e.preventDefault();
|
|
61
|
+
}, this._onPointerDown = (e) => {
|
|
62
|
+
this._longPressOpenedAt = null, this.longPress && !this.disabled && e.pointerType === "touch" && (this._cancelLongPress(), this._longPressOrigin = {
|
|
63
|
+
x: e.clientX,
|
|
64
|
+
y: e.clientY
|
|
65
|
+
}, this._longPressTimer = setTimeout(() => {
|
|
66
|
+
this._longPressTimer = void 0;
|
|
67
|
+
let e = this._longPressOrigin;
|
|
68
|
+
e && (this._longPressOrigin = void 0, !this._isOpen && (this._longPressOpenedAt = performance.now(), this._openAt(e.x, e.y, !1, !0, !0) && this._userOpenChange.mark()));
|
|
69
|
+
}, this.longPressDelay));
|
|
70
|
+
}, this._onPointerMove = (e) => {
|
|
71
|
+
if (e.pointerType !== "touch") return;
|
|
72
|
+
let t = this._longPressOrigin;
|
|
73
|
+
t && Math.hypot(e.clientX - t.x, e.clientY - t.y) > H && this._cancelLongPress();
|
|
74
|
+
}, this._onPointerUp = (e) => {
|
|
75
|
+
e.pointerType === "touch" && this._cancelLongPress();
|
|
76
|
+
}, this._onPointerCancel = () => {
|
|
77
|
+
this._cancelLongPress();
|
|
57
78
|
}, this._onContextMenu = (e) => {
|
|
58
|
-
|
|
79
|
+
if (!this.disabled) {
|
|
80
|
+
if (this._isLongPressFollowUp()) {
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
e.preventDefault(), this._openAt(e.clientX, e.clientY, !1, !0) && this._userOpenChange.mark();
|
|
85
|
+
}
|
|
59
86
|
}, this._onContextMenuOutside = (e) => {
|
|
60
87
|
this._isOpen && !this._outsideClickGuard.isInside(e) && this._closeFromUser();
|
|
61
88
|
}, this._onKeydown = (e) => {
|
|
@@ -64,37 +91,42 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
64
91
|
let t = document.activeElement;
|
|
65
92
|
if (t && t !== document.body) {
|
|
66
93
|
let e = t.getBoundingClientRect();
|
|
67
|
-
this._openAt(e.left, e.bottom, !0) && this._userOpenChange.mark();
|
|
68
|
-
} else this._openAt(window.innerWidth / 2, window.innerHeight / 2, !0) && this._userOpenChange.mark();
|
|
94
|
+
this._openAt(e.left, e.bottom, !0, !1) && this._userOpenChange.mark();
|
|
95
|
+
} else this._openAt(window.innerWidth / 2, window.innerHeight / 2, !0, !1) && this._userOpenChange.mark();
|
|
69
96
|
return;
|
|
70
97
|
}
|
|
71
|
-
}, this._onClickOutside = (e) => {
|
|
72
|
-
this._isOpen && !this._outsideClickGuard.isArmed() && (this._outsideClickGuard.isInside(e) || this._closeFromUser());
|
|
73
98
|
}, this._onMenuClick = (e) => {
|
|
74
|
-
let t =
|
|
99
|
+
let t = _(e);
|
|
75
100
|
if (t && !t.hasAttribute("disabled")) {
|
|
76
101
|
if (t.hasAttribute("submenu")) {
|
|
77
102
|
this._openSubmenu(t);
|
|
78
103
|
return;
|
|
79
104
|
}
|
|
80
|
-
this._closeFromUser();
|
|
105
|
+
this._closeFromUser("menu-item");
|
|
81
106
|
}
|
|
82
107
|
}, this._onWheel = (e) => {
|
|
83
108
|
this._preventBackgroundScroll(e);
|
|
84
109
|
}, this._onTouchMove = (e) => {
|
|
85
110
|
this._preventBackgroundScroll(e);
|
|
86
111
|
}, this._onDocumentKeydown = (e) => {
|
|
87
|
-
this._isOpen &&
|
|
112
|
+
this._isOpen && k(this._keyboardDelegate, e);
|
|
88
113
|
};
|
|
89
114
|
}
|
|
90
115
|
static {
|
|
91
|
-
this.styles =
|
|
116
|
+
this.styles = F(M);
|
|
117
|
+
}
|
|
118
|
+
get longPressDelay() {
|
|
119
|
+
return this._longPressDelay;
|
|
120
|
+
}
|
|
121
|
+
set longPressDelay(e) {
|
|
122
|
+
let n = this._longPressDelay;
|
|
123
|
+
this._longPressDelay = t(e, 0, V, B), this.requestUpdate("longPressDelay", n);
|
|
92
124
|
}
|
|
93
125
|
get isOpen() {
|
|
94
126
|
return this._isOpen;
|
|
95
127
|
}
|
|
96
128
|
connectedCallback() {
|
|
97
|
-
super.connectedCallback(), this._hideMenuItems(), this.addEventListener("contextmenu", this._onContextMenu), this.addEventListener("keydown", this._onKeydown), this.addEventListener("click", this._onMenuClick),
|
|
129
|
+
super.connectedCallback(), this._hideMenuItems(), this.addEventListener("contextmenu", this._onContextMenu), this.addEventListener("keydown", this._onKeydown), this.addEventListener("click", this._onMenuClick), this.addEventListener("pointerdown", this._onPointerDown), this.addEventListener("pointermove", this._onPointerMove), this.addEventListener("pointerup", this._onPointerUp), this.addEventListener("pointercancel", this._onPointerCancel), document.addEventListener("contextmenu", this._onContextMenuOutside), document.addEventListener("wheel", this._onWheel, {
|
|
98
130
|
capture: !0,
|
|
99
131
|
passive: !1
|
|
100
132
|
}), document.addEventListener("touchmove", this._onTouchMove, {
|
|
@@ -103,7 +135,7 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
103
135
|
}), document.addEventListener("keydown", this._onDocumentKeydown);
|
|
104
136
|
}
|
|
105
137
|
disconnectedCallback() {
|
|
106
|
-
super.disconnectedCallback(), this.removeEventListener("contextmenu", this._onContextMenu), this.removeEventListener("keydown", this._onKeydown), this.removeEventListener("click", this._onMenuClick),
|
|
138
|
+
super.disconnectedCallback(), this.removeEventListener("contextmenu", this._onContextMenu), this.removeEventListener("keydown", this._onKeydown), this.removeEventListener("click", this._onMenuClick), this.removeEventListener("pointerdown", this._onPointerDown), this.removeEventListener("pointermove", this._onPointerMove), this.removeEventListener("pointerup", this._onPointerUp), this.removeEventListener("pointercancel", this._onPointerCancel), document.removeEventListener("contextmenu", this._onContextMenuOutside), document.removeEventListener("wheel", this._onWheel, !0), document.removeEventListener("touchmove", this._onTouchMove, !0), document.removeEventListener("keydown", this._onDocumentKeydown), this._contentObserver.disconnect(), this._menuPositionGeneration.invalidate(), this._outsideClickGuard.dispose(), this._hoverBinder.dispose(), this._scrollLock.release(), this._menuHandle?.release(), this._menuHandle = null, this._returnItemsToSlot(), this._menu?.panel.remove(), this._menu = void 0, this._closeSubmenusFrom(0, !0), this._closingSubmenus.restoreAll(), this._closeScrim(), this._isOpen = !1, this._cancelLongPress(), this._longPressOpenedAt = null;
|
|
107
139
|
}
|
|
108
140
|
updated(e) {
|
|
109
141
|
if (!this.isConnected) {
|
|
@@ -112,7 +144,11 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
112
144
|
}
|
|
113
145
|
if (e.has("_isOpen")) {
|
|
114
146
|
if (this._isOpen) {
|
|
115
|
-
if (this._syncScrollLock(), this._menu
|
|
147
|
+
if (this._syncScrollLock(), !this._menu) {
|
|
148
|
+
let e = this._openScrim();
|
|
149
|
+
this._menu = A("context-menu", this, e), this._menu.panel.setAttribute("role", "menu"), this._menu.panel.setAttribute("aria-label", "上下文菜单"), this._menu.panel.addEventListener("click", this._onMenuClick);
|
|
150
|
+
}
|
|
151
|
+
if (!this._menuHandle) {
|
|
116
152
|
this._menuHandle = this._overlay.claim(this._menu.panel);
|
|
117
153
|
for (let e of this._activeSubmenus) this._submenuHandles.delete(e.panel), this._submenuHandles.set(e.panel, this._menuHandle.adopt(e.panel));
|
|
118
154
|
for (let e of this._closingSubmenus.closing()) this._submenuHandles.set(e.panel, this._menuHandle.adopt(e.panel));
|
|
@@ -121,21 +157,23 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
121
157
|
childList: !0,
|
|
122
158
|
subtree: !0
|
|
123
159
|
}), requestAnimationFrame(() => {
|
|
124
|
-
this._isOpen && this._menu && (this._refreshMenu(),
|
|
160
|
+
this._isOpen && this._menu && (this._refreshMenu(), c(this._menu.panel, { isInstant: this._shouldOpenInstantly }), this._shouldOpenInstantly = !0, requestAnimationFrame(() => {
|
|
161
|
+
this._isOpen && this._menu && this._focusFirstItem();
|
|
162
|
+
}));
|
|
125
163
|
});
|
|
126
|
-
} else this._syncScrollLock(!1), this._menuHandle?.release(), this._menuHandle = null, this._contentObserver.disconnect(), this._menuPositionGeneration.invalidate(), this._refreshScheduled = !1, this._closeMenuAfterPresence();
|
|
164
|
+
} else this._syncScrollLock(!1), this._longPressOpenedAt = null, this._menuHandle?.release(), this._menuHandle = null, this._contentObserver.disconnect(), this._menuPositionGeneration.invalidate(), this._refreshScheduled = !1, this._closeMenuAfterPresence();
|
|
127
165
|
this._userOpenChange.consume() && this._dispatchChange(this._isOpen);
|
|
128
166
|
}
|
|
129
167
|
e.has("noScrollLock") && this._syncScrollLock();
|
|
130
168
|
}
|
|
131
169
|
openAt(e, t) {
|
|
132
|
-
this._openAt(e, t, !0);
|
|
170
|
+
this._openAt(e, t, !0, !0);
|
|
133
171
|
}
|
|
134
|
-
_openAt(e, t, n) {
|
|
135
|
-
return !this.disabled && (this._x = e, this._y = t, this._shouldOpenInstantly = n, this._outsideClickGuard.arm(), this._isOpen ? (this._closeSubmenusFrom(0, !0), this._closingSubmenus.restoreAll(), this._menuPositionGeneration.invalidate(), this._scheduleRefresh(), !1) : (this.
|
|
172
|
+
_openAt(e, t, n, r, i = !1) {
|
|
173
|
+
return !this.disabled && (this._x = e, this._y = t, this._shouldOpenInstantly = n, this._suppressInitialFocusVisible = r, this._centerOnPressPoint = i, this._outsideClickGuard.arm(), this._isOpen ? (this._closeSubmenusFrom(0, !0), this._closingSubmenus.restoreAll(), this._menuPositionGeneration.invalidate(), this._scheduleRefresh(), !1) : (this._isOpen = !0, !0));
|
|
136
174
|
}
|
|
137
175
|
close() {
|
|
138
|
-
this._isOpen && (this._isOpen = !1, this._menuPositionGeneration.invalidate());
|
|
176
|
+
this._isOpen && (this._isOpen = !1, this._menuPositionGeneration.invalidate(), this._closeSource === "menu-item" && this._releaseScrimModality(), this._closeSource = "default");
|
|
139
177
|
}
|
|
140
178
|
_scheduleRefresh() {
|
|
141
179
|
!this._refreshScheduled && this._isOpen && (this._refreshScheduled = !0, requestAnimationFrame(() => {
|
|
@@ -148,55 +186,78 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
148
186
|
_positionMenu() {
|
|
149
187
|
let e = this._menu?.panel;
|
|
150
188
|
if (!e) return;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
189
|
+
let t = this._safeAreaBottom();
|
|
190
|
+
e.style.visibility = "hidden", e.style.display = "";
|
|
191
|
+
let n = this._menuPositionGeneration.next(), o = {
|
|
192
|
+
top: K,
|
|
193
|
+
bottom: K + t,
|
|
194
|
+
left: K,
|
|
195
|
+
right: K
|
|
196
|
+
}, s = this._centerOnPressPoint ? ["bottom", "top"] : ["bottom-start", "top-start"];
|
|
197
|
+
r({ getBoundingClientRect: () => new DOMRect(this._x, this._y, 0, 0) }, e, {
|
|
157
198
|
strategy: "fixed",
|
|
158
|
-
placement:
|
|
159
|
-
middleware: [
|
|
160
|
-
|
|
199
|
+
placement: s[0],
|
|
200
|
+
middleware: [i({
|
|
201
|
+
fallbackPlacements: [...s],
|
|
202
|
+
padding: o
|
|
203
|
+
}), a({
|
|
204
|
+
padding: o,
|
|
161
205
|
crossAxis: !0
|
|
162
206
|
})]
|
|
163
|
-
}).then(({ x:
|
|
164
|
-
if (!this._isOpen || this._menu?.panel !== e || !this._menuPositionGeneration.isCurrent(
|
|
165
|
-
let
|
|
166
|
-
this._applyMenuPosition(e,
|
|
207
|
+
}).then(({ x: t, y: r, placement: i, middlewareData: a }) => {
|
|
208
|
+
if (!this._isOpen || this._menu?.panel !== e || !this._menuPositionGeneration.isCurrent(n)) return;
|
|
209
|
+
let o = a.shift?.x ?? 0, s = i.includes("-") ? o < 0 ? "right" : "left" : o === 0 ? "center" : o < 0 ? "right" : "left";
|
|
210
|
+
this._applyMenuPosition(e, t, r, s, i.startsWith("bottom") ? "top" : "bottom");
|
|
167
211
|
});
|
|
168
212
|
}
|
|
169
|
-
|
|
170
|
-
let
|
|
171
|
-
|
|
213
|
+
_safeAreaBottom() {
|
|
214
|
+
let e = Number.parseFloat(getComputedStyle(this).getPropertyValue("--wui-context-menu-safe-area-bottom"));
|
|
215
|
+
return Number.isFinite(e) ? e : 0;
|
|
172
216
|
}
|
|
173
217
|
_applyMenuPosition(e, t, n, r, i) {
|
|
174
|
-
e.style.left = `${t}px`, e.style.top = `${n}px
|
|
175
|
-
let a = r ?? (t < this._x ? "right" : "left"), o = i ?? (n < this._y ? "bottom" : "top");
|
|
176
|
-
e.style.setProperty("--wui-internal-overlay-transform-origin", `${o} ${a}`), e.style.visibility = "";
|
|
218
|
+
e.style.left = `${t}px`, e.style.top = `${n}px`, e.style.setProperty("--wui-internal-overlay-transform-origin", `${i} ${r}`), e.style.visibility = "";
|
|
177
219
|
}
|
|
178
|
-
_focusFirstItem() {
|
|
179
|
-
let
|
|
180
|
-
|
|
220
|
+
_focusFirstItem(e = 0) {
|
|
221
|
+
let t = this._menu?.content.querySelectorAll("web-ui-dropdown-item:not([disabled])")?.[0];
|
|
222
|
+
t && (h(t, { suppressFocusVisible: this._suppressInitialFocusVisible }), !(e + 1 >= G) && (m([this._menu?.panel]) || requestAnimationFrame(() => {
|
|
223
|
+
this._isOpen && this._menu && this._focusFirstItem(e + 1);
|
|
224
|
+
})));
|
|
181
225
|
}
|
|
182
226
|
_setupMenuItems() {
|
|
183
227
|
let e = this._menu;
|
|
184
228
|
if (!e) return;
|
|
185
229
|
let t = e.content;
|
|
186
|
-
|
|
187
|
-
let n =
|
|
188
|
-
|
|
230
|
+
x(this, t, this._menuItemAnchors, z), this._hideMenuItems(), v(t, "context-menu-hidden");
|
|
231
|
+
let n = p(t, z);
|
|
232
|
+
b(this, t, this._menuItemAnchors, z), S(t, n);
|
|
189
233
|
}
|
|
190
234
|
_returnItemsToSlot() {
|
|
191
235
|
let e = this._menu;
|
|
192
|
-
e && (this._closeSubmenusFrom(0, !0), this._closingSubmenus.restoreAll(),
|
|
236
|
+
e && (this._closeSubmenusFrom(0, !0), this._closingSubmenus.restoreAll(), C(this, e.content, this._menuItemAnchors));
|
|
237
|
+
}
|
|
238
|
+
_openScrim() {
|
|
239
|
+
let e = document.createElement("dialog");
|
|
240
|
+
e.className = "wui-context-menu-scrim";
|
|
241
|
+
let t = document.createElement("style");
|
|
242
|
+
return t.textContent = j, e.append(t), e.setAttribute(W, ""), e.addEventListener("click", this._onScrimClick), e.addEventListener("cancel", this._onScrimCancel), this._scrimParent().append(e), e.showModal(), this._scrim = e, e;
|
|
243
|
+
}
|
|
244
|
+
_scrimParent() {
|
|
245
|
+
return u(this)?.getOverlayRoot() ?? document.body;
|
|
246
|
+
}
|
|
247
|
+
_closeScrim() {
|
|
248
|
+
let e = this._scrim;
|
|
249
|
+
e && (this._scrim = void 0, e.open && e.close(), e.remove());
|
|
250
|
+
}
|
|
251
|
+
_releaseScrimModality() {
|
|
252
|
+
let e = this._scrim;
|
|
253
|
+
e?.open && e.close();
|
|
193
254
|
}
|
|
194
255
|
async _closeMenuAfterPresence() {
|
|
195
256
|
let e = this._menu;
|
|
196
|
-
(!e || await
|
|
257
|
+
(!e || await s(e.panel)) && !this._isOpen && this.isConnected && this._menu === e && (this._closeScrim(), this._returnItemsToSlot(), e?.panel.remove(), this._menu = void 0);
|
|
197
258
|
}
|
|
198
259
|
_hideMenuItems() {
|
|
199
|
-
|
|
260
|
+
g(this).forEach((e) => e.setAttribute("slot", "context-menu-hidden")), v(this, "context-menu-hidden");
|
|
200
261
|
}
|
|
201
262
|
_openSubmenu(e, t = !1) {
|
|
202
263
|
if (!this._isOpen || !e.hasAttribute("submenu") || e.hasAttribute("disabled")) return;
|
|
@@ -205,12 +266,12 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
205
266
|
this._closeSubmenusFrom(n);
|
|
206
267
|
let r = this._closingSubmenus.take(e);
|
|
207
268
|
if (r) {
|
|
208
|
-
this._activeSubmenus[n] = r, this._activeSubmenuItems[n] = e, this._menuHandle && this._submenuHandles.set(r.panel, this._menuHandle.adopt(r.panel)), e.setAttribute("active", ""), this._positionSubmenu(e, r),
|
|
269
|
+
this._activeSubmenus[n] = r, this._activeSubmenuItems[n] = e, this._menuHandle && this._submenuHandles.set(r.panel, this._menuHandle.adopt(r.panel)), e.setAttribute("active", ""), this._positionSubmenu(e, r), c(r.panel, { isInstant: t }), this._hoverBinder.bind();
|
|
209
270
|
return;
|
|
210
271
|
}
|
|
211
|
-
if (
|
|
212
|
-
let i =
|
|
213
|
-
i.panel.dataset.level = String(n), i.panel.setAttribute("role", "menu"), i.panel.setAttribute("aria-label", "子菜单"), i.panel.style.visibility = "hidden", i.panel.addEventListener("click", this._onMenuClick),
|
|
272
|
+
if (g(e).length === 0) return;
|
|
273
|
+
let i = A("context-submenu", this, this._scrim);
|
|
274
|
+
i.panel.dataset.level = String(n), i.panel.setAttribute("role", "menu"), i.panel.setAttribute("aria-label", "子菜单"), i.panel.style.visibility = "hidden", i.panel.addEventListener("click", this._onMenuClick), y(e, i.content), this._activeSubmenus[n] = i, this._activeSubmenuItems[n] = e, this._menuHandle && this._submenuHandles.set(i.panel, this._menuHandle.adopt(i.panel)), e.setAttribute("active", ""), this._positionSubmenu(e, i), c(i.panel, { isInstant: t }), this._hoverBinder.bind();
|
|
214
275
|
}
|
|
215
276
|
_closeSubmenusFrom(e, t = !1) {
|
|
216
277
|
for (let n = this._activeSubmenus.length - 1; n >= e; n--) {
|
|
@@ -220,7 +281,7 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
220
281
|
this._activeSubmenus.length = e, this._activeSubmenuItems.length = e;
|
|
221
282
|
}
|
|
222
283
|
_restoreSubmenuItems(e, t) {
|
|
223
|
-
t && (
|
|
284
|
+
t && (y(e.content, t), v(t, "context-menu-hidden"));
|
|
224
285
|
}
|
|
225
286
|
_getItemLevel(e) {
|
|
226
287
|
if (this._menu?.panel.contains(e)) return 0;
|
|
@@ -229,38 +290,45 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
229
290
|
}
|
|
230
291
|
_positionSubmenu(e, t) {
|
|
231
292
|
if (t.panel.parentElement instanceof HTMLDialogElement && t.panel.parentElement.open) {
|
|
232
|
-
let
|
|
233
|
-
this._submenuPositionEpochs.set(t.panel,
|
|
293
|
+
let n = e.getBoundingClientRect().right + t.panel.getBoundingClientRect().width + 8 <= window.innerWidth, i = (this._submenuPositionEpochs.get(t.panel) ?? 0) + 1;
|
|
294
|
+
this._submenuPositionEpochs.set(t.panel, i), r(e, t.panel, {
|
|
234
295
|
strategy: "fixed",
|
|
235
|
-
placement:
|
|
236
|
-
middleware: [
|
|
296
|
+
placement: n ? "right-start" : "left-start",
|
|
297
|
+
middleware: [a({
|
|
237
298
|
padding: 8,
|
|
238
299
|
crossAxis: !0
|
|
239
300
|
})]
|
|
240
301
|
}).then(({ x: e, y: n, middlewareData: r }) => {
|
|
241
|
-
if (!this._activeSubmenus.includes(t) ||
|
|
242
|
-
let
|
|
302
|
+
if (!this._activeSubmenus.includes(t) || i !== this._submenuPositionEpochs.get(t.panel)) return;
|
|
303
|
+
let a = r.shift?.x ?? 0, o = r.shift?.y ?? 0, s = a < 0 ? "right" : "left", c = o < 0 ? "bottom" : "top";
|
|
243
304
|
t.panel.style.left = `${e}px`, t.panel.style.top = `${n}px`, t.panel.style.setProperty("--wui-internal-overlay-transform-origin", `${c} ${s}`), t.panel.style.visibility = "";
|
|
244
305
|
});
|
|
245
306
|
return;
|
|
246
307
|
}
|
|
247
|
-
let
|
|
308
|
+
let n = e.getBoundingClientRect(), i = t.panel.getBoundingClientRect(), o = n.right + i.width + 8 <= window.innerWidth, s = o ? n.right : Math.max(8, n.left - i.width), c = Math.min(Math.max(8, n.top), window.innerHeight - i.height - 8);
|
|
248
309
|
t.panel.style.left = `${s}px`, t.panel.style.top = `${c}px`, t.panel.style.setProperty("--wui-internal-overlay-transform-origin", o ? "top left" : "top right"), t.panel.style.visibility = "";
|
|
249
310
|
}
|
|
250
311
|
_dispatchChange(e) {
|
|
251
|
-
|
|
312
|
+
n(this, e);
|
|
313
|
+
}
|
|
314
|
+
_cancelLongPress() {
|
|
315
|
+
this._longPressTimer !== void 0 && (clearTimeout(this._longPressTimer), this._longPressTimer = void 0), this._longPressOrigin = void 0;
|
|
316
|
+
}
|
|
317
|
+
_isLongPressFollowUp() {
|
|
318
|
+
let e = this._longPressOpenedAt;
|
|
319
|
+
return e === null ? !1 : performance.now() - e > U ? (this._longPressOpenedAt = null, !1) : !0;
|
|
252
320
|
}
|
|
253
321
|
_getLevelContainer(e) {
|
|
254
322
|
return e === 0 ? this._menu : this._activeSubmenus[e - 1];
|
|
255
323
|
}
|
|
256
324
|
_getLevelItems(e) {
|
|
257
325
|
let t = this._getLevelContainer(e);
|
|
258
|
-
return t ?
|
|
326
|
+
return t ? g(t.content) : [];
|
|
259
327
|
}
|
|
260
328
|
_closeLastSubmenuOrMenu() {
|
|
261
329
|
if (this._activeSubmenus.length > 0) {
|
|
262
330
|
let e = this._activeSubmenus.length - 1, t = this._activeSubmenuItems[e];
|
|
263
|
-
this._closeSubmenusFrom(e),
|
|
331
|
+
this._closeSubmenusFrom(e), h(t), this._hoverBinder.bind();
|
|
264
332
|
} else this._closeFromUser();
|
|
265
333
|
}
|
|
266
334
|
_preventBackgroundScroll(e) {
|
|
@@ -276,7 +344,7 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
276
344
|
return this._menuHandle?.containsEvent(e) ?? !1;
|
|
277
345
|
}
|
|
278
346
|
render() {
|
|
279
|
-
return
|
|
347
|
+
return P`
|
|
280
348
|
<div class="context-menu-anchor">
|
|
281
349
|
<slot @slotchange=${this._onSlotChange}></slot>
|
|
282
350
|
</div>
|
|
@@ -286,15 +354,22 @@ var P = "wui-context-menu-item", F = class extends O {
|
|
|
286
354
|
this._hideMenuItems(), this._isOpen && this._scheduleRefresh();
|
|
287
355
|
}
|
|
288
356
|
};
|
|
289
|
-
e([
|
|
357
|
+
e([L({
|
|
290
358
|
type: Boolean,
|
|
291
359
|
reflect: !0
|
|
292
|
-
})],
|
|
360
|
+
})], q.prototype, "disabled", void 0), e([L({
|
|
293
361
|
type: Boolean,
|
|
294
362
|
reflect: !0,
|
|
295
363
|
attribute: "no-scroll-lock"
|
|
296
|
-
})],
|
|
364
|
+
})], q.prototype, "noScrollLock", void 0), e([L({
|
|
365
|
+
type: Boolean,
|
|
366
|
+
reflect: !0,
|
|
367
|
+
attribute: "long-press"
|
|
368
|
+
})], q.prototype, "longPress", void 0), e([L({
|
|
369
|
+
type: Number,
|
|
370
|
+
attribute: "long-press-delay"
|
|
371
|
+
})], q.prototype, "longPressDelay", null), e([R()], q.prototype, "_isOpen", void 0), e([R()], q.prototype, "_x", void 0), e([R()], q.prototype, "_y", void 0), q = e([I("web-ui-context-menu")], q);
|
|
297
372
|
//#endregion
|
|
298
|
-
export {
|
|
373
|
+
export { q as WebUiContextMenu };
|
|
299
374
|
|
|
300
375
|
//# sourceMappingURL=index.js.map
|