@greypan/web-ui 2.1.1 → 2.1.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.
- package/README.CN.md +43 -39
- package/README.md +53 -48
- package/dist/assets/menu-portal.js +1 -1
- package/dist/assets/menu-portal.js.map +1 -1
- package/dist/assets/toast-containers.js +1 -1
- package/dist/assets/toast-containers.js.map +1 -1
- package/dist/components/back-top/index.d.ts +3 -1
- package/dist/components/back-top/index.js +16 -12
- package/dist/components/back-top/index.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/context-menu/index.d.ts +3 -4
- package/dist/components/context-menu/index.js +55 -69
- package/dist/components/context-menu/index.js.map +1 -1
- 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 +4 -11
- package/dist/components/dialog/index.js +29 -53
- package/dist/components/dialog/index.js.map +1 -1
- package/dist/components/drawer/index.d.ts +4 -11
- package/dist/components/drawer/index.js +42 -63
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/dropdown/index.d.ts +3 -3
- package/dist/components/dropdown/index.js +70 -78
- package/dist/components/dropdown/index.js.map +1 -1
- package/dist/components/dropdown/style.js +1 -1
- package/dist/components/dropdown/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/option/style.js +1 -1
- package/dist/components/option/style.js.map +1 -1
- package/dist/components/popover/index.d.ts +2 -5
- package/dist/components/popover/index.js +47 -70
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/select/index.d.ts +4 -7
- package/dist/components/select/index.js +64 -74
- 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/switch/style.js +1 -1
- package/dist/components/switch/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/manager.js +1 -1
- package/dist/components/toast/manager.js.map +1 -1
- package/dist/components/toast/toast.d.ts +1 -1
- package/dist/components/toast/toast.js +26 -26
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/tooltip/index.d.ts +3 -5
- package/dist/components/tooltip/index.js +61 -70
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/icons/generated/ooui-close.d.ts +6 -0
- package/dist/icons/generated/ooui-close.js +10 -0
- package/dist/icons/generated/ooui-close.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +2 -1
- package/dist/shared/menu-portal/menu-portal.js +8 -1
- package/dist/shared/menu-portal/menu-portal.js.map +1 -1
- package/dist/shared/menu-portal/menu-tree.js +29 -0
- package/dist/shared/menu-portal/menu-tree.js.map +1 -0
- package/dist/shared/overlay/anchored-panel.js +49 -0
- package/dist/shared/overlay/anchored-panel.js.map +1 -0
- package/dist/shared/overlay/native-dialog-presence.js +45 -0
- package/dist/shared/overlay/native-dialog-presence.js.map +1 -0
- package/dist/shared/overlay/overlay.js +5 -2
- package/dist/shared/overlay/overlay.js.map +1 -1
- package/dist/shared/overlay/portal.js +3 -3
- package/dist/shared/overlay/portal.js.map +1 -1
- package/dist/shared/overlay/presence.js +1 -1
- package/dist/shared/overlay/presence.js.map +1 -1
- package/dist/shared/scroll-lock/scroll-lock.js +15 -1
- package/dist/shared/scroll-lock/scroll-lock.js.map +1 -1
- package/dist/types/vue.d.ts +2 -1
- package/package.json +1 -1
- package/dist/shared/property-converters/boolean-with-false-string.js +0 -9
- package/dist/shared/property-converters/boolean-with-false-string.js.map +0 -1
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
|
-
import t from "../../assets/glass.js";
|
|
3
|
-
import { booleanWithFalseString as n } from "../../shared/property-converters/boolean-with-false-string.js";
|
|
4
2
|
import "../dropdown-divider/index.js";
|
|
5
3
|
import "../dropdown-header/index.js";
|
|
6
4
|
import "../dropdown-item/index.js";
|
|
7
|
-
import { createMenuPortalOverlay as
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
5
|
+
import { createMenuPortalOverlay as t } from "../../shared/menu-portal/menu-portal.js";
|
|
6
|
+
import { findFocusedMenuItem as n, focusMenuItem as r, getEnabledMenuItems as i, getMenuChildren as a, getMenuItemFromEvent as o, hideNestedMenuChildren as s, moveMenuChildren as c } from "../../shared/menu-portal/menu-tree.js";
|
|
7
|
+
import { hideOverlayPresence as l, showOverlayPresence as u } from "../../shared/overlay/presence.js";
|
|
8
|
+
import { createScrollLockLease as d } from "../../shared/scroll-lock/scroll-lock.js";
|
|
9
|
+
import f from "./style.js";
|
|
10
|
+
import { LitElement as p, html as m, unsafeCSS as h } from "lit";
|
|
11
|
+
import { customElement as g, property as _, state as v } from "lit/decorators.js";
|
|
13
12
|
//#region src/components/context-menu/index.ts
|
|
14
|
-
var
|
|
13
|
+
var y = class extends p {
|
|
15
14
|
constructor(...e) {
|
|
16
|
-
super(...e), this.disabled = !1, this.
|
|
15
|
+
super(...e), this.disabled = !1, this.noScrollLock = !1, this._isOpen = !1, this._x = 0, this._y = 0, this._activeSubmenus = [], this._activeSubmenuItems = [], this._closingSubmenus = /* @__PURE__ */ new Map(), this._ignoreOutsideClick = !1, this._hoverCleanupFns = [], this._scrollLock = d(), this._shouldOpenInstantly = !0, this._onContextMenu = (e) => {
|
|
17
16
|
this.disabled || (e.preventDefault(), this._restoreFocusTarget = e.target instanceof HTMLElement ? e.target : void 0, this._openAt(e.clientX, e.clientY, !1));
|
|
18
17
|
}, this._onContextMenuOutside = (e) => {
|
|
19
18
|
this._isOpen && !this._isInsideShadowRoot(e) && this.close();
|
|
@@ -30,7 +29,7 @@ var h = class extends l {
|
|
|
30
29
|
}, this._onClickOutside = (e) => {
|
|
31
30
|
!this._isOpen || this._ignoreOutsideClick || this._isInsideShadowRoot(e) || this.close();
|
|
32
31
|
}, this._onMenuClick = (e) => {
|
|
33
|
-
let t =
|
|
32
|
+
let t = o(e);
|
|
34
33
|
if (!(!t || t.hasAttribute("disabled"))) {
|
|
35
34
|
if (t.hasAttribute("submenu")) {
|
|
36
35
|
this._openSubmenu(t);
|
|
@@ -86,7 +85,7 @@ var h = class extends l {
|
|
|
86
85
|
};
|
|
87
86
|
}
|
|
88
87
|
static {
|
|
89
|
-
this.styles =
|
|
88
|
+
this.styles = h(f);
|
|
90
89
|
}
|
|
91
90
|
get isOpen() {
|
|
92
91
|
return this._isOpen;
|
|
@@ -101,16 +100,16 @@ var h = class extends l {
|
|
|
101
100
|
}), document.addEventListener("keydown", this._onDocumentKeydown);
|
|
102
101
|
}
|
|
103
102
|
disconnectedCallback() {
|
|
104
|
-
super.disconnectedCallback(), this.removeEventListener("contextmenu", this._onContextMenu), this.removeEventListener("keydown", this._onKeydown), this.removeEventListener("click", this._onMenuClick), document.removeEventListener("click", this._onClickOutside), document.removeEventListener("contextmenu", this._onContextMenuOutside), document.removeEventListener("wheel", this._onWheel, !0), document.removeEventListener("touchmove", this._onTouchMove, !0), document.removeEventListener("keydown", this._onDocumentKeydown), clearTimeout(this._submenuTimer), clearTimeout(this._ignoreOutsideClickTimer), this._hoverCleanupFns.forEach((e) => e()), this.
|
|
103
|
+
super.disconnectedCallback(), this.removeEventListener("contextmenu", this._onContextMenu), this.removeEventListener("keydown", this._onKeydown), this.removeEventListener("click", this._onMenuClick), document.removeEventListener("click", this._onClickOutside), document.removeEventListener("contextmenu", this._onContextMenuOutside), document.removeEventListener("wheel", this._onWheel, !0), document.removeEventListener("touchmove", this._onTouchMove, !0), document.removeEventListener("keydown", this._onDocumentKeydown), clearTimeout(this._submenuTimer), clearTimeout(this._ignoreOutsideClickTimer), this._hoverCleanupFns.forEach((e) => e()), this._scrollLock.release(), this._returnItemsToSlot(), this._menu?.panel.remove(), this._menu = void 0, this._closeSubmenusFrom(0, !0), this._restoreClosingSubmenus();
|
|
105
104
|
}
|
|
106
105
|
updated(e) {
|
|
107
106
|
if (!this.isConnected) {
|
|
108
107
|
this._syncScrollLock(!1);
|
|
109
108
|
return;
|
|
110
109
|
}
|
|
111
|
-
e.has("_isOpen") && (this._isOpen ? (this._syncScrollLock(), this._menu || (this._menu =
|
|
112
|
-
!this._isOpen || !this._menu || (this._setupMenuItems(), this._positionMenu(),
|
|
113
|
-
})) : (this._syncScrollLock(!1), this._closeMenuAfterPresence()), this._dispatchChange(this._isOpen)), e.has("
|
|
110
|
+
e.has("_isOpen") && (this._isOpen ? (this._syncScrollLock(), this._menu || (this._menu = t("context-menu", this), this._menu.panel.setAttribute("role", "menu"), this._menu.panel.setAttribute("aria-label", "上下文菜单"), this._menu.panel.addEventListener("click", this._onMenuClick)), requestAnimationFrame(() => {
|
|
111
|
+
!this._isOpen || !this._menu || (this._setupMenuItems(), this._positionMenu(), u(this._menu.panel, { isInstant: this._shouldOpenInstantly }), this._shouldOpenInstantly = !0, this._focusFirstItem(), this._bindLevelHovers());
|
|
112
|
+
})) : (this._syncScrollLock(!1), this._closeMenuAfterPresence()), this._dispatchChange(this._isOpen)), e.has("noScrollLock") && this._syncScrollLock();
|
|
114
113
|
}
|
|
115
114
|
openAt(e, t) {
|
|
116
115
|
this._openAt(e, t, !0);
|
|
@@ -128,7 +127,7 @@ var h = class extends l {
|
|
|
128
127
|
this._isOpen &&= !1;
|
|
129
128
|
}
|
|
130
129
|
_positionMenu() {
|
|
131
|
-
let e = this._menu;
|
|
130
|
+
let e = this._menu?.panel;
|
|
132
131
|
if (!e) return;
|
|
133
132
|
e.style.visibility = "hidden", e.style.display = "";
|
|
134
133
|
let { width: t, height: n } = e.getBoundingClientRect(), r = window.innerWidth, i = window.innerHeight, a = this._x, o = this._y;
|
|
@@ -137,75 +136,65 @@ var h = class extends l {
|
|
|
137
136
|
e.style.setProperty("--wui-overlay-transform-origin", `${c} ${s}`), e.style.visibility = "";
|
|
138
137
|
}
|
|
139
138
|
_focusFirstItem() {
|
|
140
|
-
let e = this._menu?.querySelectorAll("web-ui-dropdown-item:not([disabled])")?.[0];
|
|
139
|
+
let e = this._menu?.content.querySelectorAll("web-ui-dropdown-item:not([disabled])")?.[0];
|
|
141
140
|
e && this._focusMenuItem(e);
|
|
142
141
|
}
|
|
143
142
|
_setupMenuItems() {
|
|
144
143
|
let e = this._menu;
|
|
145
|
-
e && (this._hideMenuItems(),
|
|
146
|
-
t.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header") && e.appendChild(t);
|
|
147
|
-
}));
|
|
144
|
+
e && (this._hideMenuItems(), c(this, e.content));
|
|
148
145
|
}
|
|
149
146
|
_returnItemsToSlot() {
|
|
150
147
|
let e = this._menu;
|
|
151
|
-
e && (this._closeSubmenusFrom(0, !0), this._restoreClosingSubmenus(),
|
|
152
|
-
this.appendChild(e);
|
|
153
|
-
}));
|
|
148
|
+
e && (this._closeSubmenusFrom(0, !0), this._restoreClosingSubmenus(), c(e.content, this));
|
|
154
149
|
}
|
|
155
150
|
async _closeMenuAfterPresence() {
|
|
156
151
|
let e = this._menu;
|
|
157
|
-
e && !await
|
|
152
|
+
e && !await l(e.panel) || this._isOpen || !this.isConnected || this._menu !== e || (this._returnItemsToSlot(), e?.panel.remove(), this._menu = void 0, this._restoreFocusTarget?.focus(), this._restoreFocusTarget = void 0);
|
|
158
153
|
}
|
|
159
154
|
_hideMenuItems() {
|
|
160
|
-
|
|
161
|
-
e.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header") && e.setAttribute("slot", "context-menu-hidden");
|
|
162
|
-
}), this.querySelectorAll("web-ui-dropdown-item[submenu]").forEach((e) => {
|
|
163
|
-
Array.from(e.children).forEach((e) => {
|
|
164
|
-
e.matches("web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header") && e.setAttribute("slot", "context-menu-hidden");
|
|
165
|
-
});
|
|
166
|
-
});
|
|
155
|
+
a(this).forEach((e) => e.setAttribute("slot", "context-menu-hidden")), s(this, "context-menu-hidden");
|
|
167
156
|
}
|
|
168
|
-
_openSubmenu(e,
|
|
157
|
+
_openSubmenu(e, n = !1) {
|
|
169
158
|
if (!this._isOpen || !e.hasAttribute("submenu") || e.hasAttribute("disabled")) return;
|
|
170
|
-
let
|
|
171
|
-
if (
|
|
172
|
-
this._closeSubmenusFrom(
|
|
159
|
+
let r = this._getItemLevel(e);
|
|
160
|
+
if (r === -1 || this._activeSubmenuItems[r] === e) return;
|
|
161
|
+
this._closeSubmenusFrom(r);
|
|
173
162
|
let i = this._closingSubmenus.get(e);
|
|
174
163
|
if (i) {
|
|
175
|
-
this._closingSubmenus.delete(e), this._activeSubmenus[
|
|
164
|
+
this._closingSubmenus.delete(e), this._activeSubmenus[r] = i, this._activeSubmenuItems[r] = e, e.setAttribute("active", ""), this._positionSubmenu(e, i), u(i.panel, { isInstant: n }), this._bindLevelHovers();
|
|
176
165
|
return;
|
|
177
166
|
}
|
|
178
|
-
let o =
|
|
167
|
+
let o = a(e);
|
|
179
168
|
if (o.length === 0) return;
|
|
180
|
-
let s =
|
|
181
|
-
s.dataset.level = String(
|
|
169
|
+
let s = t("context-submenu", this);
|
|
170
|
+
s.panel.dataset.level = String(r), s.panel.setAttribute("role", "menu"), s.panel.setAttribute("aria-label", "子菜单"), s.panel.style.visibility = "hidden", s.panel.addEventListener("click", this._onMenuClick), s.content.append(...o), this._activeSubmenus[r] = s, this._activeSubmenuItems[r] = e, e.setAttribute("active", ""), this._positionSubmenu(e, s), u(s.panel, { isInstant: n }), this._bindLevelHovers();
|
|
182
171
|
}
|
|
183
172
|
_closeSubmenusFrom(e, t = !1) {
|
|
184
173
|
for (let n = this._activeSubmenus.length - 1; n >= e; n--) {
|
|
185
174
|
let e = this._activeSubmenus[n], r = this._activeSubmenuItems[n];
|
|
186
|
-
r?.removeAttribute("active"), !r || t ? (this._restoreSubmenuItems(e, r), e.remove()) : (this._closingSubmenus.set(r, e), this._closeSubmenuAfterPresence(e, r));
|
|
175
|
+
r?.removeAttribute("active"), !r || t ? (this._restoreSubmenuItems(e, r), e.panel.remove()) : (this._closingSubmenus.set(r, e), this._closeSubmenuAfterPresence(e, r));
|
|
187
176
|
}
|
|
188
177
|
this._activeSubmenus.length = e, this._activeSubmenuItems.length = e;
|
|
189
178
|
}
|
|
190
179
|
async _closeSubmenuAfterPresence(e, t) {
|
|
191
|
-
await
|
|
180
|
+
await l(e.panel) && this._closingSubmenus.get(t) === e && (this._closingSubmenus.delete(t), this._restoreSubmenuItems(e, t), e.panel.remove());
|
|
192
181
|
}
|
|
193
182
|
_restoreSubmenuItems(e, t) {
|
|
194
|
-
|
|
183
|
+
t && c(e.content, t);
|
|
195
184
|
}
|
|
196
185
|
_restoreClosingSubmenus() {
|
|
197
186
|
this._closingSubmenus.forEach((e, t) => {
|
|
198
|
-
this._restoreSubmenuItems(e, t), e.remove();
|
|
187
|
+
this._restoreSubmenuItems(e, t), e.panel.remove();
|
|
199
188
|
}), this._closingSubmenus.clear();
|
|
200
189
|
}
|
|
201
190
|
_getItemLevel(e) {
|
|
202
|
-
if (this._menu?.contains(e)) return 0;
|
|
203
|
-
let t = this._activeSubmenus.findIndex((t) => t.contains(e));
|
|
191
|
+
if (this._menu?.panel.contains(e)) return 0;
|
|
192
|
+
let t = this._activeSubmenus.findIndex((t) => t.panel.contains(e));
|
|
204
193
|
return t === -1 ? -1 : t + 1;
|
|
205
194
|
}
|
|
206
195
|
_positionSubmenu(e, t) {
|
|
207
|
-
let n = e.getBoundingClientRect(), r = t.getBoundingClientRect(), i = n.right + r.width + 8 <= window.innerWidth, a = i ? n.right : Math.max(8, n.left - r.width), o = Math.min(Math.max(8, n.top), window.innerHeight - r.height - 8);
|
|
208
|
-
t.style.left = `${a}px`, t.style.top = `${o}px`, t.style.setProperty("--wui-overlay-transform-origin", i ? "top left" : "top right"), t.style.visibility = "";
|
|
196
|
+
let n = e.getBoundingClientRect(), r = t.panel.getBoundingClientRect(), i = n.right + r.width + 8 <= window.innerWidth, a = i ? n.right : Math.max(8, n.left - r.width), o = Math.min(Math.max(8, n.top), window.innerHeight - r.height - 8);
|
|
197
|
+
t.panel.style.left = `${a}px`, t.panel.style.top = `${o}px`, t.panel.style.setProperty("--wui-overlay-transform-origin", i ? "top left" : "top right"), t.panel.style.visibility = "";
|
|
209
198
|
}
|
|
210
199
|
_dispatchChange(e) {
|
|
211
200
|
this.dispatchEvent(new CustomEvent("open-change", {
|
|
@@ -215,15 +204,12 @@ var h = class extends l {
|
|
|
215
204
|
}));
|
|
216
205
|
}
|
|
217
206
|
_isInsideShadowRoot(e) {
|
|
218
|
-
for (let t of e.composedPath()) if (t === this || t === this.shadowRoot || t instanceof Node && t.getRootNode() === this.shadowRoot || t instanceof Node && (this._menu?.contains(t) || this._activeSubmenus.some((e) => e.contains(t)))) return !0;
|
|
207
|
+
for (let t of e.composedPath()) if (t === this || t === this.shadowRoot || t instanceof Node && t.getRootNode() === this.shadowRoot || t instanceof Node && (this._menu?.panel.contains(t) || this._activeSubmenus.some((e) => e.panel.contains(t)))) return !0;
|
|
219
208
|
return !1;
|
|
220
209
|
}
|
|
221
|
-
_getDropdownItemFromEvent(e) {
|
|
222
|
-
return e.composedPath().find((e) => e instanceof HTMLElement && e.matches("web-ui-dropdown-item")) ?? null;
|
|
223
|
-
}
|
|
224
210
|
_getLevelItems(e) {
|
|
225
|
-
let t = e === 0 ? this._menu : this._activeSubmenus[e - 1];
|
|
226
|
-
return t ?
|
|
211
|
+
let t = e === 0 ? this._menu?.content : this._activeSubmenus[e - 1]?.content;
|
|
212
|
+
return t ? a(t) : [];
|
|
227
213
|
}
|
|
228
214
|
_bindLevelHovers() {
|
|
229
215
|
this._hoverCleanupFns.forEach((e) => e()), this._hoverCleanupFns.length = 0;
|
|
@@ -247,48 +233,48 @@ var h = class extends l {
|
|
|
247
233
|
} else this.close();
|
|
248
234
|
}
|
|
249
235
|
_preventBackgroundScroll(e) {
|
|
250
|
-
!this._isOpen ||
|
|
236
|
+
!this._isOpen || this.noScrollLock || this._isMenuPanelEvent(e) || e.preventDefault();
|
|
251
237
|
}
|
|
252
238
|
_syncScrollLock(e = this._isOpen) {
|
|
253
|
-
|
|
254
|
-
t !== this._hasScrollLock && (t ? o() : s(), this._hasScrollLock = t);
|
|
239
|
+
this._scrollLock.sync(e && !this.noScrollLock);
|
|
255
240
|
}
|
|
256
241
|
_getEnabledLevelItems(e) {
|
|
257
|
-
|
|
242
|
+
let t = e === 0 ? this._menu?.content : this._activeSubmenus[e - 1]?.content;
|
|
243
|
+
return t ? i(t) : [];
|
|
258
244
|
}
|
|
259
245
|
_getFocusedItem() {
|
|
260
|
-
return [this._menu, ...this._activeSubmenus
|
|
246
|
+
return n([this._menu?.content, ...this._activeSubmenus.map((e) => e.content)]);
|
|
261
247
|
}
|
|
262
248
|
_getFocusedLevel() {
|
|
263
249
|
let e = this._getFocusedItem();
|
|
264
250
|
if (!e) return;
|
|
265
|
-
if (this._menu?.contains(e)) return 0;
|
|
266
|
-
let t = this._activeSubmenus.findIndex((t) => t.contains(e));
|
|
251
|
+
if (this._menu?.panel.contains(e)) return 0;
|
|
252
|
+
let t = this._activeSubmenus.findIndex((t) => t.panel.contains(e));
|
|
267
253
|
return t < 0 ? void 0 : t + 1;
|
|
268
254
|
}
|
|
269
255
|
_focusMenuItem(e) {
|
|
270
|
-
|
|
256
|
+
r(e);
|
|
271
257
|
}
|
|
272
258
|
_isMenuPanelEvent(e) {
|
|
273
259
|
return e.composedPath().some((e) => e instanceof HTMLElement && (e.classList.contains("context-menu") || e.classList.contains("context-submenu")));
|
|
274
260
|
}
|
|
275
261
|
render() {
|
|
276
|
-
return
|
|
262
|
+
return m`
|
|
277
263
|
<div class="context-menu-anchor">
|
|
278
264
|
<slot @slotchange=${this._hideMenuItems}></slot>
|
|
279
265
|
</div>
|
|
280
266
|
`;
|
|
281
267
|
}
|
|
282
268
|
};
|
|
283
|
-
e([
|
|
269
|
+
e([_({
|
|
284
270
|
type: Boolean,
|
|
285
271
|
reflect: !0
|
|
286
|
-
})],
|
|
272
|
+
})], y.prototype, "disabled", void 0), e([_({
|
|
273
|
+
type: Boolean,
|
|
287
274
|
reflect: !0,
|
|
288
|
-
attribute: "
|
|
289
|
-
|
|
290
|
-
})], h.prototype, "lockScroll", void 0), e([m()], h.prototype, "_isOpen", void 0), e([m()], h.prototype, "_x", void 0), e([m()], h.prototype, "_y", void 0), h = e([f("web-ui-context-menu")], h);
|
|
275
|
+
attribute: "no-scroll-lock"
|
|
276
|
+
})], y.prototype, "noScrollLock", void 0), e([v()], y.prototype, "_isOpen", void 0), e([v()], y.prototype, "_x", void 0), e([v()], y.prototype, "_y", void 0), y = e([g("web-ui-context-menu")], y);
|
|
291
277
|
//#endregion
|
|
292
|
-
export {
|
|
278
|
+
export { y as WebUiContextMenu };
|
|
293
279
|
|
|
294
280
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/context-menu/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport '@/components/dropdown-divider'\nimport '@/components/dropdown-header'\nimport '@/components/dropdown-item'\nimport glass from '@/assets/glass.css?inline'\nimport { createMenuPortalOverlay } from '@/shared/menu-portal/menu-portal'\nimport { hideOverlayPresence, showOverlayPresence } from '@/shared/overlay/presence'\nimport { booleanWithFalseString } from '@/shared/property-converters/boolean-with-false-string'\nimport { lockScroll, unlockScroll } from '@/shared/scroll-lock/scroll-lock'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-context-menu')\nexport class WebUiContextMenu extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ reflect: true, attribute: 'lock-scroll', converter: booleanWithFalseString }) lockScroll = true\n\n @state() private _isOpen = false\n @state() private _x = 0\n @state() private _y = 0\n\n private _activeSubmenus: HTMLElement[] = []\n private _activeSubmenuItems: HTMLElement[] = []\n private readonly _closingSubmenus = new Map<HTMLElement, HTMLElement>()\n private _submenuTimer?: ReturnType<typeof setTimeout>\n private _ignoreOutsideClick = false\n private _ignoreOutsideClickTimer?: ReturnType<typeof setTimeout>\n private _hoverCleanupFns: (() => void)[] = []\n private _menu?: HTMLElement\n private _hasScrollLock = false\n private _restoreFocusTarget?: HTMLElement\n private _shouldOpenInstantly = true\n\n /** 当前菜单是否打开 */\n get isOpen(): boolean {\n return this._isOpen\n }\n\n override connectedCallback() {\n super.connectedCallback()\n this._hideMenuItems()\n this.addEventListener('contextmenu', this._onContextMenu)\n this.addEventListener('keydown', this._onKeydown)\n this.addEventListener('click', this._onMenuClick)\n document.addEventListener('click', this._onClickOutside)\n document.addEventListener('contextmenu', this._onContextMenuOutside)\n document.addEventListener('wheel', this._onWheel, { capture: true, passive: false })\n document.addEventListener('touchmove', this._onTouchMove, { capture: true, passive: false })\n document.addEventListener('keydown', this._onDocumentKeydown)\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('contextmenu', this._onContextMenu)\n this.removeEventListener('keydown', this._onKeydown)\n this.removeEventListener('click', this._onMenuClick)\n document.removeEventListener('click', this._onClickOutside)\n document.removeEventListener('contextmenu', this._onContextMenuOutside)\n document.removeEventListener('wheel', this._onWheel, true)\n document.removeEventListener('touchmove', this._onTouchMove, true)\n document.removeEventListener('keydown', this._onDocumentKeydown)\n clearTimeout(this._submenuTimer)\n clearTimeout(this._ignoreOutsideClickTimer)\n this._hoverCleanupFns.forEach(cleanup => cleanup())\n if (this._hasScrollLock) {\n unlockScroll()\n this._hasScrollLock = false\n }\n this._returnItemsToSlot()\n this._menu?.remove()\n this._menu = undefined\n this._closeSubmenusFrom(0, true)\n this._restoreClosingSubmenus()\n }\n\n protected override updated(changed: Map<string, unknown>) {\n // Lit 的已排队更新可在卸载后执行,不能让已失效实例重新获取全局滚动锁。\n if (!this.isConnected) {\n this._syncScrollLock(false)\n return\n }\n\n if (changed.has('_isOpen')) {\n if (this._isOpen) {\n this._syncScrollLock()\n if (!this._menu) {\n this._menu = createMenuPortalOverlay('context-menu', this)\n this._menu.setAttribute('role', 'menu')\n this._menu.setAttribute('aria-label', '上下文菜单')\n this._menu.addEventListener('click', this._onMenuClick)\n }\n requestAnimationFrame(() => {\n if (!this._isOpen || !this._menu) return\n this._setupMenuItems()\n this._positionMenu()\n showOverlayPresence(this._menu, { isInstant: this._shouldOpenInstantly })\n this._shouldOpenInstantly = true\n this._focusFirstItem()\n this._bindLevelHovers()\n })\n } else {\n this._syncScrollLock(false)\n void this._closeMenuAfterPresence()\n }\n this._dispatchChange(this._isOpen)\n }\n if (changed.has('lockScroll')) this._syncScrollLock()\n }\n\n /**\n * 在指定视口坐标打开菜单。\n * @param x 水平坐标(px)。\n * @param y 垂直坐标(px)。\n * @returns 无返回值;打开后派发 `open-change` 事件。\n */\n openAt(x: number, y: number) {\n this._openAt(x, y, true)\n }\n\n private _openAt(x: number, y: number, isInstant: boolean) {\n if (this.disabled) return\n this._x = x\n this._y = y\n this._shouldOpenInstantly = isInstant\n this._ignoreCurrentOutsideClick()\n if (this._isOpen) {\n requestAnimationFrame(() => this._positionMenu())\n return\n }\n this._restoreFocusTarget ??= document.activeElement instanceof HTMLElement ? document.activeElement : undefined\n this._isOpen = true\n }\n\n /**\n * 关闭菜单。\n * @returns 无返回值;关闭后派发 `open-change` 事件。\n */\n close() {\n if (!this._isOpen) return\n this._isOpen = false\n }\n\n private _positionMenu() {\n const menu = this._menu\n if (!menu) return\n\n menu.style.visibility = 'hidden'\n menu.style.display = ''\n\n const { width, height } = menu.getBoundingClientRect()\n const vw = window.innerWidth\n const vh = window.innerHeight\n\n let x = this._x\n let y = this._y\n\n if (x + width > vw) x = vw - width - 8\n if (y + height > vh) y = vh - height - 8\n if (x < 0) x = 8\n if (y < 0) y = 8\n\n menu.style.left = `${x}px`\n menu.style.top = `${y}px`\n const horizontalOrigin = x < this._x ? 'right' : 'left'\n const verticalOrigin = y < this._y ? 'bottom' : 'top'\n menu.style.setProperty('--wui-overlay-transform-origin', `${verticalOrigin} ${horizontalOrigin}`)\n menu.style.visibility = ''\n }\n\n private _focusFirstItem() {\n const menu = this._menu\n const items = menu?.querySelectorAll<HTMLElement>('web-ui-dropdown-item:not([disabled])')\n const firstItem = items?.[0]\n if (firstItem) {\n this._focusMenuItem(firstItem)\n }\n }\n\n private _setupMenuItems() {\n const menu = this._menu\n if (!menu) return\n\n this._hideMenuItems()\n Array.from(this.children).forEach(child => {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n menu.appendChild(child)\n }\n })\n }\n\n private _returnItemsToSlot() {\n const menu = this._menu\n if (!menu) return\n\n this._closeSubmenusFrom(0, true)\n this._restoreClosingSubmenus()\n Array.from(menu.children).forEach(child => {\n this.appendChild(child)\n })\n }\n\n private async _closeMenuAfterPresence() {\n const menu = this._menu\n if (menu && !(await hideOverlayPresence(menu))) return\n if (this._isOpen || !this.isConnected || this._menu !== menu) return\n\n this._returnItemsToSlot()\n menu?.remove()\n this._menu = undefined\n this._restoreFocusTarget?.focus()\n this._restoreFocusTarget = undefined\n }\n\n private _hideMenuItems() {\n Array.from(this.children).forEach(child => {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n child.setAttribute('slot', 'context-menu-hidden')\n }\n })\n this.querySelectorAll<HTMLElement>('web-ui-dropdown-item[submenu]').forEach(item => {\n Array.from(item.children).forEach(child => {\n if (child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')) {\n child.setAttribute('slot', 'context-menu-hidden')\n }\n })\n })\n }\n\n private _openSubmenu(item: HTMLElement, isInstant = false) {\n if (!this._isOpen || !item.hasAttribute('submenu') || item.hasAttribute('disabled')) return\n\n const level = this._getItemLevel(item)\n if (level === -1 || this._activeSubmenuItems[level] === item) return\n\n this._closeSubmenusFrom(level)\n const closingSubmenu = this._closingSubmenus.get(item)\n if (closingSubmenu) {\n this._closingSubmenus.delete(item)\n this._activeSubmenus[level] = closingSubmenu\n this._activeSubmenuItems[level] = item\n item.setAttribute('active', '')\n this._positionSubmenu(item, closingSubmenu)\n showOverlayPresence(closingSubmenu, { isInstant })\n this._bindLevelHovers()\n return\n }\n const children = Array.from(item.children).filter(child =>\n child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')\n )\n if (children.length === 0) return\n\n const submenu = createMenuPortalOverlay('context-submenu', this)\n submenu.dataset.level = String(level)\n submenu.setAttribute('role', 'menu')\n submenu.setAttribute('aria-label', '子菜单')\n submenu.style.visibility = 'hidden'\n submenu.addEventListener('click', this._onMenuClick)\n children.forEach(child => submenu.appendChild(child))\n\n this._activeSubmenus[level] = submenu\n this._activeSubmenuItems[level] = item\n item.setAttribute('active', '')\n this._positionSubmenu(item, submenu)\n showOverlayPresence(submenu, { isInstant })\n this._bindLevelHovers()\n }\n\n private _closeSubmenusFrom(level: number, isInstant = false) {\n for (let index = this._activeSubmenus.length - 1; index >= level; index--) {\n const submenu = this._activeSubmenus[index]\n const item = this._activeSubmenuItems[index]\n item?.removeAttribute('active')\n if (!item || isInstant) {\n this._restoreSubmenuItems(submenu, item)\n submenu.remove()\n } else {\n this._closingSubmenus.set(item, submenu)\n void this._closeSubmenuAfterPresence(submenu, item)\n }\n }\n this._activeSubmenus.length = level\n this._activeSubmenuItems.length = level\n }\n\n private async _closeSubmenuAfterPresence(submenu: HTMLElement, item: HTMLElement) {\n if (!(await hideOverlayPresence(submenu))) return\n if (this._closingSubmenus.get(item) !== submenu) return\n\n this._closingSubmenus.delete(item)\n this._restoreSubmenuItems(submenu, item)\n submenu.remove()\n }\n\n private _restoreSubmenuItems(submenu: HTMLElement, item?: HTMLElement) {\n Array.from(submenu.children).forEach(child => item?.appendChild(child))\n }\n\n private _restoreClosingSubmenus() {\n this._closingSubmenus.forEach((submenu, item) => {\n this._restoreSubmenuItems(submenu, item)\n submenu.remove()\n })\n this._closingSubmenus.clear()\n }\n\n private _getItemLevel(item: HTMLElement): number {\n const menu = this._menu\n if (menu?.contains(item)) return 0\n const parentLevel = this._activeSubmenus.findIndex(submenu => submenu.contains(item))\n return parentLevel === -1 ? -1 : parentLevel + 1\n }\n\n private _positionSubmenu(item: HTMLElement, submenu: HTMLElement) {\n const itemRect = item.getBoundingClientRect()\n const submenuRect = submenu.getBoundingClientRect()\n const padding = 8\n const canOpenRight = itemRect.right + submenuRect.width + padding <= window.innerWidth\n const left = canOpenRight ? itemRect.right : Math.max(padding, itemRect.left - submenuRect.width)\n const top = Math.min(Math.max(padding, itemRect.top), window.innerHeight - submenuRect.height - padding)\n\n submenu.style.left = `${left}px`\n submenu.style.top = `${top}px`\n submenu.style.setProperty('--wui-overlay-transform-origin', canOpenRight ? 'top left' : 'top right')\n submenu.style.visibility = ''\n }\n\n private _dispatchChange(open: boolean) {\n this.dispatchEvent(\n new CustomEvent('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n })\n )\n }\n\n private _isInsideShadowRoot(e: MouseEvent): boolean {\n for (const node of e.composedPath()) {\n if (node === this || node === this.shadowRoot) return true\n if (node instanceof Node && node.getRootNode() === this.shadowRoot) return true\n if (\n node instanceof Node &&\n (this._menu?.contains(node) || this._activeSubmenus.some(menu => menu.contains(node)))\n ) {\n return true\n }\n }\n return false\n }\n\n private _onContextMenu = (e: MouseEvent) => {\n if (this.disabled) return\n e.preventDefault()\n this._restoreFocusTarget = e.target instanceof HTMLElement ? e.target : undefined\n this._openAt(e.clientX, e.clientY, false)\n }\n\n private _onContextMenuOutside = (e: MouseEvent) => {\n if (this._isOpen && !this._isInsideShadowRoot(e)) {\n this.close()\n }\n }\n\n private _onKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return\n\n // 键盘 ContextMenu 键或 Shift+F10\n if (e.key === 'ContextMenu' || (e.shiftKey && e.key === 'F10')) {\n e.preventDefault()\n const focused = document.activeElement\n if (focused && focused !== document.body) {\n const rect = focused.getBoundingClientRect()\n this._openAt(rect.left, rect.bottom, true)\n } else {\n this._openAt(window.innerWidth / 2, window.innerHeight / 2, true)\n }\n return\n }\n }\n\n private _onClickOutside = (e: MouseEvent) => {\n if (!this._isOpen || this._ignoreOutsideClick) return\n if (this._isInsideShadowRoot(e)) return\n this.close()\n }\n\n private _onMenuClick = (e: MouseEvent) => {\n const item = this._getDropdownItemFromEvent(e)\n if (!item || item.hasAttribute('disabled')) return\n if (item.hasAttribute('submenu')) {\n this._openSubmenu(item)\n return\n }\n this.close()\n }\n\n private _getDropdownItemFromEvent(e: Event): HTMLElement | null {\n return (\n e\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.matches('web-ui-dropdown-item')) ??\n null\n )\n }\n\n private _getLevelItems(level: number): HTMLElement[] {\n const container = level === 0 ? this._menu : this._activeSubmenus[level - 1]\n if (!container) return []\n return Array.from(container.children).filter((child): child is HTMLElement =>\n child.matches('web-ui-dropdown-item, web-ui-dropdown-divider, web-ui-dropdown-header')\n )\n }\n\n private _bindLevelHovers() {\n this._hoverCleanupFns.forEach(cleanup => cleanup())\n this._hoverCleanupFns.length = 0\n\n for (let level = 0; level <= this._activeSubmenus.length; level++) {\n this._getLevelItems(level).forEach(item => {\n if (!item.matches('web-ui-dropdown-item') || item.hasAttribute('disabled')) return\n const handler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return\n clearTimeout(this._submenuTimer)\n if (item.hasAttribute('submenu')) {\n if (this._activeSubmenuItems[level] !== item) {\n this._submenuTimer = setTimeout(() => this._openSubmenu(item), 200)\n }\n } else if (this._activeSubmenus.length > level) {\n this._closeSubmenusFrom(level)\n this._bindLevelHovers()\n }\n }\n item.addEventListener('pointerenter', handler, { passive: true })\n this._hoverCleanupFns.push(() => item.removeEventListener('pointerenter', handler))\n })\n }\n }\n\n private _ignoreCurrentOutsideClick() {\n this._ignoreOutsideClick = true\n clearTimeout(this._ignoreOutsideClickTimer)\n this._ignoreOutsideClickTimer = setTimeout(() => {\n this._ignoreOutsideClick = false\n })\n }\n\n private _onWheel = (e: WheelEvent) => {\n this._preventBackgroundScroll(e)\n }\n\n private _onTouchMove = (e: TouchEvent) => {\n this._preventBackgroundScroll(e)\n }\n\n private _onDocumentKeydown = (e: KeyboardEvent) => {\n if (!this._isOpen) return\n if (e.key === 'Escape' && e.target === this) {\n this._closeLastSubmenuOrMenu()\n e.preventDefault()\n return\n }\n const level = this._getFocusedLevel()\n if (level === undefined) return\n const items = this._getEnabledLevelItems(level)\n const focused = this._getFocusedItem()\n const currentIndex = focused ? items.indexOf(focused) : -1\n\n switch (e.key) {\n case 'ArrowDown':\n this._focusMenuItem(items[(currentIndex + 1 + items.length) % items.length])\n break\n case 'ArrowUp':\n this._focusMenuItem(items[(currentIndex - 1 + items.length) % items.length])\n break\n case 'Home':\n this._focusMenuItem(items[0])\n break\n case 'End':\n this._focusMenuItem(items.at(-1))\n break\n case 'ArrowRight':\n if (focused?.hasAttribute('submenu')) {\n this._openSubmenu(focused, true)\n requestAnimationFrame(() => this._focusMenuItem(this._getEnabledLevelItems(level + 1)[0]))\n }\n break\n case 'ArrowLeft':\n if (level > 0) {\n const parent = this._activeSubmenuItems[level - 1]\n this._closeSubmenusFrom(level - 1)\n this._focusMenuItem(parent)\n this._bindLevelHovers()\n }\n break\n case 'Enter':\n case ' ':\n focused?.click()\n break\n case 'Escape':\n this._closeLastSubmenuOrMenu()\n break\n default:\n return\n }\n e.preventDefault()\n }\n\n private _closeLastSubmenuOrMenu() {\n if (this._activeSubmenus.length > 0) {\n const level = this._activeSubmenus.length - 1\n const parent = this._activeSubmenuItems[level]\n this._closeSubmenusFrom(level)\n this._focusMenuItem(parent)\n this._bindLevelHovers()\n } else {\n this.close()\n }\n }\n\n private _preventBackgroundScroll(e: Event) {\n if (!this._isOpen || !this.lockScroll || this._isMenuPanelEvent(e)) return\n e.preventDefault()\n }\n\n private _syncScrollLock(isOpen = this._isOpen) {\n const shouldLock = isOpen && this.lockScroll\n if (shouldLock === this._hasScrollLock) return\n\n if (shouldLock) lockScroll()\n else unlockScroll()\n this._hasScrollLock = shouldLock\n }\n\n private _getEnabledLevelItems(level: number) {\n return this._getLevelItems(level).filter(item => item.matches('web-ui-dropdown-item:not([disabled])'))\n }\n\n private _getFocusedItem(): HTMLElement | undefined {\n return [this._menu, ...this._activeSubmenus]\n .filter((menu): menu is HTMLElement => menu !== undefined)\n .flatMap(menu => Array.from(menu.querySelectorAll<HTMLElement>('web-ui-dropdown-item')))\n .find(item => Boolean(item.shadowRoot?.activeElement))\n }\n\n private _getFocusedLevel(): number | undefined {\n const item = this._getFocusedItem()\n if (!item) return undefined\n if (this._menu?.contains(item)) return 0\n const submenuIndex = this._activeSubmenus.findIndex(menu => menu.contains(item))\n return submenuIndex < 0 ? undefined : submenuIndex + 1\n }\n\n private _focusMenuItem(item: HTMLElement | undefined) {\n if (!item || item.hasAttribute('disabled')) return\n const focusable = item as HTMLElement & { focusItem?: () => void }\n focusable.focusItem?.()\n }\n\n private _isMenuPanelEvent(e: Event): boolean {\n return e\n .composedPath()\n .some(\n node =>\n node instanceof HTMLElement &&\n (node.classList.contains('context-menu') || node.classList.contains('context-submenu'))\n )\n }\n\n override render() {\n return html`\n <div class=\"context-menu-anchor\">\n <slot @slotchange=${this._hideMenuItems}></slot>\n </div>\n `\n }\n\n declare readonly $events: {\n 'open-change': CustomEvent<{ open: boolean }>\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-context-menu': WebUiContextMenu\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/context-menu/index.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport '@/components/dropdown-divider'\nimport '@/components/dropdown-header'\nimport '@/components/dropdown-item'\nimport { createMenuPortalOverlay, type MenuPortalOverlay } from '@/shared/menu-portal/menu-portal'\nimport {\n findFocusedMenuItem,\n focusMenuItem,\n getEnabledMenuItems,\n getMenuChildren,\n getMenuItemFromEvent,\n hideNestedMenuChildren,\n moveMenuChildren\n} from '@/shared/menu-portal/menu-tree'\nimport { hideOverlayPresence, showOverlayPresence } from '@/shared/overlay/presence'\nimport { createScrollLockLease } from '@/shared/scroll-lock/scroll-lock'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-context-menu')\nexport class WebUiContextMenu extends LitElement {\n static override styles = unsafeCSS(style)\n\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true, attribute: 'no-scroll-lock' }) noScrollLock = false\n\n @state() private _isOpen = false\n @state() private _x = 0\n @state() private _y = 0\n\n private _activeSubmenus: MenuPortalOverlay[] = []\n private _activeSubmenuItems: HTMLElement[] = []\n private readonly _closingSubmenus = new Map<HTMLElement, MenuPortalOverlay>()\n private _submenuTimer?: ReturnType<typeof setTimeout>\n private _ignoreOutsideClick = false\n private _ignoreOutsideClickTimer?: ReturnType<typeof setTimeout>\n private _hoverCleanupFns: (() => void)[] = []\n private _menu?: MenuPortalOverlay\n private readonly _scrollLock = createScrollLockLease()\n private _restoreFocusTarget?: HTMLElement\n private _shouldOpenInstantly = true\n\n /** 当前菜单是否打开 */\n get isOpen(): boolean {\n return this._isOpen\n }\n\n override connectedCallback() {\n super.connectedCallback()\n this._hideMenuItems()\n this.addEventListener('contextmenu', this._onContextMenu)\n this.addEventListener('keydown', this._onKeydown)\n this.addEventListener('click', this._onMenuClick)\n document.addEventListener('click', this._onClickOutside)\n document.addEventListener('contextmenu', this._onContextMenuOutside)\n document.addEventListener('wheel', this._onWheel, { capture: true, passive: false })\n document.addEventListener('touchmove', this._onTouchMove, { capture: true, passive: false })\n document.addEventListener('keydown', this._onDocumentKeydown)\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('contextmenu', this._onContextMenu)\n this.removeEventListener('keydown', this._onKeydown)\n this.removeEventListener('click', this._onMenuClick)\n document.removeEventListener('click', this._onClickOutside)\n document.removeEventListener('contextmenu', this._onContextMenuOutside)\n document.removeEventListener('wheel', this._onWheel, true)\n document.removeEventListener('touchmove', this._onTouchMove, true)\n document.removeEventListener('keydown', this._onDocumentKeydown)\n clearTimeout(this._submenuTimer)\n clearTimeout(this._ignoreOutsideClickTimer)\n this._hoverCleanupFns.forEach(cleanup => cleanup())\n this._scrollLock.release()\n this._returnItemsToSlot()\n this._menu?.panel.remove()\n this._menu = undefined\n this._closeSubmenusFrom(0, true)\n this._restoreClosingSubmenus()\n }\n\n protected override updated(changed: Map<string, unknown>) {\n // Lit 的已排队更新可在卸载后执行,不能让已失效实例重新获取全局滚动锁。\n if (!this.isConnected) {\n this._syncScrollLock(false)\n return\n }\n\n if (changed.has('_isOpen')) {\n if (this._isOpen) {\n this._syncScrollLock()\n if (!this._menu) {\n this._menu = createMenuPortalOverlay('context-menu', this)\n this._menu.panel.setAttribute('role', 'menu')\n this._menu.panel.setAttribute('aria-label', '上下文菜单')\n this._menu.panel.addEventListener('click', this._onMenuClick)\n }\n requestAnimationFrame(() => {\n if (!this._isOpen || !this._menu) return\n this._setupMenuItems()\n this._positionMenu()\n showOverlayPresence(this._menu.panel, { isInstant: this._shouldOpenInstantly })\n this._shouldOpenInstantly = true\n this._focusFirstItem()\n this._bindLevelHovers()\n })\n } else {\n this._syncScrollLock(false)\n void this._closeMenuAfterPresence()\n }\n this._dispatchChange(this._isOpen)\n }\n if (changed.has('noScrollLock')) this._syncScrollLock()\n }\n\n /**\n * 在指定视口坐标打开菜单。\n * @param x 水平坐标(px)。\n * @param y 垂直坐标(px)。\n * @returns 无返回值;打开后派发 `open-change` 事件。\n */\n openAt(x: number, y: number) {\n this._openAt(x, y, true)\n }\n\n private _openAt(x: number, y: number, isInstant: boolean) {\n if (this.disabled) return\n this._x = x\n this._y = y\n this._shouldOpenInstantly = isInstant\n this._ignoreCurrentOutsideClick()\n if (this._isOpen) {\n requestAnimationFrame(() => this._positionMenu())\n return\n }\n this._restoreFocusTarget ??= document.activeElement instanceof HTMLElement ? document.activeElement : undefined\n this._isOpen = true\n }\n\n /**\n * 关闭菜单。\n * @returns 无返回值;关闭后派发 `open-change` 事件。\n */\n close() {\n if (!this._isOpen) return\n this._isOpen = false\n }\n\n private _positionMenu() {\n const panel = this._menu?.panel\n if (!panel) return\n\n panel.style.visibility = 'hidden'\n panel.style.display = ''\n\n const { width, height } = panel.getBoundingClientRect()\n const vw = window.innerWidth\n const vh = window.innerHeight\n\n let x = this._x\n let y = this._y\n\n if (x + width > vw) x = vw - width - 8\n if (y + height > vh) y = vh - height - 8\n if (x < 0) x = 8\n if (y < 0) y = 8\n\n panel.style.left = `${x}px`\n panel.style.top = `${y}px`\n const horizontalOrigin = x < this._x ? 'right' : 'left'\n const verticalOrigin = y < this._y ? 'bottom' : 'top'\n panel.style.setProperty('--wui-overlay-transform-origin', `${verticalOrigin} ${horizontalOrigin}`)\n panel.style.visibility = ''\n }\n\n private _focusFirstItem() {\n const items = this._menu?.content.querySelectorAll<HTMLElement>('web-ui-dropdown-item:not([disabled])')\n const firstItem = items?.[0]\n if (firstItem) {\n this._focusMenuItem(firstItem)\n }\n }\n\n private _setupMenuItems() {\n const menu = this._menu\n if (!menu) return\n\n this._hideMenuItems()\n moveMenuChildren(this, menu.content)\n }\n\n private _returnItemsToSlot() {\n const menu = this._menu\n if (!menu) return\n\n this._closeSubmenusFrom(0, true)\n this._restoreClosingSubmenus()\n moveMenuChildren(menu.content, this)\n }\n\n private async _closeMenuAfterPresence() {\n const menu = this._menu\n if (menu && !(await hideOverlayPresence(menu.panel))) return\n if (this._isOpen || !this.isConnected || this._menu !== menu) return\n\n this._returnItemsToSlot()\n menu?.panel.remove()\n this._menu = undefined\n this._restoreFocusTarget?.focus()\n this._restoreFocusTarget = undefined\n }\n\n private _hideMenuItems() {\n getMenuChildren(this).forEach(child => child.setAttribute('slot', 'context-menu-hidden'))\n hideNestedMenuChildren(this, 'context-menu-hidden')\n }\n\n private _openSubmenu(item: HTMLElement, isInstant = false) {\n if (!this._isOpen || !item.hasAttribute('submenu') || item.hasAttribute('disabled')) return\n\n const level = this._getItemLevel(item)\n if (level === -1 || this._activeSubmenuItems[level] === item) return\n\n this._closeSubmenusFrom(level)\n const closingSubmenu = this._closingSubmenus.get(item)\n if (closingSubmenu) {\n this._closingSubmenus.delete(item)\n this._activeSubmenus[level] = closingSubmenu\n this._activeSubmenuItems[level] = item\n item.setAttribute('active', '')\n this._positionSubmenu(item, closingSubmenu)\n showOverlayPresence(closingSubmenu.panel, { isInstant })\n this._bindLevelHovers()\n return\n }\n const children = getMenuChildren(item)\n if (children.length === 0) return\n\n const submenu = createMenuPortalOverlay('context-submenu', this)\n submenu.panel.dataset.level = String(level)\n submenu.panel.setAttribute('role', 'menu')\n submenu.panel.setAttribute('aria-label', '子菜单')\n submenu.panel.style.visibility = 'hidden'\n submenu.panel.addEventListener('click', this._onMenuClick)\n submenu.content.append(...children)\n\n this._activeSubmenus[level] = submenu\n this._activeSubmenuItems[level] = item\n item.setAttribute('active', '')\n this._positionSubmenu(item, submenu)\n showOverlayPresence(submenu.panel, { isInstant })\n this._bindLevelHovers()\n }\n\n private _closeSubmenusFrom(level: number, isInstant = false) {\n for (let index = this._activeSubmenus.length - 1; index >= level; index--) {\n const submenu = this._activeSubmenus[index]\n const item = this._activeSubmenuItems[index]\n item?.removeAttribute('active')\n if (!item || isInstant) {\n this._restoreSubmenuItems(submenu, item)\n submenu.panel.remove()\n } else {\n this._closingSubmenus.set(item, submenu)\n void this._closeSubmenuAfterPresence(submenu, item)\n }\n }\n this._activeSubmenus.length = level\n this._activeSubmenuItems.length = level\n }\n\n private async _closeSubmenuAfterPresence(submenu: MenuPortalOverlay, item: HTMLElement) {\n if (!(await hideOverlayPresence(submenu.panel))) return\n if (this._closingSubmenus.get(item) !== submenu) return\n\n this._closingSubmenus.delete(item)\n this._restoreSubmenuItems(submenu, item)\n submenu.panel.remove()\n }\n\n private _restoreSubmenuItems(submenu: MenuPortalOverlay, item?: HTMLElement) {\n if (item) moveMenuChildren(submenu.content, item)\n }\n\n private _restoreClosingSubmenus() {\n this._closingSubmenus.forEach((submenu, item) => {\n this._restoreSubmenuItems(submenu, item)\n submenu.panel.remove()\n })\n this._closingSubmenus.clear()\n }\n\n private _getItemLevel(item: HTMLElement): number {\n const menu = this._menu\n if (menu?.panel.contains(item)) return 0\n const parentLevel = this._activeSubmenus.findIndex(submenu => submenu.panel.contains(item))\n return parentLevel === -1 ? -1 : parentLevel + 1\n }\n\n private _positionSubmenu(item: HTMLElement, submenu: MenuPortalOverlay) {\n const itemRect = item.getBoundingClientRect()\n const submenuRect = submenu.panel.getBoundingClientRect()\n const padding = 8\n const canOpenRight = itemRect.right + submenuRect.width + padding <= window.innerWidth\n const left = canOpenRight ? itemRect.right : Math.max(padding, itemRect.left - submenuRect.width)\n const top = Math.min(Math.max(padding, itemRect.top), window.innerHeight - submenuRect.height - padding)\n\n submenu.panel.style.left = `${left}px`\n submenu.panel.style.top = `${top}px`\n submenu.panel.style.setProperty('--wui-overlay-transform-origin', canOpenRight ? 'top left' : 'top right')\n submenu.panel.style.visibility = ''\n }\n\n private _dispatchChange(open: boolean) {\n this.dispatchEvent(\n new CustomEvent('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n })\n )\n }\n\n private _isInsideShadowRoot(e: MouseEvent): boolean {\n for (const node of e.composedPath()) {\n if (node === this || node === this.shadowRoot) return true\n if (node instanceof Node && node.getRootNode() === this.shadowRoot) return true\n if (\n node instanceof Node &&\n (this._menu?.panel.contains(node) || this._activeSubmenus.some(menu => menu.panel.contains(node)))\n ) {\n return true\n }\n }\n return false\n }\n\n private _onContextMenu = (e: MouseEvent) => {\n if (this.disabled) return\n e.preventDefault()\n this._restoreFocusTarget = e.target instanceof HTMLElement ? e.target : undefined\n this._openAt(e.clientX, e.clientY, false)\n }\n\n private _onContextMenuOutside = (e: MouseEvent) => {\n if (this._isOpen && !this._isInsideShadowRoot(e)) {\n this.close()\n }\n }\n\n private _onKeydown = (e: KeyboardEvent) => {\n if (this.disabled) return\n\n // 键盘 ContextMenu 键或 Shift+F10\n if (e.key === 'ContextMenu' || (e.shiftKey && e.key === 'F10')) {\n e.preventDefault()\n const focused = document.activeElement\n if (focused && focused !== document.body) {\n const rect = focused.getBoundingClientRect()\n this._openAt(rect.left, rect.bottom, true)\n } else {\n this._openAt(window.innerWidth / 2, window.innerHeight / 2, true)\n }\n return\n }\n }\n\n private _onClickOutside = (e: MouseEvent) => {\n if (!this._isOpen || this._ignoreOutsideClick) return\n if (this._isInsideShadowRoot(e)) return\n this.close()\n }\n\n private _onMenuClick = (e: MouseEvent) => {\n const item = getMenuItemFromEvent(e)\n if (!item || item.hasAttribute('disabled')) return\n if (item.hasAttribute('submenu')) {\n this._openSubmenu(item)\n return\n }\n this.close()\n }\n\n private _getLevelItems(level: number): HTMLElement[] {\n const container = level === 0 ? this._menu?.content : this._activeSubmenus[level - 1]?.content\n if (!container) return []\n return getMenuChildren(container)\n }\n\n private _bindLevelHovers() {\n this._hoverCleanupFns.forEach(cleanup => cleanup())\n this._hoverCleanupFns.length = 0\n\n for (let level = 0; level <= this._activeSubmenus.length; level++) {\n this._getLevelItems(level).forEach(item => {\n if (!item.matches('web-ui-dropdown-item') || item.hasAttribute('disabled')) return\n const handler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return\n clearTimeout(this._submenuTimer)\n if (item.hasAttribute('submenu')) {\n if (this._activeSubmenuItems[level] !== item) {\n this._submenuTimer = setTimeout(() => this._openSubmenu(item), 200)\n }\n } else if (this._activeSubmenus.length > level) {\n this._closeSubmenusFrom(level)\n this._bindLevelHovers()\n }\n }\n item.addEventListener('pointerenter', handler, { passive: true })\n this._hoverCleanupFns.push(() => item.removeEventListener('pointerenter', handler))\n })\n }\n }\n\n private _ignoreCurrentOutsideClick() {\n this._ignoreOutsideClick = true\n clearTimeout(this._ignoreOutsideClickTimer)\n this._ignoreOutsideClickTimer = setTimeout(() => {\n this._ignoreOutsideClick = false\n })\n }\n\n private _onWheel = (e: WheelEvent) => {\n this._preventBackgroundScroll(e)\n }\n\n private _onTouchMove = (e: TouchEvent) => {\n this._preventBackgroundScroll(e)\n }\n\n private _onDocumentKeydown = (e: KeyboardEvent) => {\n if (!this._isOpen) return\n if (e.key === 'Escape' && e.target === this) {\n this._closeLastSubmenuOrMenu()\n e.preventDefault()\n return\n }\n const level = this._getFocusedLevel()\n if (level === undefined) return\n const items = this._getEnabledLevelItems(level)\n const focused = this._getFocusedItem()\n const currentIndex = focused ? items.indexOf(focused) : -1\n\n switch (e.key) {\n case 'ArrowDown':\n this._focusMenuItem(items[(currentIndex + 1 + items.length) % items.length])\n break\n case 'ArrowUp':\n this._focusMenuItem(items[(currentIndex - 1 + items.length) % items.length])\n break\n case 'Home':\n this._focusMenuItem(items[0])\n break\n case 'End':\n this._focusMenuItem(items.at(-1))\n break\n case 'ArrowRight':\n if (focused?.hasAttribute('submenu')) {\n this._openSubmenu(focused, true)\n requestAnimationFrame(() => this._focusMenuItem(this._getEnabledLevelItems(level + 1)[0]))\n }\n break\n case 'ArrowLeft':\n if (level > 0) {\n const parent = this._activeSubmenuItems[level - 1]\n this._closeSubmenusFrom(level - 1)\n this._focusMenuItem(parent)\n this._bindLevelHovers()\n }\n break\n case 'Enter':\n case ' ':\n focused?.click()\n break\n case 'Escape':\n this._closeLastSubmenuOrMenu()\n break\n default:\n return\n }\n e.preventDefault()\n }\n\n private _closeLastSubmenuOrMenu() {\n if (this._activeSubmenus.length > 0) {\n const level = this._activeSubmenus.length - 1\n const parent = this._activeSubmenuItems[level]\n this._closeSubmenusFrom(level)\n this._focusMenuItem(parent)\n this._bindLevelHovers()\n } else {\n this.close()\n }\n }\n\n private _preventBackgroundScroll(e: Event) {\n if (!this._isOpen || this.noScrollLock || this._isMenuPanelEvent(e)) return\n e.preventDefault()\n }\n\n private _syncScrollLock(isOpen = this._isOpen) {\n this._scrollLock.sync(isOpen && !this.noScrollLock)\n }\n\n private _getEnabledLevelItems(level: number) {\n const container = level === 0 ? this._menu?.content : this._activeSubmenus[level - 1]?.content\n return container ? getEnabledMenuItems(container) : []\n }\n\n private _getFocusedItem(): HTMLElement | undefined {\n return findFocusedMenuItem([this._menu?.content, ...this._activeSubmenus.map(submenu => submenu.content)])\n }\n\n private _getFocusedLevel(): number | undefined {\n const item = this._getFocusedItem()\n if (!item) return undefined\n if (this._menu?.panel.contains(item)) return 0\n const submenuIndex = this._activeSubmenus.findIndex(menu => menu.panel.contains(item))\n return submenuIndex < 0 ? undefined : submenuIndex + 1\n }\n\n private _focusMenuItem(item: HTMLElement | undefined) {\n focusMenuItem(item)\n }\n\n private _isMenuPanelEvent(e: Event): boolean {\n return e\n .composedPath()\n .some(\n node =>\n node instanceof HTMLElement &&\n (node.classList.contains('context-menu') || node.classList.contains('context-submenu'))\n )\n }\n\n override render() {\n return html`\n <div class=\"context-menu-anchor\">\n <slot @slotchange=${this._hideMenuItems}></slot>\n </div>\n `\n }\n\n declare readonly $events: {\n 'open-change': CustomEvent<{ open: boolean }>\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-context-menu': WebUiContextMenu\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/context-menu/style.css?inline
|
|
2
|
-
var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}.context-menu-anchor{display:contents}
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]){cursor:not-allowed;opacity:.4}.context-menu-anchor{display:contents}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as default };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/context-menu/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.context-menu-anchor {\n display: contents;\n}\n
|
|
1
|
+
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/context-menu/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.context-menu-anchor {\n display: contents;\n}\n"],"mappings":""}
|
|
@@ -2,13 +2,11 @@ import { LitElement, PropertyValues } from 'lit';
|
|
|
2
2
|
export declare class WebUiDialog extends LitElement {
|
|
3
3
|
static styles: import('lit').CSSResult[];
|
|
4
4
|
open: boolean;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
noScrollLock: boolean;
|
|
6
|
+
noBackdropClose: boolean;
|
|
7
7
|
private _hasBody;
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
private _openFrame?;
|
|
11
|
-
private _isClosing;
|
|
8
|
+
private readonly _scrollLock;
|
|
9
|
+
private readonly _presence;
|
|
12
10
|
private get dialog();
|
|
13
11
|
protected updated(props: PropertyValues): void;
|
|
14
12
|
disconnectedCallback(): void;
|
|
@@ -18,11 +16,6 @@ export declare class WebUiDialog extends LitElement {
|
|
|
18
16
|
private handleCancel;
|
|
19
17
|
private handleBackdropClick;
|
|
20
18
|
private emitOpenChange;
|
|
21
|
-
private _startOpening;
|
|
22
|
-
private _startClosing;
|
|
23
|
-
private _finishClosing;
|
|
24
|
-
private _clearCloseFallback;
|
|
25
|
-
private _cancelOpenFrame;
|
|
26
19
|
private _onTransitionEnd;
|
|
27
20
|
private _onNativeClose;
|
|
28
21
|
private _syncScrollLock;
|
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
import e from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
2
2
|
import t from "../../assets/glass.js";
|
|
3
3
|
import "../button/index.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import o from "
|
|
8
|
-
import {
|
|
9
|
-
import { customElement as u, property as d, state as f } from "lit/decorators.js";
|
|
4
|
+
import { createScrollLockLease as n } from "../../shared/scroll-lock/scroll-lock.js";
|
|
5
|
+
import { defineNativeDialogPresence as r } from "../../shared/overlay/native-dialog-presence.js";
|
|
6
|
+
import i from "./style.js";
|
|
7
|
+
import { LitElement as a, html as o, unsafeCSS as s } from "lit";
|
|
8
|
+
import { customElement as c, property as l, state as u } from "lit/decorators.js";
|
|
10
9
|
//#region src/components/dialog/index.ts
|
|
11
|
-
var
|
|
10
|
+
var d = class extends a {
|
|
12
11
|
constructor(...e) {
|
|
13
|
-
super(...e), this.open = !1, this.
|
|
14
|
-
|
|
12
|
+
super(...e), this.open = !1, this.noScrollLock = !1, this.noBackdropClose = !1, this._hasBody = !1, this._scrollLock = n(), this._presence = r().make({
|
|
13
|
+
getDialog: () => this.dialog,
|
|
14
|
+
isConnected: () => this.isConnected,
|
|
15
|
+
isOpen: () => this.open
|
|
16
|
+
}), this._onTransitionEnd = (e) => {
|
|
17
|
+
this._presence.handleTransitionEnd(e);
|
|
15
18
|
}, this._onNativeClose = () => {
|
|
16
|
-
this.open &&= (this.
|
|
19
|
+
this.open &&= (this._presence.handleNativeClose(), !1);
|
|
17
20
|
};
|
|
18
21
|
}
|
|
19
22
|
static {
|
|
20
|
-
this.styles = [
|
|
23
|
+
this.styles = [s(t), s(i)];
|
|
21
24
|
}
|
|
22
25
|
get dialog() {
|
|
23
26
|
return this.shadowRoot?.querySelector("dialog") ?? null;
|
|
24
27
|
}
|
|
25
28
|
updated(e) {
|
|
26
|
-
super.updated(e), this.isConnected && (e.has("open") && (this.emitOpenChange(), this.
|
|
29
|
+
super.updated(e), this.isConnected && (e.has("open") && (this.emitOpenChange(), this._presence.sync(this.open)), (e.has("open") || e.has("noScrollLock")) && this._syncScrollLock());
|
|
27
30
|
}
|
|
28
31
|
disconnectedCallback() {
|
|
29
|
-
super.disconnectedCallback(), this.
|
|
32
|
+
super.disconnectedCallback(), this._presence.dispose(), this._scrollLock.release();
|
|
30
33
|
}
|
|
31
34
|
showModal() {
|
|
32
35
|
this.open ||= !0;
|
|
@@ -38,7 +41,7 @@ var p = class extends s {
|
|
|
38
41
|
e.preventDefault(), this.close();
|
|
39
42
|
}
|
|
40
43
|
handleBackdropClick(e) {
|
|
41
|
-
e.target === e.currentTarget && this.
|
|
44
|
+
e.target === e.currentTarget && (this.noBackdropClose || this.close());
|
|
42
45
|
}
|
|
43
46
|
emitOpenChange() {
|
|
44
47
|
this.dispatchEvent(new CustomEvent("open-change", {
|
|
@@ -47,41 +50,14 @@ var p = class extends s {
|
|
|
47
50
|
composed: !0
|
|
48
51
|
}));
|
|
49
52
|
}
|
|
50
|
-
_startOpening() {
|
|
51
|
-
let e = this.dialog;
|
|
52
|
-
e && (this._isClosing = !1, this._clearCloseFallback(), e.classList.remove("is-closing"), e.open || e.showModal?.(), this._cancelOpenFrame(), this._openFrame = requestAnimationFrame(() => {
|
|
53
|
-
this._openFrame = void 0, !(!this.isConnected || !this.open || !e.open) && e.classList.add("is-visible");
|
|
54
|
-
}));
|
|
55
|
-
}
|
|
56
|
-
_startClosing() {
|
|
57
|
-
let e = this.dialog;
|
|
58
|
-
if (e?.open) {
|
|
59
|
-
if (this._cancelOpenFrame(), this._isClosing = !0, !e.classList.contains("is-visible")) {
|
|
60
|
-
this._finishClosing();
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
e.classList.add("is-closing"), e.classList.remove("is-visible"), this._clearCloseFallback(), this._closeFallbackTimer = setTimeout(() => this._finishClosing(), r(e) + 80);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
_finishClosing() {
|
|
67
|
-
let e = this.dialog;
|
|
68
|
-
!e || !this._isClosing || this.open || (this._clearCloseFallback(), this._isClosing = !1, e.classList.remove("is-closing", "is-visible"), e.open && e.close?.());
|
|
69
|
-
}
|
|
70
|
-
_clearCloseFallback() {
|
|
71
|
-
this._closeFallbackTimer !== void 0 && (clearTimeout(this._closeFallbackTimer), this._closeFallbackTimer = void 0);
|
|
72
|
-
}
|
|
73
|
-
_cancelOpenFrame() {
|
|
74
|
-
this._openFrame !== void 0 && (cancelAnimationFrame(this._openFrame), this._openFrame = void 0);
|
|
75
|
-
}
|
|
76
53
|
_syncScrollLock(e = this.open) {
|
|
77
|
-
|
|
78
|
-
t !== this._hasScrollLock && (t ? i() : a(), this._hasScrollLock = t);
|
|
54
|
+
this._scrollLock.sync(e && !this.noScrollLock);
|
|
79
55
|
}
|
|
80
56
|
_onBodySlotChange(e) {
|
|
81
57
|
e.target instanceof HTMLSlotElement && (this._hasBody = e.target.assignedElements().length > 0);
|
|
82
58
|
}
|
|
83
59
|
render() {
|
|
84
|
-
return
|
|
60
|
+
return o`
|
|
85
61
|
<dialog
|
|
86
62
|
@cancel=${this.handleCancel}
|
|
87
63
|
@close=${this._onNativeClose}
|
|
@@ -89,7 +65,7 @@ var p = class extends s {
|
|
|
89
65
|
@transitionend=${this._onTransitionEnd}
|
|
90
66
|
>
|
|
91
67
|
<div class="wui-dialog-body wui-glass">
|
|
92
|
-
${this._hasBody ?
|
|
68
|
+
${this._hasBody ? o`<slot name="body" @slotchange=${this._onBodySlotChange}></slot>` : o`
|
|
93
69
|
<slot name="body" @slotchange=${this._onBodySlotChange} hidden></slot>
|
|
94
70
|
<div class="title"><slot name="title"></slot></div>
|
|
95
71
|
<div class="desc"><slot></slot></div>
|
|
@@ -100,19 +76,19 @@ var p = class extends s {
|
|
|
100
76
|
`;
|
|
101
77
|
}
|
|
102
78
|
};
|
|
103
|
-
e([
|
|
79
|
+
e([l({
|
|
104
80
|
type: Boolean,
|
|
105
81
|
reflect: !0
|
|
106
|
-
})],
|
|
82
|
+
})], d.prototype, "open", void 0), e([l({
|
|
83
|
+
type: Boolean,
|
|
107
84
|
reflect: !0,
|
|
108
|
-
attribute: "
|
|
109
|
-
|
|
110
|
-
|
|
85
|
+
attribute: "no-scroll-lock"
|
|
86
|
+
})], d.prototype, "noScrollLock", void 0), e([l({
|
|
87
|
+
type: Boolean,
|
|
111
88
|
reflect: !0,
|
|
112
|
-
attribute: "
|
|
113
|
-
|
|
114
|
-
})], p.prototype, "overlayClosable", void 0), e([f()], p.prototype, "_hasBody", void 0), p = e([u("web-ui-dialog")], p);
|
|
89
|
+
attribute: "no-backdrop-close"
|
|
90
|
+
})], d.prototype, "noBackdropClose", void 0), e([u()], d.prototype, "_hasBody", void 0), d = e([c("web-ui-dialog")], d);
|
|
115
91
|
//#endregion
|
|
116
|
-
export {
|
|
92
|
+
export { d as WebUiDialog };
|
|
117
93
|
|
|
118
94
|
//# sourceMappingURL=index.js.map
|