@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.
Files changed (187) hide show
  1. package/README.CN.md +285 -93
  2. package/README.md +266 -87
  3. package/dist/assets/glass.js +1 -1
  4. package/dist/assets/glass.js.map +1 -1
  5. package/dist/assets/menu-portal.js +1 -1
  6. package/dist/assets/menu-portal.js.map +1 -1
  7. package/dist/assets/overlay-motion.js +1 -1
  8. package/dist/assets/overlay-motion.js.map +1 -1
  9. package/dist/components/autocomplete/index.d.ts +367 -4
  10. package/dist/components/autocomplete/index.js +87 -80
  11. package/dist/components/autocomplete/index.js.map +1 -1
  12. package/dist/components/autocomplete/style.js +1 -1
  13. package/dist/components/autocomplete/style.js.map +1 -1
  14. package/dist/components/avatar/style.js +1 -1
  15. package/dist/components/avatar/style.js.map +1 -1
  16. package/dist/components/back-top/style.js +1 -1
  17. package/dist/components/back-top/style.js.map +1 -1
  18. package/dist/components/badge/style.js +1 -1
  19. package/dist/components/badge/style.js.map +1 -1
  20. package/dist/components/button/index.js +36 -32
  21. package/dist/components/button/index.js.map +1 -1
  22. package/dist/components/button/style.js +1 -1
  23. package/dist/components/button/style.js.map +1 -1
  24. package/dist/components/button-group/style.js +1 -1
  25. package/dist/components/button-group/style.js.map +1 -1
  26. package/dist/components/checkbox/index.d.ts +366 -5
  27. package/dist/components/checkbox/index.js +19 -31
  28. package/dist/components/checkbox/index.js.map +1 -1
  29. package/dist/components/checkbox/style.js +1 -1
  30. package/dist/components/checkbox/style.js.map +1 -1
  31. package/dist/components/checkbox-group/index.d.ts +366 -4
  32. package/dist/components/checkbox-group/index.js +16 -25
  33. package/dist/components/checkbox-group/index.js.map +1 -1
  34. package/dist/components/collapse/index.d.ts +29 -1
  35. package/dist/components/collapse/index.js +105 -46
  36. package/dist/components/collapse/index.js.map +1 -1
  37. package/dist/components/collapse/style.js +1 -1
  38. package/dist/components/collapse/style.js.map +1 -1
  39. package/dist/components/context-menu/index.d.ts +7 -14
  40. package/dist/components/context-menu/index.js +113 -164
  41. package/dist/components/context-menu/index.js.map +1 -1
  42. package/dist/components/dialog/index.js +26 -25
  43. package/dist/components/dialog/index.js.map +1 -1
  44. package/dist/components/dialog/style.js +1 -1
  45. package/dist/components/dialog/style.js.map +1 -1
  46. package/dist/components/drawer/index.js +71 -64
  47. package/dist/components/drawer/index.js.map +1 -1
  48. package/dist/components/drawer/style.js +1 -1
  49. package/dist/components/drawer/style.js.map +1 -1
  50. package/dist/components/dropdown/index.d.ts +6 -14
  51. package/dist/components/dropdown/index.js +100 -156
  52. package/dist/components/dropdown/index.js.map +1 -1
  53. package/dist/components/dropdown-header/style.js +1 -1
  54. package/dist/components/dropdown-header/style.js.map +1 -1
  55. package/dist/components/dropdown-item/style.js +1 -1
  56. package/dist/components/dropdown-item/style.js.map +1 -1
  57. package/dist/components/empty/style.js +1 -1
  58. package/dist/components/empty/style.js.map +1 -1
  59. package/dist/components/image-preview/index.d.ts +58 -0
  60. package/dist/components/image-preview/index.js +481 -0
  61. package/dist/components/image-preview/index.js.map +1 -0
  62. package/dist/components/image-preview/style.js +6 -0
  63. package/dist/components/image-preview/style.js.map +1 -0
  64. package/dist/components/index.d.ts +1 -0
  65. package/dist/components/index.js +20 -19
  66. package/dist/components/input/index.d.ts +366 -5
  67. package/dist/components/input/index.js +35 -47
  68. package/dist/components/input/index.js.map +1 -1
  69. package/dist/components/input/style.js +1 -1
  70. package/dist/components/input/style.js.map +1 -1
  71. package/dist/components/input-number/index.d.ts +366 -5
  72. package/dist/components/input-number/index.js +31 -44
  73. package/dist/components/input-number/index.js.map +1 -1
  74. package/dist/components/input-number/style.js +1 -1
  75. package/dist/components/input-number/style.js.map +1 -1
  76. package/dist/components/layout/index.d.ts +1 -1
  77. package/dist/components/layout/index.js +5 -3
  78. package/dist/components/layout/index.js.map +1 -1
  79. package/dist/components/layout/style.js +1 -1
  80. package/dist/components/layout/style.js.map +1 -1
  81. package/dist/components/option/style.js +1 -1
  82. package/dist/components/option/style.js.map +1 -1
  83. package/dist/components/popover/index.d.ts +1 -0
  84. package/dist/components/popover/index.js +55 -60
  85. package/dist/components/popover/index.js.map +1 -1
  86. package/dist/components/popover/style.js +1 -1
  87. package/dist/components/popover/style.js.map +1 -1
  88. package/dist/components/radio/index.d.ts +366 -5
  89. package/dist/components/radio/index.js +21 -31
  90. package/dist/components/radio/index.js.map +1 -1
  91. package/dist/components/radio/style.js +1 -1
  92. package/dist/components/radio/style.js.map +1 -1
  93. package/dist/components/radio-group/index.d.ts +366 -4
  94. package/dist/components/radio-group/index.js +16 -25
  95. package/dist/components/radio-group/index.js.map +1 -1
  96. package/dist/components/segmented/index.d.ts +366 -4
  97. package/dist/components/segmented/index.js +28 -35
  98. package/dist/components/segmented/index.js.map +1 -1
  99. package/dist/components/segmented/style.js +1 -1
  100. package/dist/components/segmented/style.js.map +1 -1
  101. package/dist/components/segmented-trigger/index.js +17 -15
  102. package/dist/components/segmented-trigger/index.js.map +1 -1
  103. package/dist/components/segmented-trigger/style.js +1 -1
  104. package/dist/components/segmented-trigger/style.js.map +1 -1
  105. package/dist/components/select/index.d.ts +368 -5
  106. package/dist/components/select/index.js +71 -68
  107. package/dist/components/select/index.js.map +1 -1
  108. package/dist/components/select/style.js +1 -1
  109. package/dist/components/select/style.js.map +1 -1
  110. package/dist/components/slider/index.d.ts +366 -5
  111. package/dist/components/slider/index.js +40 -50
  112. package/dist/components/slider/index.js.map +1 -1
  113. package/dist/components/slider/style.js +1 -1
  114. package/dist/components/slider/style.js.map +1 -1
  115. package/dist/components/spinner/style.js +1 -1
  116. package/dist/components/spinner/style.js.map +1 -1
  117. package/dist/components/svg-draw-lines/index.js +1 -1
  118. package/dist/components/svg-draw-lines/index.js.map +1 -1
  119. package/dist/components/switch/index.d.ts +366 -5
  120. package/dist/components/switch/index.js +28 -38
  121. package/dist/components/switch/index.js.map +1 -1
  122. package/dist/components/switch/style.js +1 -1
  123. package/dist/components/switch/style.js.map +1 -1
  124. package/dist/components/textarea/index.d.ts +366 -5
  125. package/dist/components/textarea/index.js +43 -57
  126. package/dist/components/textarea/index.js.map +1 -1
  127. package/dist/components/textarea/style.js +1 -1
  128. package/dist/components/textarea/style.js.map +1 -1
  129. package/dist/components/theme/index.js +1 -1
  130. package/dist/components/theme/index.js.map +1 -1
  131. package/dist/components/theme/style.js +1 -1
  132. package/dist/components/theme/style.js.map +1 -1
  133. package/dist/components/toast/manager.js +2 -2
  134. package/dist/components/toast/manager.js.map +1 -1
  135. package/dist/components/toast/style.js +1 -1
  136. package/dist/components/toast/style.js.map +1 -1
  137. package/dist/components/tooltip/index.d.ts +1 -0
  138. package/dist/components/tooltip/index.js +43 -58
  139. package/dist/components/tooltip/index.js.map +1 -1
  140. package/dist/components/tooltip/style.js +1 -1
  141. package/dist/components/tooltip/style.js.map +1 -1
  142. package/dist/icons/generated/radix-icons-reset.d.ts +6 -0
  143. package/dist/icons/generated/radix-icons-reset.js +10 -0
  144. package/dist/icons/generated/radix-icons-reset.js.map +1 -0
  145. package/dist/icons/index.d.ts +1 -0
  146. package/dist/icons/index.js +2 -1
  147. package/dist/shared/focus/pointer-focus.js +37 -0
  148. package/dist/shared/focus/pointer-focus.js.map +1 -0
  149. package/dist/shared/form-association/index.js +31 -4
  150. package/dist/shared/form-association/index.js.map +1 -1
  151. package/dist/shared/gesture/drag-gesture.js +53 -30
  152. package/dist/shared/gesture/drag-gesture.js.map +1 -1
  153. package/dist/shared/gesture/pinch-gesture.js +84 -0
  154. package/dist/shared/gesture/pinch-gesture.js.map +1 -0
  155. package/dist/shared/group-management/index.js.map +1 -1
  156. package/dist/shared/menu-behavior/index.js +112 -0
  157. package/dist/shared/menu-behavior/index.js.map +1 -0
  158. package/dist/shared/menu-portal/menu-portal.js.map +1 -1
  159. package/dist/shared/open-state/index.js +12 -0
  160. package/dist/shared/open-state/index.js.map +1 -0
  161. package/dist/shared/option-portal/combobox-shell.js +43 -0
  162. package/dist/shared/option-portal/combobox-shell.js.map +1 -0
  163. package/dist/shared/option-portal/index.js +22 -21
  164. package/dist/shared/option-portal/index.js.map +1 -1
  165. package/dist/shared/overlay/anchored-panel.js +33 -30
  166. package/dist/shared/overlay/anchored-panel.js.map +1 -1
  167. package/dist/shared/overlay/composition.js +57 -0
  168. package/dist/shared/overlay/composition.js.map +1 -0
  169. package/dist/shared/overlay/lifecycle.js +41 -0
  170. package/dist/shared/overlay/lifecycle.js.map +1 -0
  171. package/dist/shared/overlay/native-dialog-presence.js +15 -15
  172. package/dist/shared/overlay/native-dialog-presence.js.map +1 -1
  173. package/dist/shared/{theme → overlay}/overlay-root.js +1 -1
  174. package/dist/shared/overlay/overlay-root.js.map +1 -0
  175. package/dist/shared/overlay/overlay.js +43 -41
  176. package/dist/shared/overlay/overlay.js.map +1 -1
  177. package/dist/shared/overlay/placement-props.js +19 -0
  178. package/dist/shared/overlay/placement-props.js.map +1 -0
  179. package/dist/shared/overlay/portal.js +6 -4
  180. package/dist/shared/overlay/portal.js.map +1 -1
  181. package/dist/shared/overlay/positioning-generation.js +20 -0
  182. package/dist/shared/overlay/positioning-generation.js.map +1 -0
  183. package/dist/shared/{theme/theme-scope.js → overlay/theme-overlay-scope.js} +2 -2
  184. package/dist/shared/overlay/theme-overlay-scope.js.map +1 -0
  185. package/package.json +6 -10
  186. package/dist/shared/theme/overlay-root.js.map +0 -1
  187. 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 { defineScrollLockLease as n } from "../../shared/scroll-lock/scroll-lock.js";
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 r } from "../../shared/events/user-change.js";
6
- import { defineNativeDialogPresence as i } from "../../shared/overlay/native-dialog-presence.js";
7
- import a from "./style.js";
8
- import { LitElement as o, html as s, unsafeCSS as c } from "lit";
9
- import { customElement as l, property as u, state as d } from "lit/decorators.js";
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 f = class extends o {
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 r(), this._scrollLock = n().make(), this._presence = i().make({
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._presence.handleNativeClose(), this._userOpenChange.mark(), this.open = !1;
30
+ this._userOpenChange.mark(), this.open = !1;
26
31
  }
27
32
  };
28
33
  }
29
34
  static {
30
- this.styles = [c(t), c(a)];
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.dispatchEvent(new CustomEvent("open-change", {
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 s`
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 ? s`<slot name="body" @slotchange=${this._onBodySlotChange}></slot>` : s`
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([u({
99
+ e([d({
99
100
  type: Boolean,
100
101
  reflect: !0
101
- })], f.prototype, "open", void 0), e([u({
102
+ })], p.prototype, "open", void 0), e([d({
102
103
  type: Boolean,
103
104
  reflect: !0,
104
105
  attribute: "no-scroll-lock"
105
- })], f.prototype, "noScrollLock", void 0), e([u({
106
+ })], p.prototype, "noScrollLock", void 0), e([d({
106
107
  type: Boolean,
107
108
  reflect: !0,
108
109
  attribute: "no-backdrop-close"
109
- })], f.prototype, "noBackdropClose", void 0), e([u({
110
+ })], p.prototype, "noBackdropClose", void 0), e([d({
110
111
  type: Boolean,
111
112
  reflect: !0,
112
113
  attribute: "no-escape-close"
113
- })], f.prototype, "noEscapeClose", void 0), e([u({
114
+ })], p.prototype, "noEscapeClose", void 0), e([d({
114
115
  type: Boolean,
115
116
  reflect: !0
116
- })], f.prototype, "controlled", void 0), e([d()], f.prototype, "_hasBody", void 0), f = e([l("web-ui-dialog")], f);
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 { f as WebUiDialog };
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.dispatchEvent(\n new CustomEvent('open-change', {\n detail: { open },\n bubbles: true,\n composed: true\n })\n )\n }\n\n private _onTransitionEnd = (event: TransitionEvent) => {\n this._presence.handleTransitionEnd(event)\n }\n\n private _onNativeClose = () => {\n if (!this.open) 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._presence.handleNativeClose()\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
+ {"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;max-width:min(90vw, var(--wui-dialog-max-width,360px));max-height:90vh;color:var(--wui-color-text,#1b1b1b);opacity:0;transition:opacity var(--wui-duration-overlay-enter,.18s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1)), transform var(--wui-duration-overlay-enter,.18s) var(--wui-ease-enter,cubic-bezier(.23, 1, .32, 1));background:0 0;border:none;padding:0;font-family:inherit;overflow:visible}dialog::backdrop{opacity:0;background:var(--wui-dialog-overlay-bg,var(--wui-color-backdrop,#0000001a));transition:opacity var(--wui-duration-overlay-enter,.18s) ease}dialog[open].is-visible{opacity:1;transform:scale(1)}dialog.is-closing{pointer-events:none;transition-duration:var(--wui-duration-overlay-exit,.14s)}dialog.is-closing::backdrop{transition-duration:var(--wui-duration-overlay-exit,.14s)}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:32px;background-color:var(--wui-dialog-bg,var(--wui-color-surface-overlay,#f6f6f6e0));border-radius:32px;padding:20px 24px 24px}.title{color:var(--wui-color-text,#1b1b1b);margin:0 0 16px;padding:0;font-size:18px;font-weight:600;line-height:1.2}.desc{color:var(--wui-color-text,#1b1b1b);margin:0 0 24px;padding:0;font-size:14px;line-height:1.5}.wui-dialog-footer{flex-direction:column;gap:10px;display:flex}.wui-dialog-footer ::slotted(web-ui-button){width:100%;display:flex}:host([horizontal]) .wui-dialog-footer{flex-direction:row;justify-content:center;gap:12px}: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}";
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 max-width: min(90vw, var(--wui-dialog-max-width, 360px));\n max-height: 90vh;\n padding: 0;\n border: none;\n\n font-family: inherit;\n color: var(--wui-color-text, #1b1b1b);\n\n opacity: 0;\n background: transparent;\n\n transition:\n opacity var(--wui-duration-overlay-enter, 180ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1)),\n transform var(--wui-duration-overlay-enter, 180ms) var(--wui-ease-enter, cubic-bezier(0.23, 1, 0.32, 1));\n\n &::backdrop {\n opacity: 0;\n background: var(--wui-dialog-overlay-bg, var(--wui-color-backdrop, rgb(0 0 0 / 0.1)));\n transition: opacity var(--wui-duration-overlay-enter, 180ms) ease;\n }\n}\n\ndialog[open].is-visible {\n transform: scale(1);\n opacity: 1;\n}\n\ndialog.is-closing {\n pointer-events: none;\n transition-duration: var(--wui-duration-overlay-exit, 140ms);\n}\n\ndialog.is-closing::backdrop {\n transition-duration: var(--wui-duration-overlay-exit, 140ms);\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.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: 32px;\n padding: 20px 24px 24px;\n border-radius: 32px;\n background-color: var(--wui-dialog-bg, var(--wui-color-surface-overlay, rgb(246 246 246 / 0.88)));\n}\n\n/* ===== 标题 ===== */\n\n.title {\n margin: 0 0 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 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: 10px;\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: 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":""}
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 { findNearestTheme as i } from "../../shared/theme/theme-scope.js";
7
- import { defineScrollLockLease as a } from "../../shared/scroll-lock/scroll-lock.js";
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 o } from "../../shared/events/user-change.js";
10
- import { defineNativeDialogPresence as s } from "../../shared/overlay/native-dialog-presence.js";
11
- import { attachDragGesture as c } from "../../shared/gesture/drag-gesture.js";
12
- import { SPRING_PRESETS as l, rubberband as u, springOffsets as d } from "../../shared/gesture/physics.js";
13
- import { defineNestedDrawerLayers as f } from "../../shared/overlay/nested-drawer-layers.js";
14
- import p from "./style.js";
15
- import { LitElement as m, html as h, nothing as g, unsafeCSS as _ } from "lit";
16
- import { customElement as v, property as y } from "lit/decorators.js";
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 b = [
19
+ var x = [
19
20
  "right",
20
21
  "left",
21
22
  "top",
22
23
  "bottom"
23
- ], x = 1 / 3, S = 500, C = 120, w = 16;
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 T = class extends m {
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 o(), this._scrollLock = a().make(), this._presence = s().make({
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 = f().make({
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 = [_(n), _(p)];
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, b, "right"), this.requestUpdate("placement", t);
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 = i(this);
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 = c(e, {
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 = u(r, this._measureDragSize() * .1, .15);
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 * x), this._applyDragOffset(t, this._dragOffset);
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 * x || this._dragOffset > 8 && r > S ? this._springToClose(t, r) : this._springRebound(t, r, this._dragOffset);
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 = d(n, i, t, l.close), c = s.map((e) => ({
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
- })), u = (s.length - 1) * w, f = e.animate(c, {
175
- duration: u,
175
+ })), l = (s.length - 1) * T, d = e.animate(c, {
176
+ duration: l,
176
177
  easing: "linear",
177
178
  fill: "both"
178
179
  });
179
- f.onfinish = () => {
180
- f.cancel(), o();
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
- this._dragAnimation = null, e.classList.remove("is-dragging"), this._clearDragStyles(e);
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
- r();
192
+ e.classList.add("is-dragging"), i(!0);
190
193
  return;
191
194
  }
192
- let i = this._dragCloseSign, a = this._measureDragSize(), o = d(n, 0, t, l.rebound), s = o.map((e) => ({
193
- transform: this._dragAxis === "x" ? `translateX(${e * i}px)` : `translateY(${e * i}px)`,
194
- "--wui-internal-drag-backdrop-opacity": String(Math.max(0, 1 - e / a))
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 c = (o.length - 1) * w, u = e.animate(s, {
198
- duration: c,
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
- u.onfinish = () => {
203
- u.cancel(), r();
204
- }, this._dragAnimation = u;
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, C));
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._presence.handleNativeClose(), this._userOpenChange.mark(), this.open = !1;
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.dispatchEvent(new CustomEvent("open-change", {
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" : g, i = this.draggable ? h`
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
- ` : g;
300
- return h`
306
+ ` : _;
307
+ return g`
301
308
  <dialog
302
- aria-label=${n || g}
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 ? h`<slot></slot>${i}` : h`
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 ? h`<span class="wui-drawer-heading">${this.heading}</span>` : g}
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 ? h`
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
- ` : g}
342
+ ` : _}
336
343
  ${i}
337
344
  `}
338
345
  </dialog>
339
346
  `;
340
347
  }
341
348
  };
342
- e([y({
349
+ e([b({
343
350
  type: Boolean,
344
351
  reflect: !0
345
- })], T.prototype, "open", void 0), e([y({
352
+ })], E.prototype, "open", void 0), e([b({
346
353
  type: Boolean,
347
354
  reflect: !0,
348
355
  attribute: "no-scroll-lock"
349
- })], T.prototype, "noScrollLock", void 0), e([y({
356
+ })], E.prototype, "noScrollLock", void 0), e([b({
350
357
  type: Boolean,
351
358
  reflect: !0,
352
359
  attribute: "no-backdrop-close"
353
- })], T.prototype, "noBackdropClose", void 0), e([y({
360
+ })], E.prototype, "noBackdropClose", void 0), e([b({
354
361
  type: Boolean,
355
362
  reflect: !0
356
- })], T.prototype, "controlled", void 0), e([y({
363
+ })], E.prototype, "controlled", void 0), e([b({
357
364
  type: String,
358
365
  reflect: !0
359
- })], T.prototype, "placement", null), e([y({ type: String })], T.prototype, "heading", void 0), e([y({
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
- })], T.prototype, "closable", void 0), e([y({
369
+ })], E.prototype, "closable", void 0), e([b({
363
370
  type: Boolean,
364
371
  reflect: !0
365
- })], T.prototype, "headless", void 0), e([y({
372
+ })], E.prototype, "headless", void 0), e([b({
366
373
  type: String,
367
374
  attribute: "dialog-label"
368
- })], T.prototype, "dialogLabel", void 0), e([y({
375
+ })], E.prototype, "dialogLabel", void 0), e([b({
369
376
  type: Boolean,
370
377
  reflect: !0
371
- })], T.prototype, "draggable", void 0), T = e([v("web-ui-drawer")], T);
378
+ })], E.prototype, "draggable", void 0), E = e([y("web-ui-drawer")], E);
372
379
  //#endregion
373
- export { T as WebUiDrawer };
380
+ export { E as WebUiDrawer };
374
381
 
375
382
  //# sourceMappingURL=index.js.map