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