@ionic/core 8.7.17-dev.11767891829.1a63afa3 → 8.7.17-dev.11767895575.16ea7cef

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 (42) hide show
  1. package/components/content.js +8 -96
  2. package/components/ion-tab-bar.js +23 -3
  3. package/components/modal.js +12 -213
  4. package/components/popover.js +11 -83
  5. package/dist/cjs/ion-app_8.cjs.entry.js +20 -107
  6. package/dist/cjs/ion-modal.cjs.entry.js +12 -213
  7. package/dist/cjs/ion-popover.cjs.entry.js +11 -83
  8. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +23 -3
  9. package/dist/collection/components/content/content.css +0 -10
  10. package/dist/collection/components/content/content.js +6 -94
  11. package/dist/collection/components/modal/gestures/sheet.js +1 -3
  12. package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -3
  13. package/dist/collection/components/modal/modal.ios.css +4 -0
  14. package/dist/collection/components/modal/modal.js +7 -205
  15. package/dist/collection/components/modal/modal.md.css +4 -0
  16. package/dist/collection/components/popover/animations/ios.enter.js +5 -21
  17. package/dist/collection/components/popover/animations/md.enter.js +5 -30
  18. package/dist/collection/components/popover/utils.js +1 -32
  19. package/dist/collection/components/tab-bar/tab-bar.js +23 -3
  20. package/dist/docs.json +1 -1
  21. package/dist/esm/ion-app_8.entry.js +9 -96
  22. package/dist/esm/ion-modal.entry.js +12 -213
  23. package/dist/esm/ion-popover.entry.js +11 -83
  24. package/dist/esm/ion-tab-bar_2.entry.js +23 -3
  25. package/dist/ionic/ionic.esm.js +1 -1
  26. package/dist/ionic/p-172a579f.entry.js +4 -0
  27. package/dist/ionic/p-732b2fd6.entry.js +4 -0
  28. package/dist/ionic/p-91840a80.entry.js +4 -0
  29. package/dist/ionic/p-f9061316.entry.js +4 -0
  30. package/dist/types/components/content/content.d.ts +0 -24
  31. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  32. package/dist/types/components/modal/gestures/swipe-to-close.d.ts +1 -1
  33. package/dist/types/components/modal/modal.d.ts +0 -45
  34. package/dist/types/components/popover/utils.d.ts +0 -2
  35. package/dist/types/components/tab-bar/tab-bar.d.ts +1 -0
  36. package/hydrate/index.js +52 -385
  37. package/hydrate/index.mjs +52 -385
  38. package/package.json +1 -1
  39. package/dist/ionic/p-7268efa5.entry.js +0 -4
  40. package/dist/ionic/p-968a55d1.entry.js +0 -4
  41. package/dist/ionic/p-d9fd799f.entry.js +0 -4
  42. package/dist/ionic/p-ec9ca3fe.entry.js +0 -4
@@ -648,8 +648,6 @@ export const calculateWindowAdjustment = (side, coordTop, coordLeft, bodyPadding
648
648
  let bottom;
649
649
  let originX = contentOriginX;
650
650
  let originY = contentOriginY;
651
- let checkSafeAreaTop = false;
652
- let checkSafeAreaBottom = false;
653
651
  let checkSafeAreaLeft = false;
654
652
  let checkSafeAreaRight = false;
655
653
  const triggerTop = triggerCoordinates
@@ -694,18 +692,10 @@ export const calculateWindowAdjustment = (side, coordTop, coordLeft, bodyPadding
694
692
  * We chose 12 here so that the popover position looks a bit nicer as
695
693
  * it is not right up against the edge of the screen.
696
694
  */
697
- top = Math.max(bodyPadding, triggerTop - contentHeight - triggerHeight - (arrowHeight - 1));
695
+ top = Math.max(12, triggerTop - contentHeight - triggerHeight - (arrowHeight - 1));
698
696
  arrowTop = top + contentHeight;
699
697
  originY = 'bottom';
700
698
  addPopoverBottomClass = true;
701
- /**
702
- * If the popover is positioned near the top edge, account for safe area.
703
- * This ensures the popover doesn't overlap with status bars or notches.
704
- */
705
- if (top <= bodyPadding + safeAreaMargin) {
706
- checkSafeAreaTop = true;
707
- top = bodyPadding;
708
- }
709
699
  /**
710
700
  * If not enough room for popover to appear
711
701
  * above trigger, then cut it off.
@@ -713,35 +703,14 @@ export const calculateWindowAdjustment = (side, coordTop, coordLeft, bodyPadding
713
703
  }
714
704
  else {
715
705
  bottom = bodyPadding;
716
- /**
717
- * When the popover is pinned to the bottom, account for safe area.
718
- * This ensures the popover doesn't overlap with home indicators
719
- * or navigation bars (e.g., Android API 36+ edge-to-edge).
720
- */
721
- checkSafeAreaBottom = true;
722
706
  }
723
707
  }
724
- /**
725
- * Final check: If the popover extends into any safe-area region,
726
- * ensure the corresponding flag is set regardless of side.
727
- * This handles cases where a side-positioned popover (left/right)
728
- * still needs bottom safe-area padding because it extends into that region.
729
- */
730
- const popoverBottom = bottom !== undefined ? bodyHeight - bottom : top + contentHeight;
731
- if (popoverBottom + safeAreaMargin > bodyHeight) {
732
- checkSafeAreaBottom = true;
733
- }
734
- if (top < safeAreaMargin) {
735
- checkSafeAreaTop = true;
736
- }
737
708
  return {
738
709
  top,
739
710
  left,
740
711
  bottom,
741
712
  originX,
742
713
  originY,
743
- checkSafeAreaTop,
744
- checkSafeAreaBottom,
745
714
  checkSafeAreaLeft,
746
715
  checkSafeAreaRight,
747
716
  arrowTop,
@@ -11,6 +11,7 @@ import { getIonMode } from "../../global/ionic-global";
11
11
  export class TabBar {
12
12
  constructor() {
13
13
  this.keyboardCtrl = null;
14
+ this.keyboardCtrlPromise = null;
14
15
  this.didLoad = false;
15
16
  this.keyboardVisible = false;
16
17
  /**
@@ -46,7 +47,7 @@ export class TabBar {
46
47
  }
47
48
  }
48
49
  async connectedCallback() {
49
- this.keyboardCtrl = await createKeyboardController(async (keyboardOpen, waitForResize) => {
50
+ const promise = createKeyboardController(async (keyboardOpen, waitForResize) => {
50
51
  /**
51
52
  * If the keyboard is hiding, then we need to wait
52
53
  * for the webview to resize. Otherwise, the tab bar
@@ -57,21 +58,40 @@ export class TabBar {
57
58
  }
58
59
  this.keyboardVisible = keyboardOpen; // trigger re-render by updating state
59
60
  });
61
+ this.keyboardCtrlPromise = promise;
62
+ const keyboardCtrl = await promise;
63
+ /**
64
+ * Only assign if this is still the current promise.
65
+ * Otherwise, a new connectedCallback has started or
66
+ * disconnectedCallback was called, so destroy this instance.
67
+ */
68
+ if (this.keyboardCtrlPromise === promise) {
69
+ this.keyboardCtrl = keyboardCtrl;
70
+ this.keyboardCtrlPromise = null;
71
+ }
72
+ else {
73
+ keyboardCtrl.destroy();
74
+ }
60
75
  }
61
76
  disconnectedCallback() {
77
+ if (this.keyboardCtrlPromise) {
78
+ this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
79
+ this.keyboardCtrlPromise = null;
80
+ }
62
81
  if (this.keyboardCtrl) {
63
82
  this.keyboardCtrl.destroy();
83
+ this.keyboardCtrl = null;
64
84
  }
65
85
  }
66
86
  render() {
67
87
  const { color, translucent, keyboardVisible } = this;
68
88
  const mode = getIonMode(this);
69
89
  const shouldHide = keyboardVisible && this.el.getAttribute('slot') !== 'top';
70
- return (h(Host, { key: '388ec37ce308035bab78d6c9a016bb616e9517a9', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
90
+ return (h(Host, { key: '9daf4e2acaff6e3ce3878cf9dd5109fb1afbbebe', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
71
91
  [mode]: true,
72
92
  'tab-bar-translucent': translucent,
73
93
  'tab-bar-hidden': shouldHide,
74
- }) }, h("slot", { key: 'ce10ade2b86725e24f3254516483eeedd8ecb16a' })));
94
+ }) }, h("slot", { key: '1d15aa2da8501e8e7eff11ad4a491478be845c43' })));
75
95
  }
76
96
  static get is() { return "ion-tab-bar"; }
77
97
  static get encapsulation() { return "shadow"; }
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-01-08T17:05:41",
2
+ "timestamp": "2026-01-08T18:08:20",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.38.0",
@@ -1,10 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, h, e as config, d as Host, g as getElement, f as printIonWarning, c as createEvent, i as forceUpdate, a as readTask, w as writeTask, j as printIonError } from './index-C8IsBmNU.js';
4
+ import { r as registerInstance, h, e as config, d as Host, g as getElement, f as printIonWarning, c as createEvent, a as readTask, i as forceUpdate, w as writeTask, j as printIonError } from './index-C8IsBmNU.js';
5
5
  import { shouldUseCloseWatcher } from './hardware-back-button-CPLxO-Ev.js';
6
6
  import { b as getIonMode, a as isPlatform } from './ionic-global-CDrldh-5.js';
7
- import { w as win } from './index-ZjP4CjeZ.js';
8
7
  import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, s as shallowEqualStringMap } from './helpers-DEn3pfjm.js';
9
8
  import { i as isRTL } from './dir-C53feagD.js';
10
9
  import { c as createColorClasses, h as hostContext } from './theme-DiVJyqlX.js';
@@ -14,6 +13,7 @@ import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
14
13
  import { a as attachComponent, d as detachComponent } from './framework-delegate-BYawdMXj.js';
15
14
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
16
15
  import { t as transition } from './index-r2D9DEro.js';
16
+ import './index-ZjP4CjeZ.js';
17
17
  import './keyboard-CUw4ekVy.js';
18
18
  import './capacitor-CFERIeaU.js';
19
19
 
@@ -152,7 +152,7 @@ Buttons.style = {
152
152
  md: buttonsMdCss
153
153
  };
154
154
 
155
- const contentCss = ":host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:\"\"}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}:host(.safe-area-top) #background-content,:host(.safe-area-top) .inner-scroll{top:var(--ion-safe-area-top, 0px)}:host(.safe-area-bottom) #background-content,:host(.safe-area-bottom) .inner-scroll{bottom:var(--ion-safe-area-bottom, 0px)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}";
155
+ const contentCss = ":host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:\"\"}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}";
156
156
 
157
157
  const Content = class {
158
158
  constructor(hostRef) {
@@ -169,12 +169,6 @@ const Content = class {
169
169
  this.isMainContent = true;
170
170
  this.resizeTimeout = null;
171
171
  this.inheritedAttributes = {};
172
- /**
173
- * Track whether this content has sibling header/footer elements.
174
- * When absent, we need to apply safe-area padding directly.
175
- */
176
- this.hasHeader = false;
177
- this.hasFooter = false;
178
172
  this.tabsElement = null;
179
173
  // Detail is used in a hot loop in the scroll event, by allocating it here
180
174
  // V8 will be able to inline any read/write to it since it's a monomorphic class.
@@ -229,13 +223,7 @@ const Content = class {
229
223
  this.inheritedAttributes = inheritAriaAttributes(this.el);
230
224
  }
231
225
  connectedCallback() {
232
- var _a;
233
- // Content is "main" if not inside menu/popover/modal and not nested in another ion-content
234
- this.isMainContent =
235
- this.el.closest('ion-menu, ion-popover, ion-modal') === null &&
236
- ((_a = this.el.parentElement) === null || _a === void 0 ? void 0 : _a.closest('ion-content')) === null;
237
- // Detect sibling header/footer for safe-area handling
238
- this.detectSiblingElements();
226
+ this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;
239
227
  /**
240
228
  * The fullscreen content offsets need to be
241
229
  * computed after the tab bar has loaded. Since
@@ -266,86 +254,13 @@ const Content = class {
266
254
  * bubbles, we can catch any instances of child tab bars loading by listening
267
255
  * on IonTabs.
268
256
  */
269
- this.tabsLoadCallback = () => {
270
- this.resize();
271
- // Re-detect footer when tab bar loads (it may not exist during initial detection)
272
- this.updateSiblingDetection();
273
- forceUpdate(this);
274
- };
257
+ this.tabsLoadCallback = () => this.resize();
275
258
  closestTabs.addEventListener('ionTabBarLoaded', this.tabsLoadCallback);
276
259
  }
277
260
  }
278
261
  }
279
- /**
280
- * Detects sibling ion-header and ion-footer elements and sets up
281
- * a mutation observer to handle dynamic changes (e.g., conditional rendering).
282
- */
283
- detectSiblingElements() {
284
- this.updateSiblingDetection();
285
- // Watch for dynamic header/footer changes (common in React conditional rendering)
286
- const parent = this.el.parentElement;
287
- if (parent && !this.parentMutationObserver && win !== undefined && 'MutationObserver' in win) {
288
- this.parentMutationObserver = new MutationObserver(() => {
289
- const prevHasHeader = this.hasHeader;
290
- const prevHasFooter = this.hasFooter;
291
- this.updateSiblingDetection();
292
- // Only trigger re-render if header/footer detection actually changed
293
- if (prevHasHeader !== this.hasHeader || prevHasFooter !== this.hasFooter) {
294
- forceUpdate(this);
295
- }
296
- });
297
- this.parentMutationObserver.observe(parent, { childList: true });
298
- }
299
- }
300
- /**
301
- * Updates hasHeader/hasFooter based on current DOM state.
302
- * Checks both direct siblings and elements wrapped in custom components
303
- * (e.g., <my-header><ion-header>...</ion-header></my-header>).
304
- */
305
- updateSiblingDetection() {
306
- const parent = this.el.parentElement;
307
- if (parent) {
308
- // First check for direct ion-header/ion-footer siblings
309
- this.hasHeader = parent.querySelector(':scope > ion-header') !== null;
310
- this.hasFooter = parent.querySelector(':scope > ion-footer') !== null;
311
- // If not found, check if any sibling contains them (wrapped components)
312
- if (!this.hasHeader) {
313
- this.hasHeader = this.siblingContainsElement(parent, 'ion-header');
314
- }
315
- if (!this.hasFooter) {
316
- this.hasFooter = this.siblingContainsElement(parent, 'ion-footer');
317
- }
318
- }
319
- // If no footer found, check if we're inside ion-tabs which has ion-tab-bar
320
- if (!this.hasFooter) {
321
- const tabs = this.el.closest('ion-tabs');
322
- if (tabs) {
323
- this.hasFooter = tabs.querySelector(':scope > ion-tab-bar') !== null;
324
- }
325
- }
326
- }
327
- /**
328
- * Checks if any sibling element of ion-content contains the specified element.
329
- * Only searches one level deep to avoid finding elements in nested pages.
330
- */
331
- siblingContainsElement(parent, tagName) {
332
- for (const sibling of parent.children) {
333
- // Skip ion-content itself
334
- if (sibling === this.el)
335
- continue;
336
- // Check if this sibling contains the target element as an immediate child
337
- if (sibling.querySelector(`:scope > ${tagName}`) !== null) {
338
- return true;
339
- }
340
- }
341
- return false;
342
- }
343
262
  disconnectedCallback() {
344
- var _a;
345
263
  this.onScrollEnd();
346
- // Clean up mutation observer to prevent memory leaks
347
- (_a = this.parentMutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
348
- this.parentMutationObserver = undefined;
349
264
  if (hasLazyBuild(this.el)) {
350
265
  /**
351
266
  * The event listener and tabs caches need to
@@ -592,28 +507,26 @@ const Content = class {
592
507
  }
593
508
  }
594
509
  render() {
595
- const { fixedSlotPlacement, hasFooter, hasHeader, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
510
+ const { fixedSlotPlacement, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
596
511
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
597
512
  const mode = getIonMode(this);
598
513
  const forceOverscroll = this.shouldForceOverscroll();
599
514
  const transitionShadow = mode === 'ios';
600
515
  this.resize();
601
- return (h(Host, Object.assign({ key: 'f7218f733e4022a30875441bd949747537d28aa1', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
516
+ return (h(Host, Object.assign({ key: 'cd8781f848d8dc926fe66f43d43c49564425a507', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
602
517
  [mode]: true,
603
518
  'content-sizing': hostContext('ion-popover', this.el),
604
519
  overscroll: forceOverscroll,
605
520
  [`content-${rtl}`]: true,
606
- 'safe-area-top': isMainContent && !hasHeader,
607
- 'safe-area-bottom': isMainContent && !hasFooter,
608
521
  }), style: {
609
522
  '--offset-top': `${this.cTop}px`,
610
523
  '--offset-bottom': `${this.cBottom}px`,
611
- } }, inheritedAttributes), h("div", { key: 'b735ec68c18c0b99c3595bb194029830e6542cde', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'e76c00d030342d44ade6648c3f9e32ca990787ba', class: {
524
+ } }, inheritedAttributes), h("div", { key: '95b112d7cae30f22ef778ceffb88edb4d941c170', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: '2fdfcbc39fb66f11b6191911f2941c660f4c12e5', class: {
612
525
  'inner-scroll': true,
613
526
  'scroll-x': scrollX,
614
527
  'scroll-y': scrollY,
615
528
  overscroll: (scrollX || scrollY) && forceOverscroll,
616
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '9049be4cea9b5da5ec1e1012248b05286fddeb7a' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
529
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '6bc77e0054ec8e21635a7f2abfe0ca46e0962e03' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
617
530
  }
618
531
  get el() { return getElement(this); }
619
532
  };