@mono-lit/helper 0.0.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/accordion-core-DaNyPWRr.js +277 -0
  2. package/dist/alert-core-DWtHbX_-.js +134 -0
  3. package/dist/breadcrumb-list-core-Dh68T8Cf.js +747 -0
  4. package/dist/{mono-button-CLkHg3WW.js → button-core-DerXg84Q.js} +3 -276
  5. package/dist/button-dropdown-core-DKYEOyjy.js +654 -0
  6. package/dist/button-utils-D5-66M02.js +63 -0
  7. package/dist/card-utils-l80qAmrN.js +312 -0
  8. package/dist/chart-core-DV7hD3ZY.js +801 -0
  9. package/dist/checkbox-utils-DKdrhAzF.js +337 -0
  10. package/dist/chip-utils-DpRrd7Zj.js +403 -0
  11. package/dist/{data-source-controller-C6C4ej_M.js → data-source-controller-DS_JLrmS.js} +1 -1
  12. package/dist/{data-source-options-fxT5QIX4.js → data-source-options-DJUNU26C.js} +6 -6
  13. package/dist/{data-source-read-BL266IW0.js → data-source-read-uKJpRAzx.js} +2 -2
  14. package/dist/date-core-CyuSyvvG.js +734 -0
  15. package/dist/drawer-core-DbFWvNln.js +759 -0
  16. package/dist/dropdown-core-BCH1pK14.js +511 -0
  17. package/dist/dropdown-table-core-SfHUJVFq.js +1342 -0
  18. package/dist/export.js +1 -1
  19. package/dist/{field-path-BabiMrrA.js → field-path-DK2VBWHl.js} +1 -1
  20. package/dist/field-tooltip.css_raw-DVblekCl.js +5 -0
  21. package/dist/{field-validation.css_raw-Cx6SGrfP.js → field-validation.css_raw-BU7C6173.js} +1 -170
  22. package/dist/file-upload-core-Cz_dBQMx.js +624 -0
  23. package/dist/filter-builder-core-DyWjbBP7.js +381 -0
  24. package/dist/{filter-builder-B6Y2mmbM.js → filter-builder-vbqIuPhX.js} +1 -1
  25. package/dist/{filter-eval-ChDSaAUH.js → filter-eval-CqeBnMYh.js} +1 -1
  26. package/dist/{filter-odata-Bi27XUpQ.js → filter-odata-GsczYKNC.js} +1 -1
  27. package/dist/{hydration-flush-BaE9gN3C.js → hydration-flush-Volt9X7Q.js} +2 -1071
  28. package/dist/index.js +11 -11
  29. package/dist/{index.node-DTqDBca7.js → index.node-Csy9zrr1.js} +4 -4
  30. package/dist/index.node.js +11 -11
  31. package/dist/input-utils-BglY-k0H.js +1145 -0
  32. package/dist/menu-core-DkAYuCZ2.js +831 -0
  33. package/dist/modal-core-CSBSPN_m.js +844 -0
  34. package/dist/mono-button-DVvZ03P-.js +280 -0
  35. package/dist/{mono-button.shadow-DqZMpcqY.js → mono-button.shadow-BANxMGln.js} +6 -594
  36. package/dist/{mono-data-chart-NKPdAgVq.js → mono-data-chart-ChF4J9RT.js} +6 -6
  37. package/dist/{mono-data-dropdown-B2iRpJuI.js → mono-data-dropdown-Bgj2PDfm.js} +1 -1
  38. package/dist/{mono-data-grid-llJCX9MC.js → mono-data-grid-DJkp96N-.js} +144 -46
  39. package/dist/{mono-event-BPku9HpS.js → mono-event-CAZf0F_k.js} +14 -9
  40. package/dist/{mono-form-controller-BrA10erm.js → mono-form-controller-DxZLvyg6.js} +2 -1
  41. package/dist/mono-table-checkbox-core-BKOMx8R5.js +5288 -0
  42. package/dist/nav-core-B5qU2dzn.js +225 -0
  43. package/dist/{normalize-error-D93O4q8g.js → normalize-error-BEcd1tmS.js} +2 -2
  44. package/dist/nuxt.js +1 -1
  45. package/dist/otp-core-DXg3vFLh.js +758 -0
  46. package/dist/radio-utils-Dk9Tl1jz.js +319 -0
  47. package/dist/rich-text-editor-core-Ddd_QaLn.js +1280 -0
  48. package/dist/select-utils-BgArYHk8.js +2140 -0
  49. package/dist/sidebar-core-CD6txDo3.js +583 -0
  50. package/dist/slider-core-vcWr321-.js +1014 -0
  51. package/dist/src/components/dropdown-table/dropdown-table-core.d.ts +2 -2
  52. package/dist/src/components/dropdown-table/dropdown-table-types.d.ts +1 -1
  53. package/dist/src/components/dropdown-table/index.d.ts +1 -1
  54. package/dist/src/components/dropdown-table/index.shadow.d.ts +1 -1
  55. package/dist/src/components/dropdown-table/mono-data-dropdown.d.ts +1 -1
  56. package/dist/src/components/form/form-types.d.ts +9 -3
  57. package/dist/src/components/input/input-core.d.ts +1 -1
  58. package/dist/src/components/input/input-types.d.ts +1 -1
  59. package/dist/src/components/otp/otp-core.d.ts +1 -1
  60. package/dist/src/components/select/select-core.d.ts +1 -1
  61. package/dist/src/components/select/select-types.d.ts +1 -1
  62. package/dist/src/components/slider/slider-core.d.ts +1 -1
  63. package/dist/src/components/slider/slider-types.d.ts +1 -1
  64. package/dist/src/components/table/filter-suggestion.d.ts +171 -0
  65. package/dist/src/components/table/index.d.ts +5 -4
  66. package/dist/src/components/table/index.shadow.d.ts +5 -4
  67. package/dist/src/components/table/mono-data-grid.d.ts +22 -3
  68. package/dist/src/components/table/mono-table-empty-core.d.ts +37 -0
  69. package/dist/src/components/table/mono-table-search-core.d.ts +22 -3
  70. package/dist/src/components/table/table-types.d.ts +74 -4
  71. package/dist/src/components/tag-input/tag-input-core.d.ts +1 -1
  72. package/dist/src/components/tag-input/tag-input-types.d.ts +1 -1
  73. package/dist/src/components/textarea/textarea-core.d.ts +1 -1
  74. package/dist/src/composables/mono-event.d.ts +7 -1
  75. package/dist/src/entries/index.d.ts +8 -6
  76. package/dist/src/entries/index.node.d.ts +8 -6
  77. package/dist/src/search/index.d.ts +1 -1
  78. package/dist/src/utils/group-count.d.ts +36 -0
  79. package/dist/switch-utils-CTZ4id2V.js +338 -0
  80. package/dist/tabs-core-r5-B8k_N.js +317 -0
  81. package/dist/tag-input-utils-D2JA90DQ.js +3060 -0
  82. package/dist/textarea-utils-VU1KeXm8.js +821 -0
  83. package/dist/ui/accordion.js +2 -274
  84. package/dist/ui/alert.js +2 -131
  85. package/dist/ui/breadcrumb.js +4 -745
  86. package/dist/ui/button-dropdown.js +4 -652
  87. package/dist/ui/button.js +2 -63
  88. package/dist/ui/card.js +2 -310
  89. package/dist/ui/chart.js +4 -800
  90. package/dist/ui/checkbox.js +4 -335
  91. package/dist/ui/chip.js +4 -402
  92. package/dist/ui/date.js +3 -732
  93. package/dist/ui/drawer.js +3 -757
  94. package/dist/ui/dropdown-table.js +5 -1341
  95. package/dist/ui/dropdown.js +4 -509
  96. package/dist/ui/file-upload.js +3 -622
  97. package/dist/ui/filter.js +5 -380
  98. package/dist/ui/form.js +1 -1
  99. package/dist/ui/index.css +118 -1
  100. package/dist/ui/input.js +3 -1141
  101. package/dist/ui/menu.js +4 -828
  102. package/dist/ui/modal.js +4 -843
  103. package/dist/ui/nav.js +4 -223
  104. package/dist/ui/otp.js +4 -756
  105. package/dist/ui/radio.js +4 -317
  106. package/dist/ui/rich-text-editor.js +4 -1278
  107. package/dist/ui/select.js +5 -2138
  108. package/dist/ui/shadow/accordion.js +4 -273
  109. package/dist/ui/shadow/alert.js +4 -130
  110. package/dist/ui/shadow/breadcrumb.js +5 -744
  111. package/dist/ui/shadow/button-dropdown.js +6 -652
  112. package/dist/ui/shadow/button.js +3 -63
  113. package/dist/ui/shadow/card.js +4 -309
  114. package/dist/ui/shadow/chart.js +6 -1576
  115. package/dist/ui/shadow/checkbox.js +4 -334
  116. package/dist/ui/shadow/chip.js +4 -396
  117. package/dist/ui/shadow/date.js +7 -731
  118. package/dist/ui/shadow/drawer.js +4 -756
  119. package/dist/ui/shadow/dropdown-table.js +8 -1762
  120. package/dist/ui/shadow/dropdown.js +4 -508
  121. package/dist/ui/shadow/file-upload.js +4 -620
  122. package/dist/ui/shadow/filter.js +7 -379
  123. package/dist/ui/shadow/input.js +6 -1140
  124. package/dist/ui/shadow/menu.js +5 -828
  125. package/dist/ui/shadow/modal.js +6 -1063
  126. package/dist/ui/shadow/nav.js +5 -223
  127. package/dist/ui/shadow/otp.js +6 -754
  128. package/dist/ui/shadow/radio.js +4 -316
  129. package/dist/ui/shadow/rich-text-editor.js +4 -1276
  130. package/dist/ui/shadow/select.js +6 -2136
  131. package/dist/ui/shadow/sidebar.js +5 -581
  132. package/dist/ui/shadow/slider.js +5 -1010
  133. package/dist/ui/shadow/switch.js +4 -335
  134. package/dist/ui/shadow/table.js +10 -4501
  135. package/dist/ui/shadow/tabs.js +6 -315
  136. package/dist/ui/shadow/tag-input.js +7 -3057
  137. package/dist/ui/shadow/textarea.js +6 -817
  138. package/dist/ui/sidebar.js +3 -581
  139. package/dist/ui/slider.js +4 -1012
  140. package/dist/ui/switch.js +4 -336
  141. package/dist/ui/table.js +9 -4502
  142. package/dist/ui/tabs.js +4 -315
  143. package/dist/ui/tag-input.js +5 -3058
  144. package/dist/ui/textarea.js +4 -819
  145. package/dist/{vite-CivRCJaf.js → vite-CfW7z2wn.js} +21 -14
  146. package/dist/vite.js +1 -1
  147. package/dist/vue.d.ts +3 -2
  148. package/package.json +10 -11
  149. package/dist/chip-strip-bNfLn52Z.js +0 -215
  150. package/dist/data-source-controller-Dx6IQ2CN.js +0 -243
  151. package/dist/data-source-options-BM4r4PRw.js +0 -558
  152. package/dist/data-source-read-HyBCRg1t.js +0 -242
  153. package/dist/excel-BXzr3uI1.js +0 -784
  154. package/dist/export-ixRdCS2y.js +0 -2388
  155. package/dist/field-tooltip-addon-CWCp19mJ.js +0 -702
  156. package/dist/field-tooltip.css_raw-U5UeTa2d.js +0 -269
  157. package/dist/filter-builder-C0T3pMx2.js +0 -208
  158. package/dist/form-control-core-BbiACMtL.js +0 -226
  159. package/dist/icon-ClxnYhBG.js +0 -19
  160. package/dist/import-Dc4eXC02.js +0 -612
  161. package/dist/light-slots-_no0r2Z-.js +0 -246
  162. package/dist/markdown-uGlE_OfJ.js +0 -20191
  163. package/dist/mono-data-grid-e9ZVBlNN.js +0 -4240
  164. package/dist/normalize-error-BmLbgANw.js +0 -1048
@@ -0,0 +1,844 @@
1
+ import { n as detachEventHandlers, t as applyProps } from "./element-props-xvw0EB7H.js";
2
+ import { i as registerPopupLayer, o as unregisterPopupLayer, r as refreshPopupStack, t as getOpenPopupLayers } from "./popup-stack-C64WCuXq.js";
3
+ import { a as defineHybridPropAliases, i as defineHybridPropAlias, r as booleanStringConverter, s as optionalNumberConverter, t as __decorate } from "./decorate-DbYFpi8R.js";
4
+ import { t as dispatchMonoEvent } from "./mono-event-CAZf0F_k.js";
5
+ import { i as pathOwnedBy } from "./popup-portal-CINuVjNY.js";
6
+ import { n as isBelowBreakpoint, r as resolveAutoFullscreen, t as autoFullscreenConverter } from "./breakpoints-DllybT82.js";
7
+ import { html, isServer, nothing } from "lit";
8
+ import { property, query, state } from "lit/decorators.js";
9
+ import { styleMap } from "lit/directives/style-map.js";
10
+
11
+ //#region src/components/modal/modal-core.ts
12
+ /** Per-instance id seed for the light build's heading ids (they live in the
13
+ * document, so they must be unique). The shadow build scopes ids to its own
14
+ * root and uses a constant — see `_headingIdBase`. */
15
+ let modalIdSeq = 0;
16
+ /**
17
+ * Named dimension presets for the sizing props — `width="lg"`, `max-height="sm"`.
18
+ *
19
+ * Deliberately the same six tokens the `size` prop uses, but a different axis:
20
+ * `size` is the CONTENT scale (padding, type, close button, radius) and never
21
+ * touches the panel's box, while these name a MEASURE. `size="sm" width="xl"` is a
22
+ * compact, wide dialog — mixing the two is the point.
23
+ *
24
+ * Widths carry the same viewport clamp as the default `min(90vw, 520px)`, so a
25
+ * preset can never overflow a phone; `md` reproduces that default exactly. Heights
26
+ * are viewport-relative and match the drawer's top/bottom ladder, so one token means
27
+ * the same thing on both components.
28
+ */
29
+ const WIDTH_PRESETS = {
30
+ xs: "min(90vw, 300px)",
31
+ sm: "min(90vw, 380px)",
32
+ md: "min(90vw, 520px)",
33
+ lg: "min(90vw, 680px)",
34
+ xl: "min(95vw, 880px)",
35
+ xxl: "min(95vw, 1080px)"
36
+ };
37
+ const HEIGHT_PRESETS = {
38
+ xs: "22vh",
39
+ sm: "30vh",
40
+ md: "50vh",
41
+ lg: "70vh",
42
+ xl: "85vh",
43
+ xxl: "95vh"
44
+ };
45
+ /**
46
+ * Normalize a sizing prop to a CSS length string.
47
+ * - a preset token (`"xs"`…`"xxl"`) → the ladder for `axis`
48
+ * - `number` (or numeric string) → `${n}px`
49
+ * - any other non-empty string → passed through verbatim (`"12rem"`, `"80%"`, …)
50
+ * - `null` / `undefined` / `''` → `undefined` (treated as "not set")
51
+ *
52
+ * The token lookup runs before the numeric/passthrough branches, which is safe:
53
+ * no CSS length is spelled `xs`…`xxl`, so there is nothing for it to shadow.
54
+ */
55
+ function toCssSize(value, axis) {
56
+ if (value === null || value === void 0) return void 0;
57
+ if (typeof value === "number") return Number.isFinite(value) ? `${value}px` : void 0;
58
+ const trimmed = String(value).trim();
59
+ if (trimmed === "") return void 0;
60
+ const preset = (axis === "width" ? WIDTH_PRESETS : HEIGHT_PRESETS)[trimmed.toLowerCase()];
61
+ if (preset) return preset;
62
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) return `${trimmed}px`;
63
+ return trimmed;
64
+ }
65
+ /**
66
+ * `MonoModalCore` — render-mode-agnostic logic for `mono-modal`: props/hybrid
67
+ * aliases, the open/close model (`show`/`hide`/`toggle` + `mno-*` events), the
68
+ * `PopupLayer` surface (shared z-stack / scroll-lock / topmost-Escape via the
69
+ * SSR-safe `popup-stack`), draggable-header logic, sizing, and the shared modal
70
+ * markup (`_renderModalBody`). SSR-safe: `popup-stack` no-ops server-side and the
71
+ * `window`/drag access is `isServer`-guarded.
72
+ *
73
+ * Each build supplies the render root + slot/icon strategy:
74
+ * - light (`mono-modal.ts`): renders into a `<body>` portal that IS the
75
+ * `.mono-modal` root, `data-mono-slot` placeholders, UnoCSS `.i-mdi-close`.
76
+ * - shadow (`mono-modal.shadow.ts`): a real shadow root with an inner
77
+ * `.mono-modal` root, native `<slot>`s, inline-SVG ✕ (mirrors dropdown).
78
+ */
79
+ const MonoModalCore = (superClass) => {
80
+ class MonoModalCoreClass extends superClass {
81
+ static {
82
+ this.monoPendingAuto = "never";
83
+ }
84
+ constructor(...args) {
85
+ super(...args);
86
+ this.size = "md";
87
+ this.color = "primary";
88
+ this.title = "";
89
+ this.subtitle = "";
90
+ this.modelValue = false;
91
+ this.dismissible = true;
92
+ this.persistent = false;
93
+ this.overlay = true;
94
+ this.closeOnEscape = true;
95
+ this.closeOnOverlay = true;
96
+ this.lockScroll = true;
97
+ this.draggable = false;
98
+ this.stackable = false;
99
+ this.autoFullscreen = false;
100
+ this.cssClass = {};
101
+ this.cssClassName = "";
102
+ this._slotsCaptured = false;
103
+ this._hasHeadSlotState = false;
104
+ this._hasTitleSlotState = false;
105
+ this._hasSubtitleSlotState = false;
106
+ this._hasBodySlotState = false;
107
+ this._hasFootSlotState = false;
108
+ this._hasModalAbove = false;
109
+ this._dragging = false;
110
+ this._modalZ = 600;
111
+ this._dragX = 0;
112
+ this._dragY = 0;
113
+ this._dragStartX = 0;
114
+ this._dragStartY = 0;
115
+ this._dragOriginX = 0;
116
+ this._dragOriginY = 0;
117
+ this._rootEl = null;
118
+ this.bindRoot = (el) => {
119
+ this._rootEl = el ?? null;
120
+ this._applyRootAttrs(this._rootEl);
121
+ };
122
+ this._outsideBound = false;
123
+ this._outsideArm = null;
124
+ this._openedAt = 0;
125
+ this._onOutsideClick = (event) => {
126
+ if (!this.modelValue || this.overlay) return;
127
+ if (!this.closeOnOverlay || !this.dismissible || this.persistent) return;
128
+ if (event.timeStamp <= this._openedAt) return;
129
+ const layers = getOpenPopupLayers();
130
+ if (layers[layers.length - 1] !== this) return;
131
+ const root = this.renderRoot instanceof Element ? this.renderRoot : null;
132
+ const path = event.composedPath();
133
+ if (pathOwnedBy(path, root ? [this, root] : [this])) return;
134
+ this.hide("overlay", event);
135
+ };
136
+ this._onHeaderPointerDown = (event) => {
137
+ if (isServer || typeof window === "undefined") return;
138
+ if (!this.draggable || this._isFullscreen || this._autoFullscreenActive) return;
139
+ if (event.button !== 0) return;
140
+ if (event.target?.closest?.(".mono-modal-close")) return;
141
+ event.preventDefault();
142
+ this._dragging = true;
143
+ this._dragStartX = event.clientX;
144
+ this._dragStartY = event.clientY;
145
+ this._dragOriginX = this._dragX;
146
+ this._dragOriginY = this._dragY;
147
+ window.addEventListener("pointermove", this._onPointerMove);
148
+ window.addEventListener("pointerup", this._onPointerUp, { once: true });
149
+ window.addEventListener("pointercancel", this._onPointerUp, { once: true });
150
+ };
151
+ this._onPointerMove = (event) => {
152
+ this._dragX = this._dragOriginX + (event.clientX - this._dragStartX);
153
+ this._dragY = this._dragOriginY + (event.clientY - this._dragStartY);
154
+ this._applyDragVars();
155
+ };
156
+ this._onPointerUp = () => {
157
+ if (typeof window !== "undefined") window.removeEventListener("pointermove", this._onPointerMove);
158
+ this._clampIntoViewport();
159
+ this._dragging = false;
160
+ };
161
+ defineHybridPropAliases(this, [
162
+ "modelValue",
163
+ "cssClass",
164
+ "closeOnEscape",
165
+ "closeOnOverlay",
166
+ "lockScroll",
167
+ "autoFullscreen",
168
+ "minWidth",
169
+ "maxWidth",
170
+ "minHeight",
171
+ "maxHeight",
172
+ "zIndex",
173
+ "dataModal"
174
+ ]);
175
+ defineHybridPropAlias(this, "controlModal", "dataModal");
176
+ Object.defineProperty(this, "css-class", {
177
+ get: () => this.cssClass,
178
+ set: (value) => this._setCssClass(value),
179
+ configurable: true,
180
+ enumerable: false
181
+ });
182
+ Object.defineProperty(this, "cssclass", {
183
+ get: () => this.cssClass,
184
+ set: (value) => this._setCssClass(value),
185
+ configurable: true,
186
+ enumerable: false
187
+ });
188
+ }
189
+ static get observedAttributes() {
190
+ return [
191
+ ...super.observedAttributes ?? [],
192
+ "modelvalue",
193
+ "css-class",
194
+ "cssclass"
195
+ ];
196
+ }
197
+ attributeChangedCallback(name, oldValue, newValue) {
198
+ super.attributeChangedCallback(name, oldValue, newValue);
199
+ if (oldValue === newValue) return;
200
+ if (name === "modelvalue") {
201
+ this.modelValue = booleanStringConverter.fromAttribute(newValue);
202
+ return;
203
+ }
204
+ if (name === "css-class" || name === "cssclass") this._setCssClass(newValue);
205
+ }
206
+ _bindController() {
207
+ const next = this.dataModal;
208
+ if (this._boundController === next) return;
209
+ this._unbindController();
210
+ if (!next) return;
211
+ this._boundController = next;
212
+ next._register(this);
213
+ this._controllerUnsub = next.subscribe(() => this._applyControllerProps());
214
+ this._applyControllerProps();
215
+ }
216
+ _unbindController() {
217
+ this._controllerUnsub?.();
218
+ this._controllerUnsub = void 0;
219
+ this._boundController?._unregister(this);
220
+ this._boundController = void 0;
221
+ detachEventHandlers(this);
222
+ }
223
+ _applyControllerProps() {
224
+ const props = this._boundController?.props();
225
+ if (!props) return;
226
+ const { modelValue: _m, "model-value": _mv, modelvalue: _mvl, ...rest } = props;
227
+ applyProps(this, rest);
228
+ this.requestUpdate();
229
+ }
230
+ /** Duck-type marker so the exclusive-close logic targets only OTHER modals in
231
+ * the shared stack (not drawers/dropdowns) without an `instanceof` that the
232
+ * light + shadow builds — distinct classes — would each fail. */
233
+ get _isMonoModal() {
234
+ return true;
235
+ }
236
+ connectedCallback() {
237
+ super.connectedCallback();
238
+ this._bindController();
239
+ if (this.modelValue) this._applyOpenSideEffects();
240
+ }
241
+ disconnectedCallback() {
242
+ this._unbindController();
243
+ this._releaseSideEffects();
244
+ this._teardownDrag();
245
+ super.disconnectedCallback();
246
+ }
247
+ willUpdate(changed) {
248
+ for (const key of [
249
+ "modelValue",
250
+ "dismissible",
251
+ "persistent",
252
+ "overlay",
253
+ "closeOnEscape",
254
+ "closeOnOverlay",
255
+ "lockScroll",
256
+ "draggable",
257
+ "stackable"
258
+ ]) if (typeof this[key] === "string") this[key] = this._toBoolean(this[key]);
259
+ if (changed.has("dataModal")) this._bindController();
260
+ if (changed.has("modelValue")) {
261
+ if (this.modelValue) {
262
+ this._resetDrag();
263
+ this._applyOpenSideEffects();
264
+ } else this._releaseSideEffects();
265
+ }
266
+ super.willUpdate?.(changed);
267
+ }
268
+ updated(changed) {
269
+ super.updated?.(changed);
270
+ if (changed.has("zIndex") && this.modelValue) refreshPopupStack();
271
+ if (changed.has("lockScroll") && this.modelValue) refreshPopupStack();
272
+ if (changed.has("overlay") && this.modelValue) {
273
+ this._syncOutsideClick();
274
+ refreshPopupStack();
275
+ }
276
+ }
277
+ /**
278
+ * Full-screen is value-driven: there's no separate flag. Passing both
279
+ * `width` and `height` as `"100%"` means "fill the viewport", which CSS can't
280
+ * do edge-to-edge on its own (the wrap has padding), so we tag the portal and
281
+ * let the `.fullscreen` rules take over.
282
+ */
283
+ get _isFullscreen() {
284
+ return toCssSize(this.width, "width") === "100%" && toCssSize(this.height, "height") === "100%";
285
+ }
286
+ /** `auto-fullscreen-<bp>` for the CSS to key its media blocks on, else null. */
287
+ get _autoFullscreenClass() {
288
+ const bp = resolveAutoFullscreen(this.autoFullscreen);
289
+ return bp ? `auto-fullscreen-${bp}` : null;
290
+ }
291
+ /**
292
+ * Whether auto-fullscreen is in force RIGHT NOW. Only for pointer handlers that
293
+ * CSS cannot reach — never for rendering, which would reintroduce the SSR
294
+ * viewport-guess problem the `@media` approach exists to avoid.
295
+ */
296
+ get _autoFullscreenActive() {
297
+ const bp = resolveAutoFullscreen(this.autoFullscreen);
298
+ return !!bp && isBelowBreakpoint(bp);
299
+ }
300
+ /** Inline sizing for the panel, overriding the `size` preset / default max-height. */
301
+ _panelSizeStyle() {
302
+ if (this._isFullscreen) return {};
303
+ const style = {};
304
+ const width = toCssSize(this.width, "width");
305
+ const height = toCssSize(this.height, "height");
306
+ const minWidth = toCssSize(this.minWidth, "width");
307
+ const maxWidth = toCssSize(this.maxWidth, "width");
308
+ const minHeight = toCssSize(this.minHeight, "height");
309
+ const maxHeight = toCssSize(this.maxHeight, "height");
310
+ if (width) style.width = width;
311
+ if (height) style.height = height;
312
+ if (minWidth) style["min-width"] = minWidth;
313
+ if (maxWidth) style["max-width"] = maxWidth;
314
+ if (minHeight) style["min-height"] = minHeight;
315
+ if (maxHeight) style["max-height"] = maxHeight;
316
+ return style;
317
+ }
318
+ /** The state-class list for the `.mono-modal` root (light: on the portal;
319
+ * shadow: on the inner root). */
320
+ _computeModalClasses() {
321
+ return [
322
+ "mono-modal",
323
+ this.size,
324
+ this.color,
325
+ this.modelValue ? "open" : "closed",
326
+ this.overlay ? null : "no-overlay",
327
+ this.persistent ? "persistent" : null,
328
+ this.dismissible ? null : "no-dismiss",
329
+ this._isFullscreen ? "fullscreen" : null,
330
+ this._autoFullscreenClass,
331
+ this._hasModalAbove ? "has-modal-above" : null,
332
+ this.draggable ? "draggable" : null,
333
+ this._dragging ? "dragging" : null,
334
+ ...(this.cssClassName ?? "").split(/\s+/),
335
+ ...(this.cssClass?.root ?? "").split(/\s+/)
336
+ ].filter((c) => Boolean(c));
337
+ }
338
+ /**
339
+ * The prop mirrors and the states, for the same root the classes go on — the
340
+ * `<body>` portal in the light build, the inner root in the shadow one. Each
341
+ * is omitted at its default so `:not([mono-size])` means "md" for
342
+ * hand-written markup exactly as it does for the element.
343
+ */
344
+ _computeRootAttrs() {
345
+ return {
346
+ "mono-size": this.size === "md" ? null : this.size,
347
+ "mono-color": this.color === "primary" ? null : this.color,
348
+ "mono-open": this.modelValue ? "" : null,
349
+ "mono-no-overlay": this.overlay ? null : "",
350
+ "mono-persistent": this.persistent ? "" : null,
351
+ "mono-no-dismiss": this.dismissible ? null : "",
352
+ "mono-fullscreen": this._isFullscreen ? "" : null,
353
+ "mono-auto-fullscreen": this._autoFullscreenClass ? this._autoFullscreenClass.replace("auto-fullscreen-", "") : null,
354
+ "mono-has-modal-above": this._hasModalAbove ? "" : null,
355
+ "mono-draggable": this.draggable ? "" : null,
356
+ "mono-dragging": this._dragging ? "" : null,
357
+ "mono-dialog": this.cssClassName?.split(/\s+/).includes("mono-modal-dialog") ? "" : null
358
+ };
359
+ }
360
+ _applyRootAttrs(root) {
361
+ if (!root) return;
362
+ if (!root.hasAttribute("mono-modal")) root.setAttribute("mono-modal", "");
363
+ for (const [name, value] of Object.entries(this._computeRootAttrs())) if (value === null) root.removeAttribute(name);
364
+ else if (root.getAttribute(name) !== value) root.setAttribute(name, value);
365
+ }
366
+ _setCssClass(value) {
367
+ if (value == null) {
368
+ this.cssClass = {};
369
+ this.cssClassName = "";
370
+ return;
371
+ }
372
+ if (typeof value === "object") {
373
+ this.cssClass = value;
374
+ return;
375
+ }
376
+ if (typeof value === "string") {
377
+ const trimmed = value.trim();
378
+ if (!trimmed) {
379
+ this.cssClass = {};
380
+ this.cssClassName = "";
381
+ return;
382
+ }
383
+ if (trimmed.startsWith("{") && trimmed.endsWith("}")) try {
384
+ this.cssClass = JSON.parse(trimmed);
385
+ return;
386
+ } catch {}
387
+ this.cssClassName = trimmed;
388
+ }
389
+ }
390
+ _cls(base, key) {
391
+ const extra = this.cssClass?.[key];
392
+ return extra ? `${base} ${extra}` : base;
393
+ }
394
+ _toBoolean(value) {
395
+ if (typeof value === "boolean") return value;
396
+ if (typeof value === "string") {
397
+ const normalized = value.toLowerCase().trim();
398
+ return normalized === "" || normalized === "true";
399
+ }
400
+ return Boolean(value);
401
+ }
402
+ /**
403
+ * Join the shared stack: assigns z-order, coordinates body-scroll lock, and
404
+ * arms the shared Escape listener. Per-modal scroll-lock / Escape behaviour
405
+ * is owned by the stack manager so nesting works (see composables/popup-stack).
406
+ */
407
+ _applyOpenSideEffects() {
408
+ if (!this.stackable) {
409
+ for (const other of [...getOpenPopupLayers()]) if (other !== this && other._isMonoModal) other.hide?.("manual");
410
+ }
411
+ registerPopupLayer(this);
412
+ this._syncOutsideClick();
413
+ }
414
+ _releaseSideEffects() {
415
+ unregisterPopupLayer(this);
416
+ this._unbindOutsideClick();
417
+ }
418
+ /** Bind when open without an overlay, unbind otherwise — safe to call repeatedly. */
419
+ _syncOutsideClick() {
420
+ if (isServer) return;
421
+ const wanted = this.modelValue && !this.overlay;
422
+ if (wanted && !this._outsideBound && !this._outsideArm) {
423
+ this._openedAt = performance.now();
424
+ this._outsideArm = setTimeout(() => {
425
+ this._outsideArm = null;
426
+ if (!this.modelValue || this.overlay) return;
427
+ document.addEventListener("click", this._onOutsideClick);
428
+ this._outsideBound = true;
429
+ }, 0);
430
+ } else if (!wanted) this._unbindOutsideClick();
431
+ }
432
+ _unbindOutsideClick() {
433
+ if (this._outsideArm) {
434
+ clearTimeout(this._outsideArm);
435
+ this._outsideArm = null;
436
+ }
437
+ if (this._outsideBound) {
438
+ document.removeEventListener("click", this._onOutsideClick);
439
+ this._outsideBound = false;
440
+ }
441
+ }
442
+ /**
443
+ * PopupLayer hook — the path lands in this dialog: the host, its render root,
444
+ * or a popup opened from within. The same test `_onOutsideClick` uses; the stack
445
+ * asks it so a dropdown open BELOW this dialog leaves its clicks alone.
446
+ */
447
+ containsEventPath(path) {
448
+ const root = this.renderRoot instanceof Element ? this.renderRoot : null;
449
+ return pathOwnedBy(path, root ? [this, root] : [this]);
450
+ }
451
+ /** Body-scroll lock is wanted while this modal is open and `lockScroll` is set. */
452
+ get lockBodyScroll() {
453
+ return this.lockScroll;
454
+ }
455
+ /**
456
+ * Whether this modal dims what is beneath it — see `isTopBackdrop` in popup-stack.
457
+ * Only while `overlay` is on: an `overlay="false"` modal stacked above another
458
+ * used to count as a backdrop, so the one below hid its overlay and nothing
459
+ * dimmed the page at all.
460
+ */
461
+ get hasBackdrop() {
462
+ return this.overlay;
463
+ }
464
+ /** Topmost-only Escape from the shared stack — close unless persistent. */
465
+ onStackEscape(event) {
466
+ if (this.closeOnEscape && !this.persistent) this.hide("escape", event);
467
+ }
468
+ /**
469
+ * Called by the stack manager whenever stack order changes. `z` raises this
470
+ * modal above the ones below; when another backdrop layer sits above it
471
+ * (`isTopBackdrop` is false) its own backdrop is hidden so stacked overlays
472
+ * don't compound. A backdrop-less popup above it does not count — nor does an
473
+ * `overlay="false"` modal/drawer (see `hasBackdrop`). Both builds
474
+ * read `_modalZ` into the `.mono-modal` root's `--modal-z`.
475
+ */
476
+ setStackZ(z, isTopBackdrop) {
477
+ this._modalZ = z;
478
+ this._hasModalAbove = !isTopBackdrop;
479
+ }
480
+ /**
481
+ * PopupLayer hook — the level this modal pins itself to, or `undefined` to take
482
+ * the stack's slot. The stack reads it so layers opened ABOVE a pinned modal
483
+ * clear it instead of landing back at the base (see popup-stack).
484
+ *
485
+ * Coerced through `Number` rather than read directly because the prop can arrive
486
+ * as a numeric STRING — a plain `z-index="1500"` attribute goes through the
487
+ * converter, but `el.zIndex = '1500'` (or a framework binding that stringifies)
488
+ * does not.
489
+ *
490
+ * `null` and `''` are screened out FIRST, and that guard is load-bearing:
491
+ * `Number(null)` and `Number('')` are both `0` and both finite, so `:z-index="null"`
492
+ * — Vue's ordinary spelling for "no value" — used to pin the modal to `z-index: 0`
493
+ * and drop it behind the page. Only the attribute path was safe, because
494
+ * `optionalNumberConverter` maps `''`/`null` to `undefined`; the PROPERTY path,
495
+ * which is what Vue actually uses (the hybrid alias makes `'z-index' in el` true),
496
+ * was not.
497
+ */
498
+ get pinnedZ() {
499
+ const raw = this.zIndex;
500
+ if (raw === null || raw === void 0) return void 0;
501
+ if (typeof raw === "string" && raw.trim() === "") return void 0;
502
+ const manual = Number(raw);
503
+ return Number.isFinite(manual) ? manual : void 0;
504
+ }
505
+ /**
506
+ * The level actually published to CSS: the `zIndex` prop when the consumer set
507
+ * one, otherwise the stack's slot.
508
+ */
509
+ get _effectiveZ() {
510
+ return this.pinnedZ ?? this._modalZ;
511
+ }
512
+ /** Push the current offset onto the panel as CSS vars (no Lit re-render). */
513
+ _applyDragVars() {
514
+ const panel = this._panelEl;
515
+ if (!panel) return;
516
+ panel.style.setProperty("--drag-x", `${this._dragX}px`);
517
+ panel.style.setProperty("--drag-y", `${this._dragY}px`);
518
+ }
519
+ /** Recenter the panel — called on each open so drags don't persist. */
520
+ _resetDrag() {
521
+ this._dragX = 0;
522
+ this._dragY = 0;
523
+ this._applyDragVars();
524
+ }
525
+ /**
526
+ * After a drop, pull the panel back so it sits fully inside the viewport
527
+ * ("the maximum location is the inner window"). If the panel is larger than
528
+ * the viewport, pin its top-left corner.
529
+ */
530
+ _clampIntoViewport() {
531
+ const panel = this._panelEl;
532
+ if (!panel || typeof window === "undefined") return;
533
+ const rect = panel.getBoundingClientRect();
534
+ const vw = window.innerWidth;
535
+ const vh = window.innerHeight;
536
+ let dx = 0;
537
+ if (rect.width >= vw) dx = -rect.left;
538
+ else if (rect.left < 0) dx = -rect.left;
539
+ else if (rect.right > vw) dx = vw - rect.right;
540
+ let dy = 0;
541
+ if (rect.height >= vh) dy = -rect.top;
542
+ else if (rect.top < 0) dy = -rect.top;
543
+ else if (rect.bottom > vh) dy = vh - rect.bottom;
544
+ if (dx === 0 && dy === 0) return;
545
+ this._dragX += dx;
546
+ this._dragY += dy;
547
+ this._applyDragVars();
548
+ }
549
+ _teardownDrag() {
550
+ if (typeof window === "undefined") return;
551
+ window.removeEventListener("pointermove", this._onPointerMove);
552
+ window.removeEventListener("pointerup", this._onPointerUp);
553
+ window.removeEventListener("pointercancel", this._onPointerUp);
554
+ }
555
+ /**
556
+ * Every open-state change emits `toggle` (historically `mno-click`, which is
557
+ * kept), then the transition-specific `open` / `close`. `toggle` rather than
558
+ * a plain `click`: a real click from inside the panel already bubbles to the
559
+ * host on its own, and this is not one — it is a state change.
560
+ * Mirrors mono-drawer's event surface. Note: only programmatic state changes
561
+ * (`show`/`hide`/`toggle` and the overlay/✕/Escape handlers) call this —
562
+ * parent-driven opens via `model-value` go through `willUpdate` and emit
563
+ * nothing, so a controlled parent never gets an echo of its own change.
564
+ */
565
+ _emitChange(detail) {
566
+ this._boundController?._report(detail.value, detail.source);
567
+ dispatchMonoEvent(this, "click", detail, { alias: "toggle" });
568
+ if (detail.value && !detail.oldValue) dispatchMonoEvent(this, "open", detail);
569
+ else if (!detail.value && detail.oldValue) dispatchMonoEvent(this, "close", detail);
570
+ }
571
+ show(source = "manual", sourceEvent) {
572
+ if (this.modelValue) return;
573
+ const oldValue = this.modelValue;
574
+ this.modelValue = true;
575
+ this._emitChange({
576
+ modelValue: true,
577
+ currentValue: true,
578
+ oldValue,
579
+ value: true,
580
+ source,
581
+ sourceEvent
582
+ });
583
+ }
584
+ hide(source = "manual", sourceEvent) {
585
+ if (!this.modelValue) return;
586
+ const oldValue = this.modelValue;
587
+ this.modelValue = false;
588
+ this._emitChange({
589
+ modelValue: false,
590
+ currentValue: false,
591
+ oldValue,
592
+ value: false,
593
+ source,
594
+ sourceEvent
595
+ });
596
+ }
597
+ toggle(source = "manual", sourceEvent) {
598
+ if (this.modelValue) this.hide(source, sourceEvent);
599
+ else this.show(source, sourceEvent);
600
+ }
601
+ _handleClose(event) {
602
+ if (!this.dismissible) return;
603
+ this.hide("close", event);
604
+ }
605
+ _handleOverlayClick(event) {
606
+ if (!this.closeOnOverlay || !this.dismissible || this.persistent || !this.overlay) return;
607
+ this.hide("overlay", event);
608
+ }
609
+ /** Title / subtitle / heading-column presence, shared by the head render and
610
+ * the dialog's `aria-labelledby` / `aria-describedby`. */
611
+ get _headingState() {
612
+ const title = !!this.title || this._hasTitleSlotState;
613
+ const subtitle = !!this.subtitle || this._hasSubtitleSlotState;
614
+ return {
615
+ title,
616
+ subtitle,
617
+ heading: this._hasHeadSlotState || title || subtitle
618
+ };
619
+ }
620
+ /**
621
+ * Prefix of the heading ids (`<base>-heading` / `-title` / `-subtitle`). The
622
+ * light build's panel lives in the document, so the ids must be unique per
623
+ * instance; the shadow build overrides this with a constant (ids are scoped to
624
+ * its own root, and a counter would differ between server and client).
625
+ */
626
+ get _headingIdBase() {
627
+ this._idSeq ??= ++modalIdSeq;
628
+ return `mono-modal-${this._idSeq}`;
629
+ }
630
+ /** `aria-labelledby` / `aria-describedby` for the `role="dialog"` root. A
631
+ * `slot="header"` labels the dialog with its whole column; otherwise the
632
+ * title labels it and the subtitle describes it. */
633
+ _headingAria() {
634
+ const s = this._headingState;
635
+ const base = this._headingIdBase;
636
+ if (this._hasHeadSlotState) return { labelledby: `${base}-heading` };
637
+ return {
638
+ labelledby: s.title ? `${base}-title` : void 0,
639
+ describedby: s.subtitle ? `${base}-subtitle` : void 0
640
+ };
641
+ }
642
+ _renderHead() {
643
+ const s = this._headingState;
644
+ const hasDefaultHeader = s.heading || this.dismissible;
645
+ if (!hasDefaultHeader && !this._slotsAlwaysRender) return nothing;
646
+ const base = this._headingIdBase;
647
+ const heading = html`
648
+ <div
649
+ class=${this._cls("mono-modal-title", "title")}
650
+ mono-title
651
+ id=${`${base}-title`}
652
+ ?mono-empty=${!s.title}
653
+ >${this._slotOutlet("title", this.title || nothing)}</div>
654
+ <div
655
+ class=${this._cls("mono-modal-subtitle", "subtitle")}
656
+ mono-subtitle
657
+ id=${`${base}-subtitle`}
658
+ ?mono-empty=${!s.subtitle}
659
+ >${this._slotOutlet("subtitle", this.subtitle || nothing)}</div>
660
+ `;
661
+ return html`
662
+ <div
663
+ class=${this._cls("mono-modal-head", "head")}
664
+ mono-header
665
+ ?mono-empty=${!hasDefaultHeader}
666
+ ?mono-no-subtitle=${!s.subtitle && !this._hasHeadSlotState}
667
+ @pointerdown=${this._onHeaderPointerDown}
668
+ >
669
+ <div
670
+ class=${this._cls("mono-modal-heading", "heading")}
671
+ mono-heading
672
+ id=${`${base}-heading`}
673
+ ?mono-empty=${!s.heading}
674
+ >
675
+ ${this._slotOutlet("head", heading)}
676
+ </div>
677
+ ${this.dismissible ? html`
678
+ <button
679
+ type="button"
680
+ class=${this._cls("mono-modal-close", "close")}
681
+ mono-close
682
+ aria-label="Close"
683
+ @click=${this._handleClose}
684
+ >
685
+ ${this.renderIcon("close")}
686
+ </button>
687
+ ` : nothing}
688
+ </div>
689
+ `;
690
+ }
691
+ _renderFoot() {
692
+ if (!this._hasFootSlotState && !this._slotsAlwaysRender) return nothing;
693
+ return html`
694
+ <div
695
+ class=${this._cls("mono-modal-foot", "foot")}
696
+ mono-footer
697
+ ?mono-empty=${!this._hasFootSlotState}
698
+ >
699
+ ${this._slotOutlet("foot")}
700
+ </div>
701
+ `;
702
+ }
703
+ /** Shared modal markup (overlay + panel-wrap + panel + head/body/foot). The
704
+ * light build renders this directly into the portal (which IS `.mono-modal`);
705
+ * the shadow build wraps it in an inner `.mono-modal` root. */
706
+ _renderModalBody() {
707
+ return html`
708
+ <div
709
+ class=${this._cls("mono-modal-overlay", "overlay")}
710
+ mono-overlay
711
+ @click=${this._handleOverlayClick}
712
+ ></div>
713
+ <div class="mono-modal-panel-wrap" mono-panel-wrap @click=${this._handleOverlayClick}>
714
+ <div
715
+ class=${this._cls("mono-modal-panel", "panel")}
716
+ mono-panel
717
+ style=${styleMap(this._panelSizeStyle())}
718
+ role="document"
719
+ @click=${(e) => e.stopPropagation()}
720
+ >
721
+ ${this._renderHead()}
722
+ <div class=${this._cls("mono-modal-body", "body")} mono-body>
723
+ ${this._slotOutlet("body")}
724
+ </div>
725
+ ${this._renderFoot()}
726
+ </div>
727
+ </div>
728
+ `;
729
+ }
730
+ /** Whether the slot regions render even when empty. Light: no (omit empty
731
+ * regions). Shadow: yes — the native `<slot>`s must exist to project DSD
732
+ * content + be scanned (hidden via `[data-empty]` when empty). */
733
+ get _slotsAlwaysRender() {
734
+ return false;
735
+ }
736
+ _hasSlot(name) {
737
+ return name === "head" ? this._hasHeadSlotState : name === "title" ? this._hasTitleSlotState : name === "subtitle" ? this._hasSubtitleSlotState : name === "body" ? this._hasBodySlotState : this._hasFootSlotState;
738
+ }
739
+ _setSlotState(name, has) {
740
+ if (name === "head") this._hasHeadSlotState = has;
741
+ else if (name === "title") this._hasTitleSlotState = has;
742
+ else if (name === "subtitle") this._hasSubtitleSlotState = has;
743
+ else if (name === "body") this._hasBodySlotState = has;
744
+ else this._hasFootSlotState = has;
745
+ }
746
+ /**
747
+ * Slot outlet. Light build (default): a `data-mono-slot` placeholder the
748
+ * captured light-DOM nodes are re-parented into when present, else the
749
+ * `fallback`. Shadow build overrides this with a native `<slot name>`.
750
+ */
751
+ _slotOutlet(name, fallback = nothing) {
752
+ return this._hasSlot(name) ? html`<span data-mono-slot=${name}></span>` : html`${fallback}`;
753
+ }
754
+ /** Close ✕. Light (default): UnoCSS icon span. Shadow overrides → inline SVG
755
+ * (global `.i-mdi-close` can't reach a shadow root). */
756
+ renderIcon(_name) {
757
+ return html`<span class="mono-icon i-mdi-close" aria-hidden="true"></span>`;
758
+ }
759
+ }
760
+ __decorate([property({ type: String })], MonoModalCoreClass.prototype, "size", void 0);
761
+ __decorate([property({ type: String })], MonoModalCoreClass.prototype, "color", void 0);
762
+ __decorate([property({ type: String })], MonoModalCoreClass.prototype, "title", void 0);
763
+ __decorate([property({ type: String })], MonoModalCoreClass.prototype, "subtitle", void 0);
764
+ __decorate([property({
765
+ attribute: "model-value",
766
+ reflect: true,
767
+ converter: booleanStringConverter
768
+ })], MonoModalCoreClass.prototype, "modelValue", void 0);
769
+ __decorate([property({
770
+ reflect: true,
771
+ converter: booleanStringConverter
772
+ })], MonoModalCoreClass.prototype, "dismissible", void 0);
773
+ __decorate([property({
774
+ reflect: true,
775
+ converter: booleanStringConverter
776
+ })], MonoModalCoreClass.prototype, "persistent", void 0);
777
+ __decorate([property({
778
+ reflect: true,
779
+ converter: booleanStringConverter
780
+ })], MonoModalCoreClass.prototype, "overlay", void 0);
781
+ __decorate([property({
782
+ attribute: "close-on-escape",
783
+ converter: booleanStringConverter
784
+ })], MonoModalCoreClass.prototype, "closeOnEscape", void 0);
785
+ __decorate([property({
786
+ attribute: "close-on-overlay",
787
+ converter: booleanStringConverter
788
+ })], MonoModalCoreClass.prototype, "closeOnOverlay", void 0);
789
+ __decorate([property({
790
+ attribute: "lock-scroll",
791
+ converter: booleanStringConverter
792
+ })], MonoModalCoreClass.prototype, "lockScroll", void 0);
793
+ __decorate([property({
794
+ reflect: true,
795
+ converter: booleanStringConverter
796
+ })], MonoModalCoreClass.prototype, "draggable", void 0);
797
+ __decorate([property({
798
+ reflect: true,
799
+ converter: booleanStringConverter
800
+ })], MonoModalCoreClass.prototype, "stackable", void 0);
801
+ __decorate([property({
802
+ attribute: "auto-fullscreen",
803
+ converter: autoFullscreenConverter
804
+ })], MonoModalCoreClass.prototype, "autoFullscreen", void 0);
805
+ __decorate([property({ attribute: false })], MonoModalCoreClass.prototype, "cssClass", void 0);
806
+ __decorate([property({ attribute: false })], MonoModalCoreClass.prototype, "cssClassName", void 0);
807
+ __decorate([property({ attribute: false })], MonoModalCoreClass.prototype, "dataModal", void 0);
808
+ __decorate([property({ type: String })], MonoModalCoreClass.prototype, "width", void 0);
809
+ __decorate([property({ type: String })], MonoModalCoreClass.prototype, "height", void 0);
810
+ __decorate([property({
811
+ attribute: "z-index",
812
+ converter: optionalNumberConverter
813
+ })], MonoModalCoreClass.prototype, "zIndex", void 0);
814
+ __decorate([property({
815
+ type: String,
816
+ attribute: "min-width"
817
+ })], MonoModalCoreClass.prototype, "minWidth", void 0);
818
+ __decorate([property({
819
+ type: String,
820
+ attribute: "max-width"
821
+ })], MonoModalCoreClass.prototype, "maxWidth", void 0);
822
+ __decorate([property({
823
+ type: String,
824
+ attribute: "min-height"
825
+ })], MonoModalCoreClass.prototype, "minHeight", void 0);
826
+ __decorate([property({
827
+ type: String,
828
+ attribute: "max-height"
829
+ })], MonoModalCoreClass.prototype, "maxHeight", void 0);
830
+ __decorate([state()], MonoModalCoreClass.prototype, "_slotsCaptured", void 0);
831
+ __decorate([state()], MonoModalCoreClass.prototype, "_hasHeadSlotState", void 0);
832
+ __decorate([state()], MonoModalCoreClass.prototype, "_hasTitleSlotState", void 0);
833
+ __decorate([state()], MonoModalCoreClass.prototype, "_hasSubtitleSlotState", void 0);
834
+ __decorate([state()], MonoModalCoreClass.prototype, "_hasBodySlotState", void 0);
835
+ __decorate([state()], MonoModalCoreClass.prototype, "_hasFootSlotState", void 0);
836
+ __decorate([state()], MonoModalCoreClass.prototype, "_hasModalAbove", void 0);
837
+ __decorate([state()], MonoModalCoreClass.prototype, "_dragging", void 0);
838
+ __decorate([state()], MonoModalCoreClass.prototype, "_modalZ", void 0);
839
+ __decorate([query(".mono-modal-panel")], MonoModalCoreClass.prototype, "_panelEl", void 0);
840
+ return MonoModalCoreClass;
841
+ };
842
+
843
+ //#endregion
844
+ export { MonoModalCore as t };