@greypan/web-ui 6.0.0 → 6.2.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 +285 -93
- package/README.md +266 -87
- 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/overlay-motion.js +1 -1
- package/dist/assets/overlay-motion.js.map +1 -1
- package/dist/components/autocomplete/index.d.ts +367 -4
- package/dist/components/autocomplete/index.js +87 -80
- 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/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.js +36 -32
- 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/style.js +1 -1
- package/dist/components/button-group/style.js.map +1 -1
- package/dist/components/checkbox/index.d.ts +366 -5
- package/dist/components/checkbox/index.js +19 -31
- 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.d.ts +366 -4
- package/dist/components/checkbox-group/index.js +16 -25
- package/dist/components/checkbox-group/index.js.map +1 -1
- package/dist/components/collapse/index.d.ts +29 -1
- package/dist/components/collapse/index.js +105 -46
- package/dist/components/collapse/index.js.map +1 -1
- package/dist/components/collapse/style.js +1 -1
- package/dist/components/collapse/style.js.map +1 -1
- package/dist/components/context-menu/index.d.ts +7 -14
- package/dist/components/context-menu/index.js +113 -164
- package/dist/components/context-menu/index.js.map +1 -1
- package/dist/components/dialog/index.js +26 -25
- 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.js +71 -64
- 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 +6 -14
- package/dist/components/dropdown/index.js +100 -156
- package/dist/components/dropdown/index.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/empty/style.js +1 -1
- package/dist/components/empty/style.js.map +1 -1
- package/dist/components/image-preview/index.d.ts +58 -0
- package/dist/components/image-preview/index.js +481 -0
- package/dist/components/image-preview/index.js.map +1 -0
- package/dist/components/image-preview/style.js +6 -0
- package/dist/components/image-preview/style.js.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +20 -19
- package/dist/components/input/index.d.ts +366 -5
- package/dist/components/input/index.js +35 -47
- 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 +366 -5
- package/dist/components/input-number/index.js +31 -44
- 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 +1 -1
- package/dist/components/layout/index.js +5 -3
- 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.d.ts +1 -0
- package/dist/components/popover/index.js +55 -60
- 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 +366 -5
- package/dist/components/radio/index.js +21 -31
- 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.d.ts +366 -4
- package/dist/components/radio-group/index.js +16 -25
- package/dist/components/radio-group/index.js.map +1 -1
- package/dist/components/segmented/index.d.ts +366 -4
- package/dist/components/segmented/index.js +28 -35
- 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/index.js +17 -15
- package/dist/components/segmented-trigger/index.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.d.ts +368 -5
- package/dist/components/select/index.js +71 -68
- 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.d.ts +366 -5
- package/dist/components/slider/index.js +40 -50
- package/dist/components/slider/index.js.map +1 -1
- package/dist/components/slider/style.js +1 -1
- package/dist/components/slider/style.js.map +1 -1
- package/dist/components/spinner/style.js +1 -1
- package/dist/components/spinner/style.js.map +1 -1
- package/dist/components/svg-draw-lines/index.js +1 -1
- package/dist/components/svg-draw-lines/index.js.map +1 -1
- package/dist/components/switch/index.d.ts +366 -5
- package/dist/components/switch/index.js +28 -38
- 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 +366 -5
- package/dist/components/textarea/index.js +43 -57
- 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.js +1 -1
- 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/manager.js +2 -2
- package/dist/components/toast/manager.js.map +1 -1
- package/dist/components/toast/style.js +1 -1
- package/dist/components/toast/style.js.map +1 -1
- package/dist/components/tooltip/index.d.ts +1 -0
- package/dist/components/tooltip/index.js +43 -58
- 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/radix-icons-reset.d.ts +6 -0
- package/dist/icons/generated/radix-icons-reset.js +10 -0
- package/dist/icons/generated/radix-icons-reset.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +2 -1
- package/dist/shared/focus/pointer-focus.js +37 -0
- package/dist/shared/focus/pointer-focus.js.map +1 -0
- package/dist/shared/form-association/index.js +31 -4
- package/dist/shared/form-association/index.js.map +1 -1
- package/dist/shared/gesture/drag-gesture.js +53 -30
- package/dist/shared/gesture/drag-gesture.js.map +1 -1
- package/dist/shared/gesture/pinch-gesture.js +84 -0
- package/dist/shared/gesture/pinch-gesture.js.map +1 -0
- package/dist/shared/group-management/index.js.map +1 -1
- package/dist/shared/menu-behavior/index.js +112 -0
- package/dist/shared/menu-behavior/index.js.map +1 -0
- package/dist/shared/menu-portal/menu-portal.js.map +1 -1
- package/dist/shared/open-state/index.js +12 -0
- package/dist/shared/open-state/index.js.map +1 -0
- package/dist/shared/option-portal/combobox-shell.js +43 -0
- package/dist/shared/option-portal/combobox-shell.js.map +1 -0
- package/dist/shared/option-portal/index.js +22 -21
- package/dist/shared/option-portal/index.js.map +1 -1
- package/dist/shared/overlay/anchored-panel.js +33 -30
- package/dist/shared/overlay/anchored-panel.js.map +1 -1
- package/dist/shared/overlay/composition.js +57 -0
- package/dist/shared/overlay/composition.js.map +1 -0
- package/dist/shared/overlay/lifecycle.js +41 -0
- package/dist/shared/overlay/lifecycle.js.map +1 -0
- package/dist/shared/overlay/native-dialog-presence.js +15 -15
- package/dist/shared/overlay/native-dialog-presence.js.map +1 -1
- package/dist/shared/{theme → overlay}/overlay-root.js +1 -1
- package/dist/shared/overlay/overlay-root.js.map +1 -0
- package/dist/shared/overlay/overlay.js +43 -41
- package/dist/shared/overlay/overlay.js.map +1 -1
- package/dist/shared/overlay/placement-props.js +19 -0
- package/dist/shared/overlay/placement-props.js.map +1 -0
- package/dist/shared/overlay/portal.js +6 -4
- package/dist/shared/overlay/portal.js.map +1 -1
- package/dist/shared/overlay/positioning-generation.js +20 -0
- package/dist/shared/overlay/positioning-generation.js.map +1 -0
- package/dist/shared/{theme/theme-scope.js → overlay/theme-overlay-scope.js} +2 -2
- package/dist/shared/overlay/theme-overlay-scope.js.map +1 -0
- package/package.json +6 -10
- package/dist/shared/theme/overlay-root.js.map +0 -1
- package/dist/shared/theme/theme-scope.js.map +0 -1
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
import e from "../../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
|
|
2
2
|
import t from "../../assets/glass.js";
|
|
3
|
-
import {
|
|
3
|
+
import { dispatchOpenChangeEvent as n } from "../../shared/open-state/index.js";
|
|
4
|
+
import { defineScrollLockLease as r } from "../../shared/scroll-lock/scroll-lock.js";
|
|
4
5
|
import "../button/index.js";
|
|
5
|
-
import { UserChangeController as
|
|
6
|
-
import { defineNativeDialogPresence as
|
|
7
|
-
import
|
|
8
|
-
import { LitElement as
|
|
9
|
-
import { customElement as
|
|
6
|
+
import { UserChangeController as i } from "../../shared/events/user-change.js";
|
|
7
|
+
import { defineNativeDialogPresence as a } from "../../shared/overlay/native-dialog-presence.js";
|
|
8
|
+
import o from "./style.js";
|
|
9
|
+
import { LitElement as s, html as c, unsafeCSS as l } from "lit";
|
|
10
|
+
import { customElement as u, property as d, state as f } from "lit/decorators.js";
|
|
10
11
|
//#region src/components/dialog/index.ts
|
|
11
|
-
var
|
|
12
|
+
var p = class extends s {
|
|
12
13
|
constructor(...e) {
|
|
13
|
-
super(...e), this.open = !1, this.noScrollLock = !1, this.noBackdropClose = !1, this.noEscapeClose = !1, this.controlled = !1, this._hasBody = !1, this._userOpenChange = new
|
|
14
|
+
super(...e), this.open = !1, this.noScrollLock = !1, this.noBackdropClose = !1, this.noEscapeClose = !1, this.controlled = !1, this._hasBody = !1, this._userOpenChange = new i(), this._scrollLock = r().make(), this._presence = a().make({
|
|
14
15
|
getDialog: () => this.dialog,
|
|
15
16
|
isConnected: () => this.isConnected,
|
|
16
17
|
isOpen: () => this.open
|
|
17
18
|
}), this._onTransitionEnd = (e) => {
|
|
18
19
|
this._presence.handleTransitionEnd(e);
|
|
19
20
|
}, this._onNativeClose = () => {
|
|
20
|
-
if (this.open) {
|
|
21
|
+
if (!this.open) {
|
|
22
|
+
this._presence.handleNativeClose();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!this._presence.handleNativeClose()) {
|
|
21
26
|
if (this.controlled) {
|
|
22
27
|
this._presence.sync(!0), this.emitOpenChange(!1);
|
|
23
28
|
return;
|
|
24
29
|
}
|
|
25
|
-
this.
|
|
30
|
+
this._userOpenChange.mark(), this.open = !1;
|
|
26
31
|
}
|
|
27
32
|
};
|
|
28
33
|
}
|
|
29
34
|
static {
|
|
30
|
-
this.styles = [
|
|
35
|
+
this.styles = [l(t), l(o)];
|
|
31
36
|
}
|
|
32
37
|
get dialog() {
|
|
33
38
|
return this.shadowRoot?.querySelector("dialog") ?? null;
|
|
@@ -63,11 +68,7 @@ var f = class extends o {
|
|
|
63
68
|
}
|
|
64
69
|
}
|
|
65
70
|
emitOpenChange(e = this.open) {
|
|
66
|
-
this
|
|
67
|
-
detail: { open: e },
|
|
68
|
-
bubbles: !0,
|
|
69
|
-
composed: !0
|
|
70
|
-
}));
|
|
71
|
+
n(this, e);
|
|
71
72
|
}
|
|
72
73
|
_syncScrollLock(e = this.open) {
|
|
73
74
|
this._scrollLock.sync(e && !this.noScrollLock);
|
|
@@ -76,7 +77,7 @@ var f = class extends o {
|
|
|
76
77
|
e.target instanceof HTMLSlotElement && (this._hasBody = e.target.assignedElements().length > 0);
|
|
77
78
|
}
|
|
78
79
|
render() {
|
|
79
|
-
return
|
|
80
|
+
return c`
|
|
80
81
|
<dialog
|
|
81
82
|
@cancel=${this.handleCancel}
|
|
82
83
|
@close=${this._onNativeClose}
|
|
@@ -84,7 +85,7 @@ var f = class extends o {
|
|
|
84
85
|
@transitionend=${this._onTransitionEnd}
|
|
85
86
|
>
|
|
86
87
|
<div class="wui-dialog-body wui-glass">
|
|
87
|
-
${this._hasBody ?
|
|
88
|
+
${this._hasBody ? c`<slot name="body" @slotchange=${this._onBodySlotChange}></slot>` : c`
|
|
88
89
|
<slot name="body" @slotchange=${this._onBodySlotChange} hidden></slot>
|
|
89
90
|
<div class="title"><slot name="title"></slot></div>
|
|
90
91
|
<div class="desc"><slot></slot></div>
|
|
@@ -95,26 +96,26 @@ var f = class extends o {
|
|
|
95
96
|
`;
|
|
96
97
|
}
|
|
97
98
|
};
|
|
98
|
-
e([
|
|
99
|
+
e([d({
|
|
99
100
|
type: Boolean,
|
|
100
101
|
reflect: !0
|
|
101
|
-
})],
|
|
102
|
+
})], p.prototype, "open", void 0), e([d({
|
|
102
103
|
type: Boolean,
|
|
103
104
|
reflect: !0,
|
|
104
105
|
attribute: "no-scroll-lock"
|
|
105
|
-
})],
|
|
106
|
+
})], p.prototype, "noScrollLock", void 0), e([d({
|
|
106
107
|
type: Boolean,
|
|
107
108
|
reflect: !0,
|
|
108
109
|
attribute: "no-backdrop-close"
|
|
109
|
-
})],
|
|
110
|
+
})], p.prototype, "noBackdropClose", void 0), e([d({
|
|
110
111
|
type: Boolean,
|
|
111
112
|
reflect: !0,
|
|
112
113
|
attribute: "no-escape-close"
|
|
113
|
-
})],
|
|
114
|
+
})], p.prototype, "noEscapeClose", void 0), e([d({
|
|
114
115
|
type: Boolean,
|
|
115
116
|
reflect: !0
|
|
116
|
-
})],
|
|
117
|
+
})], p.prototype, "controlled", void 0), e([f()], p.prototype, "_hasBody", void 0), p = e([u("web-ui-dialog")], p);
|
|
117
118
|
//#endregion
|
|
118
|
-
export {
|
|
119
|
+
export { p as WebUiDialog };
|
|
119
120
|
|
|
120
121
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/dialog/index.ts"],"sourcesContent":["import { html, LitElement, type PropertyValues, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport '@/components/button'\nimport glass from '@/assets/glass.css?inline'\nimport { UserChangeController } from '@/shared/events/user-change'\nimport { defineNativeDialogPresence } from '@/shared/overlay/native-dialog-presence'\nimport { defineScrollLockLease } from '@/shared/scroll-lock/scroll-lock'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-dialog')\nexport class WebUiDialog extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: Boolean, reflect: true, attribute: 'no-scroll-lock' }) noScrollLock = false\n @property({ type: Boolean, reflect: true, attribute: 'no-backdrop-close' }) noBackdropClose = false\n @property({ type: Boolean, reflect: true, attribute: 'no-escape-close' }) noEscapeClose = false\n\n /**\n * Controlled 模式下,Escape 和遮罩点击只派发 `open-change` 请求,\n * 不会自行修改 `open`。Consumer 回写 `open` 后才执行关闭动画。\n * 程序化 API(showModal/close/直接赋值 open)不受此模式影响,始终直通。\n */\n @property({ type: Boolean, reflect: true }) controlled = false\n\n @state() private _hasBody = false\n private readonly _userOpenChange = new UserChangeController()\n\n private readonly _scrollLock = defineScrollLockLease().make()\n private readonly _presence = defineNativeDialogPresence().make({\n getDialog: () => this.dialog,\n isConnected: () => this.isConnected,\n isOpen: () => this.open\n })\n\n private get dialog() {\n return this.shadowRoot?.querySelector('dialog') ?? null\n }\n\n protected override updated(props: PropertyValues) {\n super.updated(props)\n if (!this.isConnected) return\n\n if (props.has('open')) {\n if (this._userOpenChange.consume()) this.emitOpenChange()\n this._presence.sync(this.open)\n }\n if (props.has('open') || props.has('noScrollLock')) this._syncScrollLock()\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this._presence.dispose()\n this._scrollLock.release()\n }\n\n // 以模态方式打开对话框(命令式)\n showModal() {\n if (this.open) return\n this.open = true\n }\n\n close() {\n this.open = false\n }\n\n private handleCancel(e: Event) {\n // 子控件(例如 file input)可能派发冒泡的 cancel;只让 native dialog 自身的 cancel 关闭。\n if (e.target !== e.currentTarget) return\n\n // 保留 top layer 直到视觉退场完成,避免原生关闭跳过退出动画。\n e.preventDefault()\n if (this.noEscapeClose) return\n if (this.controlled) {\n this.emitOpenChange(false)\n return\n }\n this._userOpenChange.mark()\n this.close()\n }\n\n private handleBackdropClick(e: MouseEvent) {\n if (e.target !== (e.currentTarget as HTMLDialogElement)) return\n if (this.noBackdropClose) return\n if (this.controlled) {\n this.emitOpenChange(false)\n return\n }\n this._userOpenChange.mark()\n this.close()\n }\n\n // controlled 下派发关闭请求:detail 固定 false(用户只能请求关闭,打开永远由 Consumer 写)。\n private emitOpenChange(open = this.open) {\n this
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/dialog/index.ts"],"sourcesContent":["import { html, LitElement, type PropertyValues, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport '@/components/button'\nimport glass from '@/assets/glass.css?inline'\nimport { UserChangeController } from '@/shared/events/user-change'\nimport { dispatchOpenChangeEvent } from '@/shared/open-state'\nimport { defineNativeDialogPresence } from '@/shared/overlay/native-dialog-presence'\nimport { defineScrollLockLease } from '@/shared/scroll-lock/scroll-lock'\n\nimport style from './style.css?inline'\n\n@customElement('web-ui-dialog')\nexport class WebUiDialog extends LitElement {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @property({ type: Boolean, reflect: true }) open = false\n @property({ type: Boolean, reflect: true, attribute: 'no-scroll-lock' }) noScrollLock = false\n @property({ type: Boolean, reflect: true, attribute: 'no-backdrop-close' }) noBackdropClose = false\n @property({ type: Boolean, reflect: true, attribute: 'no-escape-close' }) noEscapeClose = false\n\n /**\n * Controlled 模式下,Escape 和遮罩点击只派发 `open-change` 请求,\n * 不会自行修改 `open`。Consumer 回写 `open` 后才执行关闭动画。\n * 程序化 API(showModal/close/直接赋值 open)不受此模式影响,始终直通。\n */\n @property({ type: Boolean, reflect: true }) controlled = false\n\n @state() private _hasBody = false\n private readonly _userOpenChange = new UserChangeController()\n\n private readonly _scrollLock = defineScrollLockLease().make()\n private readonly _presence = defineNativeDialogPresence().make({\n getDialog: () => this.dialog,\n isConnected: () => this.isConnected,\n isOpen: () => this.open\n })\n\n private get dialog() {\n return this.shadowRoot?.querySelector('dialog') ?? null\n }\n\n protected override updated(props: PropertyValues) {\n super.updated(props)\n if (!this.isConnected) return\n\n if (props.has('open')) {\n if (this._userOpenChange.consume()) this.emitOpenChange()\n this._presence.sync(this.open)\n }\n if (props.has('open') || props.has('noScrollLock')) this._syncScrollLock()\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback()\n this._presence.dispose()\n this._scrollLock.release()\n }\n\n // 以模态方式打开对话框(命令式)\n showModal() {\n if (this.open) return\n this.open = true\n }\n\n close() {\n this.open = false\n }\n\n private handleCancel(e: Event) {\n // 子控件(例如 file input)可能派发冒泡的 cancel;只让 native dialog 自身的 cancel 关闭。\n if (e.target !== e.currentTarget) return\n\n // 保留 top layer 直到视觉退场完成,避免原生关闭跳过退出动画。\n e.preventDefault()\n if (this.noEscapeClose) return\n if (this.controlled) {\n this.emitOpenChange(false)\n return\n }\n this._userOpenChange.mark()\n this.close()\n }\n\n private handleBackdropClick(e: MouseEvent) {\n if (e.target !== (e.currentTarget as HTMLDialogElement)) return\n if (this.noBackdropClose) return\n if (this.controlled) {\n this.emitOpenChange(false)\n return\n }\n this._userOpenChange.mark()\n this.close()\n }\n\n // controlled 下派发关闭请求:detail 固定 false(用户只能请求关闭,打开永远由 Consumer 写)。\n private emitOpenChange(open = this.open) {\n dispatchOpenChangeEvent(this, open)\n }\n\n private _onTransitionEnd = (event: TransitionEvent) => {\n this._presence.handleTransitionEnd(event)\n }\n\n private _onNativeClose = () => {\n // 关闭态下的 close 事件只可能是我们自己 finishClosing 排队的异步事件(或冗余的\n // 外部关闭):交给 presence 消费 self-close 标志,避免标志泄漏到下一次真实关闭。\n if (!this.open) {\n this._presence.handleNativeClose()\n return\n }\n\n // 我们自己 dialog.close() 排队的 close 事件是异步任务:正常时序在本关闭会话内\n // 到达,快速「关闭→重开」时它在重新打开之后才到达(过期事件)。两种情况都已\n // 完成清理,由 presence 消费并返回 true,不能当成外部关闭把刚重开的 dialog 关掉。\n if (this._presence.handleNativeClose()) return\n\n // controlled 下原生关闭(如表单 method=\"dialog\")视为未经 Consumer 批准的状态丢失:\n // 恢复受控状态并派发关闭请求,由 Consumer 决定是否关闭。\n if (this.controlled) {\n this._presence.sync(true)\n this.emitOpenChange(false)\n return\n }\n\n this._userOpenChange.mark()\n this.open = false\n }\n\n private _syncScrollLock(isOpen = this.open) {\n this._scrollLock.sync(isOpen && !this.noScrollLock)\n }\n\n private _onBodySlotChange(e: Event) {\n if (!(e.target instanceof HTMLSlotElement)) return\n this._hasBody = e.target.assignedElements().length > 0\n }\n\n override render() {\n return html`\n <dialog\n @cancel=${this.handleCancel}\n @close=${this._onNativeClose}\n @click=${this.handleBackdropClick}\n @transitionend=${this._onTransitionEnd}\n >\n <div class=\"wui-dialog-body wui-glass\">\n ${\n this._hasBody\n ? html`<slot name=\"body\" @slotchange=${this._onBodySlotChange}></slot>`\n : html`\n <slot name=\"body\" @slotchange=${this._onBodySlotChange} hidden></slot>\n <div class=\"title\"><slot name=\"title\"></slot></div>\n <div class=\"desc\"><slot></slot></div>\n <div class=\"wui-dialog-footer\"><slot name=\"footer\"></slot></div>\n `\n }\n </div>\n </dialog>\n `\n }\n\n declare readonly $events: {\n 'open-change': CustomEvent<{ open: boolean }>\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-dialog': WebUiDialog\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/dialog/style.css?inline
|
|
2
|
-
var e = "*,:before,:after{box-sizing:border-box}:host{display:contents}dialog{transform:scale(var(--wui-scale-enter,.97));box-sizing:border-box;
|
|
2
|
+
var e = "*,:before,:after{box-sizing:border-box}:host{display:contents}dialog{transform:scale(var(--wui-scale-enter,.97));box-sizing:border-box;width:min(90vw, var(--wui-dialog-width,360px));max-height:min(90vh,90dvh);color:var(--wui-color-text,#1b1b1b);transition:transform var(--wui-duration-dialog-enter,.32s) var(--wui-ease-dialog,cubic-bezier(.2, 0, 0, 1));background:0 0;border:none;padding:0;font-family:inherit;position:fixed;overflow:visible}dialog::backdrop{opacity:0;background:var(--wui-dialog-overlay-bg,var(--wui-color-backdrop,#0000001f));transition:opacity var(--wui-duration-dialog-enter,.32s) ease}dialog:focus,dialog:focus-visible{outline:none}dialog[open].is-visible{transform:scale(1)}dialog[open].is-closing{pointer-events:none;transition-duration:var(--wui-duration-dialog-exit,.26s)}dialog.is-closing::backdrop{transition-duration:var(--wui-duration-dialog-exit,.26s)}dialog[open].is-visible::backdrop{opacity:1}@media (prefers-reduced-motion:reduce){dialog,dialog[open].is-visible{transition-duration:var(--wui-duration-feedback,.1s);transform:none}}.wui-dialog-body{--wui-internal-glass-shadow:var(--wui-shadow-overlay,2px 16px 40px #0006);--wui-glass-corner-radius:var(--wui-radius-overlay,28px);padding:var(--wui-dialog-padding,20px 24px 24px);border-radius:var(--wui-radius-overlay,28px);opacity:0;background-color:var(--wui-dialog-bg,var(--wui-color-surface-overlay,#f6f6f6d1));-webkit-backdrop-filter:blur(0) saturate(160%) brightness(var(--wui-glass-brightness,1.06));backdrop-filter:blur(0) saturate(160%) brightness(var(--wui-glass-brightness,1.06));transition:opacity var(--wui-duration-dialog-enter,.32s) var(--wui-ease-dialog,cubic-bezier(.2, 0, 0, 1)), -webkit-backdrop-filter var(--wui-duration-dialog-enter,.32s) var(--wui-ease-dialog,cubic-bezier(.2, 0, 0, 1)), backdrop-filter var(--wui-duration-dialog-enter,.32s) var(--wui-ease-dialog,cubic-bezier(.2, 0, 0, 1))}dialog.is-closing .wui-dialog-body{transition-duration:var(--wui-duration-dialog-exit,.26s)}dialog[open].is-visible .wui-dialog-body{opacity:1;-webkit-backdrop-filter:blur(4px) saturate(160%) brightness(var(--wui-glass-brightness,1.06));backdrop-filter:blur(4px) saturate(160%) brightness(var(--wui-glass-brightness,1.06))}@media (prefers-reduced-motion:reduce){dialog.is-closing .wui-dialog-body,dialog[open].is-visible .wui-dialog-body{transition-duration:var(--wui-duration-feedback,.1s)}}.title{margin:0 0 var(--wui-dialog-title-gap,16px);color:var(--wui-color-text,#1b1b1b);padding:0;font-size:18px;font-weight:600;line-height:1.2}.desc{margin:0 0 var(--wui-dialog-desc-gap,24px);color:var(--wui-color-text,#1b1b1b);padding:0;font-size:14px;line-height:1.5}.wui-dialog-footer{gap:var(--wui-dialog-footer-gap,10px);justify-content:var(--wui-dialog-footer-justify,flex-end);flex-direction:column;display:flex}.wui-dialog-footer ::slotted(web-ui-button){width:100%;display:flex}:host([horizontal]) .wui-dialog-footer{gap:12px;justify-content:var(--wui-dialog-footer-justify,center);flex-direction:row}:host([horizontal]) .wui-dialog-footer ::slotted(web-ui-button:not([full])){width:auto}:host([horizontal]) .wui-dialog-footer ::slotted(web-ui-button[full]){flex:1;min-width:0}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as default };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/dialog/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: contents;\n}\n\ndialog {\n transform: scale(var(--wui-scale-enter, 0.97));\n\n overflow: visible;\n\n box-sizing: border-box;\n
|
|
1
|
+
{"version":3,"file":"style.js","names":[],"sources":["../../../src/components/dialog/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: contents;\n}\n\ndialog {\n /* 必须显式 position: fixed:UA 的 dialog:modal 默认就是 fixed,但作者样式若出现\n position: relative(本轮单层重构曾引入)会把它覆盖回文档流——top layer 里的\n modal dialog 变成按文档流定位:渲染在页面顶部(用户看到的“残影”)且跟随页面\n 滚动(“没有固定居中”)。显式写死 fixed 防御未来任何作者类再覆盖。 */\n position: fixed;\n\n /* 本元素不参与 opacity 过渡:opacity < 1 会让 dialog 成为 backdrop root,后代\n backdrop-filter 在该过渡期间被整体禁用。玻璃卡片(.wui-dialog-body)自身\n opacity + backdrop-filter 插值过渡(own opacity 不禁用自身 blur,见下)。 */\n transform: scale(var(--wui-scale-enter, 0.97));\n\n overflow: visible;\n\n box-sizing: border-box;\n width: min(90vw, var(--wui-dialog-width, 360px));\n max-height: 90vh;\n max-height: min(90vh, 90dvh);\n padding: 0;\n border: none;\n\n font-family: inherit;\n color: var(--wui-color-text, #1b1b1b);\n\n background: transparent;\n\n transition: transform var(--wui-duration-dialog-enter, 320ms) var(--wui-ease-dialog, cubic-bezier(0.2, 0, 0, 1));\n\n &::backdrop {\n opacity: 0;\n background: var(--wui-dialog-overlay-bg, var(--wui-color-backdrop, rgb(0 0 0 / 0.12)));\n transition: opacity var(--wui-duration-dialog-enter, 320ms) ease;\n }\n}\n\n/* 面板本身是模态表面,不作为可聚焦控件;Safari showModal() 会把焦点放到 dialog,不应画 UA ring。内部控件保留 focus ring。 */\ndialog:focus,\ndialog:focus-visible {\n outline: none;\n}\n\ndialog[open].is-visible {\n transform: scale(1);\n}\n\ndialog[open].is-closing {\n pointer-events: none;\n transition-duration: var(--wui-duration-dialog-exit, 260ms);\n}\n\ndialog.is-closing::backdrop {\n transition-duration: var(--wui-duration-dialog-exit, 260ms);\n}\n\ndialog[open].is-visible::backdrop {\n opacity: 1;\n}\n\n@media (prefers-reduced-motion: reduce) {\n dialog,\n dialog[open].is-visible {\n transform: none;\n transition-duration: var(--wui-duration-feedback, 100ms);\n }\n}\n\n/* ===== 玻璃卡片主体(样式由 glass.css 提供) ===== */\n\n/* 单层玻璃:卡片自身承担背景/阴影/backdrop-filter。blur(0px) ↔ blur(4px) 平滑插值\n (none↔blur 不可插值才是当年生硬跳变的根因),own opacity 过渡不禁用自身 blur,\n 因此卡片直接 opacity + backdrop-filter 同步过渡即可,无需双层。 */\n.wui-dialog-body {\n --wui-internal-glass-shadow: var(--wui-shadow-overlay, 2px 16px 40px rgb(0 0 0 / 0.4));\n --wui-glass-corner-radius: var(--wui-radius-overlay, 28px);\n padding: var(--wui-dialog-padding, 20px 24px 24px);\n border-radius: var(--wui-radius-overlay, 28px);\n\n opacity: 0;\n background-color: var(--wui-dialog-bg, var(--wui-color-surface-overlay, rgb(246 246 246 / 0.82)));\n\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-backdrop-filter: blur(0) saturate(160%) brightness(var(--wui-glass-brightness, 1.06));\n backdrop-filter: blur(0) saturate(160%) brightness(var(--wui-glass-brightness, 1.06));\n\n transition:\n opacity var(--wui-duration-dialog-enter, 320ms) var(--wui-ease-dialog, cubic-bezier(0.2, 0, 0, 1)),\n -webkit-backdrop-filter var(--wui-duration-dialog-enter, 320ms) var(--wui-ease-dialog, cubic-bezier(0.2, 0, 0, 1)),\n backdrop-filter var(--wui-duration-dialog-enter, 320ms) var(--wui-ease-dialog, cubic-bezier(0.2, 0, 0, 1));\n}\n\ndialog.is-closing .wui-dialog-body {\n transition-duration: var(--wui-duration-dialog-exit, 260ms);\n}\n\ndialog[open].is-visible .wui-dialog-body {\n opacity: 1;\n\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-backdrop-filter: blur(4px) saturate(160%) brightness(var(--wui-glass-brightness, 1.06));\n backdrop-filter: blur(4px) saturate(160%) brightness(var(--wui-glass-brightness, 1.06));\n}\n\n@media (prefers-reduced-motion: reduce) {\n dialog.is-closing .wui-dialog-body,\n dialog[open].is-visible .wui-dialog-body {\n transition-duration: var(--wui-duration-feedback, 100ms);\n }\n}\n\n/* ===== 标题 ===== */\n\n.title {\n margin: 0 0 var(--wui-dialog-title-gap, 16px);\n padding: 0;\n\n font-size: 18px;\n font-weight: 600;\n line-height: 1.2;\n color: var(--wui-color-text, #1b1b1b);\n}\n\n/* ===== 描述 ===== */\n\n.desc {\n margin: 0 0 var(--wui-dialog-desc-gap, 24px);\n padding: 0;\n\n font-size: 14px;\n line-height: 1.5;\n color: var(--wui-color-text, #1b1b1b);\n}\n\n/* ===== 按钮区域 ===== */\n\n.wui-dialog-footer {\n display: flex;\n flex-direction: column;\n gap: var(--wui-dialog-footer-gap, 10px);\n justify-content: var(--wui-dialog-footer-justify, flex-end);\n\n /* ===== 按钮全宽(默认垂直排列) ===== */\n\n & ::slotted(web-ui-button) {\n display: flex;\n width: 100%;\n }\n}\n\n/* ===== horizontal 模式 ===== */\n\n:host([horizontal]) .wui-dialog-footer {\n flex-direction: row;\n gap: 12px;\n justify-content: var(--wui-dialog-footer-justify, center);\n\n /* 非 full 按钮:居中,不拉伸 */\n\n & ::slotted(web-ui-button:not([full])) {\n width: auto;\n }\n\n /* full 按钮:平分剩余空间 */\n\n & ::slotted(web-ui-button[full]) {\n flex: 1;\n min-width: 0;\n }\n}\n"],"mappings":""}
|
|
@@ -3,24 +3,25 @@ import "../icon/index.js";
|
|
|
3
3
|
import t from "../../icons/generated/ooui-close.js";
|
|
4
4
|
import n from "../../assets/glass.js";
|
|
5
5
|
import { normalizeLiteral as r } from "../../shared/normalize/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { dispatchOpenChangeEvent as i } from "../../shared/open-state/index.js";
|
|
7
|
+
import { findNearestTheme as a } from "../../shared/overlay/theme-overlay-scope.js";
|
|
8
|
+
import { defineScrollLockLease as o } from "../../shared/scroll-lock/scroll-lock.js";
|
|
8
9
|
import "../button/index.js";
|
|
9
|
-
import { UserChangeController as
|
|
10
|
-
import { defineNativeDialogPresence as
|
|
11
|
-
import { attachDragGesture as
|
|
12
|
-
import { SPRING_PRESETS as
|
|
13
|
-
import { defineNestedDrawerLayers as
|
|
14
|
-
import
|
|
15
|
-
import { LitElement as
|
|
16
|
-
import { customElement as
|
|
10
|
+
import { UserChangeController as s } from "../../shared/events/user-change.js";
|
|
11
|
+
import { defineNativeDialogPresence as c } from "../../shared/overlay/native-dialog-presence.js";
|
|
12
|
+
import { attachDragGesture as l } from "../../shared/gesture/drag-gesture.js";
|
|
13
|
+
import { SPRING_PRESETS as u, rubberband as d, springOffsets as f } from "../../shared/gesture/physics.js";
|
|
14
|
+
import { defineNestedDrawerLayers as p } from "../../shared/overlay/nested-drawer-layers.js";
|
|
15
|
+
import m from "./style.js";
|
|
16
|
+
import { LitElement as h, html as g, nothing as _, unsafeCSS as v } from "lit";
|
|
17
|
+
import { customElement as y, property as b } from "lit/decorators.js";
|
|
17
18
|
//#region src/components/drawer/index.ts
|
|
18
|
-
var
|
|
19
|
+
var x = [
|
|
19
20
|
"right",
|
|
20
21
|
"left",
|
|
21
22
|
"top",
|
|
22
23
|
"bottom"
|
|
23
|
-
],
|
|
24
|
+
], S = 1 / 3, C = 500, w = 120, T = 16;
|
|
24
25
|
if (typeof CSS < "u" && "registerProperty" in CSS) {
|
|
25
26
|
try {
|
|
26
27
|
CSS.registerProperty({
|
|
@@ -39,13 +40,13 @@ if (typeof CSS < "u" && "registerProperty" in CSS) {
|
|
|
39
40
|
});
|
|
40
41
|
} catch {}
|
|
41
42
|
}
|
|
42
|
-
var
|
|
43
|
+
var E = class extends h {
|
|
43
44
|
constructor(...e) {
|
|
44
|
-
super(...e), this.open = !1, this.noScrollLock = !1, this.noBackdropClose = !1, this.controlled = !1, this._placement = "right", this.heading = "", this.closable = !1, this.headless = !1, this.dialogLabel = "", this.draggable = !1, this._hasHeaderSlot = !1, this._hasFooterSlot = !1, this._userOpenChange = new
|
|
45
|
+
super(...e), this.open = !1, this.noScrollLock = !1, this.noBackdropClose = !1, this.controlled = !1, this._placement = "right", this.heading = "", this.closable = !1, this.headless = !1, this.dialogLabel = "", this.draggable = !1, this._hasHeaderSlot = !1, this._hasFooterSlot = !1, this._userOpenChange = new s(), this._scrollLock = o().make(), this._presence = c().make({
|
|
45
46
|
getDialog: () => this.dialog,
|
|
46
47
|
isConnected: () => this.isConnected,
|
|
47
48
|
isOpen: () => this.open
|
|
48
|
-
}), this._nestedLayers =
|
|
49
|
+
}), this._nestedLayers = p().make({
|
|
49
50
|
getDialog: () => this.dialog,
|
|
50
51
|
getPlacement: () => this._placement
|
|
51
52
|
}), this._dragGesture = null, this._dragInitialOffset = 0, this._dragOffset = 0, this._dragAnimation = null, this._dragAwaitWriteback = !1, this._handleDragWritebackTimeout = () => {
|
|
@@ -67,14 +68,14 @@ var T = class extends m {
|
|
|
67
68
|
};
|
|
68
69
|
}
|
|
69
70
|
static {
|
|
70
|
-
this.styles = [
|
|
71
|
+
this.styles = [v(n), v(m)];
|
|
71
72
|
}
|
|
72
73
|
get placement() {
|
|
73
74
|
return this._placement;
|
|
74
75
|
}
|
|
75
76
|
set placement(e) {
|
|
76
77
|
let t = this._placement;
|
|
77
|
-
this._placement = r(e,
|
|
78
|
+
this._placement = r(e, x, "right"), this.requestUpdate("placement", t);
|
|
78
79
|
}
|
|
79
80
|
get dialog() {
|
|
80
81
|
return this.shadowRoot?.querySelector("dialog") ?? null;
|
|
@@ -102,7 +103,7 @@ var T = class extends m {
|
|
|
102
103
|
return this._measureDragSize() + this._readDrawerInset(e);
|
|
103
104
|
}
|
|
104
105
|
_isReducedMotion() {
|
|
105
|
-
let e =
|
|
106
|
+
let e = a(this);
|
|
106
107
|
if (e) return e.isReducedMotion();
|
|
107
108
|
try {
|
|
108
109
|
return typeof window.matchMedia == "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
@@ -121,18 +122,18 @@ var T = class extends m {
|
|
|
121
122
|
let t = this.dialog;
|
|
122
123
|
if (!t || !t.classList.contains("is-visible")) return;
|
|
123
124
|
let n = getComputedStyle(t).transform, r = n && n !== "none" && typeof DOMMatrixReadOnly == "function" ? new DOMMatrixReadOnly(n)[this._dragAxis === "x" ? "m41" : "m42"] : 0;
|
|
124
|
-
this._dragAnimation?.cancel(), this._dragAnimation = null, this._cancelDragAwait(), this._dragInitialOffset = r * this._dragCloseSign, this._dragOffset = this._dragInitialOffset, t.classList.add("is-dragging"), this._dragGesture =
|
|
125
|
+
this._dragAnimation?.cancel(), this._dragAnimation = null, this._cancelDragAwait(), this._dragInitialOffset = r * this._dragCloseSign, this._dragOffset = this._dragInitialOffset, t.classList.add("is-dragging"), this._dragGesture = l(e, {
|
|
125
126
|
axis: this._dragAxis,
|
|
126
127
|
onMove: (e) => {
|
|
127
128
|
let n = this._dragAxis === "x" ? e.deltaX : e.deltaY, r = this._dragInitialOffset + n * this._dragCloseSign;
|
|
128
|
-
this._dragOffset =
|
|
129
|
+
this._dragOffset = d(r, this._measureDragSize() * .1, .15);
|
|
129
130
|
let i = this._measureDragSize();
|
|
130
|
-
t.classList.toggle("is-drag-close", i > 0 && this._dragOffset > i *
|
|
131
|
+
t.classList.toggle("is-drag-close", i > 0 && this._dragOffset > i * S), this._applyDragOffset(t, this._dragOffset);
|
|
131
132
|
},
|
|
132
133
|
onEnd: (e) => {
|
|
133
134
|
this._dragGesture = null, t.classList.remove("is-dragging", "is-drag-close");
|
|
134
135
|
let n = this._measureDragSize(), r = (this._dragAxis === "x" ? e.velocityX : e.velocityY) * this._dragCloseSign;
|
|
135
|
-
this._dragOffset > n *
|
|
136
|
+
this._dragOffset > n * S || this._dragOffset > 8 && r > C ? this._springToClose(t, r) : this._springRebound(t, r, this._dragOffset);
|
|
136
137
|
},
|
|
137
138
|
onCancel: () => {
|
|
138
139
|
this._dragGesture = null, t.classList.remove("is-dragging", "is-drag-close"), this._springRebound(t, 0, this._dragOffset);
|
|
@@ -168,43 +169,45 @@ var T = class extends m {
|
|
|
168
169
|
o();
|
|
169
170
|
return;
|
|
170
171
|
}
|
|
171
|
-
let s =
|
|
172
|
+
let s = f(n, i, t, u.close), c = s.map((e) => ({
|
|
172
173
|
transform: this._dragAxis === "x" ? `translateX(${e * r}px)` : `translateY(${e * r}px)`,
|
|
173
174
|
"--wui-internal-drag-backdrop-opacity": String(Math.max(0, 1 - e / a))
|
|
174
|
-
})),
|
|
175
|
-
duration:
|
|
175
|
+
})), l = (s.length - 1) * T, d = e.animate(c, {
|
|
176
|
+
duration: l,
|
|
176
177
|
easing: "linear",
|
|
177
178
|
fill: "both"
|
|
178
179
|
});
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
d.onfinish = () => {
|
|
181
|
+
o(), d.cancel();
|
|
181
182
|
};
|
|
182
183
|
}
|
|
183
184
|
_springRebound(e, t, n) {
|
|
184
185
|
this._dragOffset = 0;
|
|
185
186
|
let r = () => {
|
|
186
|
-
|
|
187
|
+
e.style.transform = this._dragAxis === "x" ? "translateX(0px)" : "translateY(0px)", e.style.setProperty("--wui-internal-drag-backdrop-opacity", "1");
|
|
188
|
+
}, i = (t) => {
|
|
189
|
+
this._dragAnimation = null, e.isConnected && (t ? this._clearDragStyles(e) : r(), e.offsetWidth, e.classList.remove("is-dragging"));
|
|
187
190
|
};
|
|
188
191
|
if (this._isReducedMotion() || typeof e.animate != "function" || Math.abs(n) < 1) {
|
|
189
|
-
|
|
192
|
+
e.classList.add("is-dragging"), i(!0);
|
|
190
193
|
return;
|
|
191
194
|
}
|
|
192
|
-
let
|
|
193
|
-
transform: this._dragAxis === "x" ? `translateX(${e *
|
|
194
|
-
"--wui-internal-drag-backdrop-opacity": String(Math.max(0, 1 - e /
|
|
195
|
+
let a = this._dragCloseSign, o = this._measureDragSize(), s = f(n, 0, t, u.rebound), c = s.map((e) => ({
|
|
196
|
+
transform: this._dragAxis === "x" ? `translateX(${e * a}px)` : `translateY(${e * a}px)`,
|
|
197
|
+
"--wui-internal-drag-backdrop-opacity": String(Math.max(0, 1 - e / o))
|
|
195
198
|
}));
|
|
196
199
|
e.classList.add("is-dragging");
|
|
197
|
-
let
|
|
198
|
-
duration:
|
|
200
|
+
let l = (s.length - 1) * T, d = e.animate(c, {
|
|
201
|
+
duration: l,
|
|
199
202
|
easing: "linear",
|
|
200
203
|
fill: "both"
|
|
201
204
|
});
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}, this._dragAnimation =
|
|
205
|
+
d.onfinish = () => {
|
|
206
|
+
i(!1), d.cancel();
|
|
207
|
+
}, this._dragAnimation = d;
|
|
205
208
|
}
|
|
206
209
|
_closeFromDrag() {
|
|
207
|
-
this._closeFromUser(), this.controlled && (this._dragAwaitWriteback = !0, this._dragRequestTimer = setTimeout(this._handleDragWritebackTimeout,
|
|
210
|
+
this._closeFromUser(), this.controlled && (this._dragAwaitWriteback = !0, this._dragRequestTimer = setTimeout(this._handleDragWritebackTimeout, w));
|
|
208
211
|
}
|
|
209
212
|
connectedCallback() {
|
|
210
213
|
super.connectedCallback(), this._hasHeaderSlot = Array.from(this.children).some((e) => e.getAttribute?.("slot") === "header"), this._hasFooterSlot = Array.from(this.children).some((e) => e.getAttribute?.("slot") === "footer");
|
|
@@ -237,6 +240,10 @@ var T = class extends m {
|
|
|
237
240
|
let e = this.dialog;
|
|
238
241
|
e && !this.open ? (e.classList.remove("is-visible"), this._clearDragStyles(e)) : e && this.open && this._springRebound(e, 0, this._dragCloseDistance(e));
|
|
239
242
|
}
|
|
243
|
+
if (!this.open && this._dragAnimation === null && !this._isDragging()) {
|
|
244
|
+
let e = this.dialog;
|
|
245
|
+
e && this._clearDragStyles(e);
|
|
246
|
+
}
|
|
240
247
|
this._presence.sync(this.open), this.open ? this._nestedLayers.register() : this._nestedLayers.unregister();
|
|
241
248
|
}
|
|
242
249
|
(e.has("open") || e.has("noScrollLock")) && this._syncScrollLock();
|
|
@@ -266,7 +273,11 @@ var T = class extends m {
|
|
|
266
273
|
e.preventDefault(), this._closeFromUser();
|
|
267
274
|
}
|
|
268
275
|
handleNativeClose() {
|
|
269
|
-
if (this.open) {
|
|
276
|
+
if (!this.open) {
|
|
277
|
+
this._presence.handleNativeClose();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (!this._presence.handleNativeClose()) {
|
|
270
281
|
if (this._dragAwaitWriteback) {
|
|
271
282
|
this._cancelDragAwait();
|
|
272
283
|
return;
|
|
@@ -275,31 +286,27 @@ var T = class extends m {
|
|
|
275
286
|
this._presence.sync(!0), this.emitOpenChange(!1);
|
|
276
287
|
return;
|
|
277
288
|
}
|
|
278
|
-
this.
|
|
289
|
+
this._userOpenChange.mark(), this.open = !1;
|
|
279
290
|
}
|
|
280
291
|
}
|
|
281
292
|
handleBackdropClick(e) {
|
|
282
293
|
e.target === e.currentTarget && (this.noBackdropClose || this._isDragging() || this._closeFromUser());
|
|
283
294
|
}
|
|
284
295
|
emitOpenChange(e = this.open) {
|
|
285
|
-
this
|
|
286
|
-
detail: { open: e },
|
|
287
|
-
bubbles: !0,
|
|
288
|
-
composed: !0
|
|
289
|
-
}));
|
|
296
|
+
i(this, e);
|
|
290
297
|
}
|
|
291
298
|
_syncScrollLock(e = this.open) {
|
|
292
299
|
this._scrollLock.sync(e && !this.noScrollLock);
|
|
293
300
|
}
|
|
294
301
|
render() {
|
|
295
|
-
let e = this._hasHeaderSlot || !!this.heading, n = this.dialogLabel.trim(), r = !n && !this.headless && e ? "wui-drawer-heading" :
|
|
302
|
+
let e = this._hasHeaderSlot || !!this.heading, n = this.dialogLabel.trim(), r = !n && !this.headless && e ? "wui-drawer-heading" : _, i = this.draggable ? g`
|
|
296
303
|
<div class="wui-drawer-drag-zone" @pointerdown=${this._handleDragPointerDown}>
|
|
297
304
|
<div class="wui-drawer-drag-bar"></div>
|
|
298
305
|
</div>
|
|
299
|
-
` :
|
|
300
|
-
return
|
|
306
|
+
` : _;
|
|
307
|
+
return g`
|
|
301
308
|
<dialog
|
|
302
|
-
aria-label=${n ||
|
|
309
|
+
aria-label=${n || _}
|
|
303
310
|
aria-labelledby=${r}
|
|
304
311
|
@cancel=${this.handleCancel}
|
|
305
312
|
@close=${this.handleNativeClose}
|
|
@@ -307,11 +314,11 @@ var T = class extends m {
|
|
|
307
314
|
@keydown=${this.handleKeydown}
|
|
308
315
|
@transitionend=${this.handleTransitionEnd}
|
|
309
316
|
>
|
|
310
|
-
${this.headless ?
|
|
317
|
+
${this.headless ? g`<slot></slot>${i}` : g`
|
|
311
318
|
<div class="wui-drawer-body wui-glass">
|
|
312
319
|
<div class="wui-drawer-header" id="wui-drawer-heading" ?hidden=${!e}>
|
|
313
320
|
<slot name="header" @slotchange=${this.handleHeaderSlotChange}>
|
|
314
|
-
${this.heading ?
|
|
321
|
+
${this.heading ? g`<span class="wui-drawer-heading">${this.heading}</span>` : _}
|
|
315
322
|
</slot>
|
|
316
323
|
</div>
|
|
317
324
|
<div class="wui-drawer-content">
|
|
@@ -321,7 +328,7 @@ var T = class extends m {
|
|
|
321
328
|
<slot name="footer" @slotchange=${this.handleFooterSlotChange}></slot>
|
|
322
329
|
</div>
|
|
323
330
|
</div>
|
|
324
|
-
${this.closable ?
|
|
331
|
+
${this.closable ? g`
|
|
325
332
|
<web-ui-button
|
|
326
333
|
class="wui-drawer-close"
|
|
327
334
|
@click=${this._closeFromUser}
|
|
@@ -332,44 +339,44 @@ var T = class extends m {
|
|
|
332
339
|
>
|
|
333
340
|
<web-ui-icon size="14" .icon=${t}></web-ui-icon>
|
|
334
341
|
</web-ui-button>
|
|
335
|
-
` :
|
|
342
|
+
` : _}
|
|
336
343
|
${i}
|
|
337
344
|
`}
|
|
338
345
|
</dialog>
|
|
339
346
|
`;
|
|
340
347
|
}
|
|
341
348
|
};
|
|
342
|
-
e([
|
|
349
|
+
e([b({
|
|
343
350
|
type: Boolean,
|
|
344
351
|
reflect: !0
|
|
345
|
-
})],
|
|
352
|
+
})], E.prototype, "open", void 0), e([b({
|
|
346
353
|
type: Boolean,
|
|
347
354
|
reflect: !0,
|
|
348
355
|
attribute: "no-scroll-lock"
|
|
349
|
-
})],
|
|
356
|
+
})], E.prototype, "noScrollLock", void 0), e([b({
|
|
350
357
|
type: Boolean,
|
|
351
358
|
reflect: !0,
|
|
352
359
|
attribute: "no-backdrop-close"
|
|
353
|
-
})],
|
|
360
|
+
})], E.prototype, "noBackdropClose", void 0), e([b({
|
|
354
361
|
type: Boolean,
|
|
355
362
|
reflect: !0
|
|
356
|
-
})],
|
|
363
|
+
})], E.prototype, "controlled", void 0), e([b({
|
|
357
364
|
type: String,
|
|
358
365
|
reflect: !0
|
|
359
|
-
})],
|
|
366
|
+
})], E.prototype, "placement", null), e([b({ type: String })], E.prototype, "heading", void 0), e([b({
|
|
360
367
|
type: Boolean,
|
|
361
368
|
reflect: !0
|
|
362
|
-
})],
|
|
369
|
+
})], E.prototype, "closable", void 0), e([b({
|
|
363
370
|
type: Boolean,
|
|
364
371
|
reflect: !0
|
|
365
|
-
})],
|
|
372
|
+
})], E.prototype, "headless", void 0), e([b({
|
|
366
373
|
type: String,
|
|
367
374
|
attribute: "dialog-label"
|
|
368
|
-
})],
|
|
375
|
+
})], E.prototype, "dialogLabel", void 0), e([b({
|
|
369
376
|
type: Boolean,
|
|
370
377
|
reflect: !0
|
|
371
|
-
})],
|
|
378
|
+
})], E.prototype, "draggable", void 0), E = e([y("web-ui-drawer")], E);
|
|
372
379
|
//#endregion
|
|
373
|
-
export {
|
|
380
|
+
export { E as WebUiDrawer };
|
|
374
381
|
|
|
375
382
|
//# sourceMappingURL=index.js.map
|