@ionic/core 8.7.18-dev.11769790854.11895f8f → 8.7.18-dev.11770238549.14c2a85f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/ion-item-divider.js +2 -2
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +2 -2
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-loading.js +2 -2
- package/components/ion-menu-button.js +2 -2
- package/components/ion-menu-toggle.js +2 -2
- package/components/ion-menu.js +2 -2
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +2 -2
- package/components/ion-picker-legacy.js +2 -2
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-range.js +3 -3
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-refresher.js +1 -1
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-router-link.js +2 -2
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +4 -4
- package/components/ion-segment-button.js +2 -2
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +2 -2
- package/components/ion-segment.js +2 -2
- package/components/ion-select-option.js +1 -1
- package/components/ion-select.js +2 -2
- package/components/ion-skeleton-text.js +2 -2
- package/components/ion-split-pane.js +2 -2
- package/components/ion-tab-bar.js +2 -2
- package/components/ion-tab-button.js +2 -2
- package/components/ion-tab.js +2 -2
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +2 -2
- package/components/ion-textarea.js +2 -2
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-toast.js +2 -2
- package/components/ion-toggle.js +3 -3
- package/components/label.js +2 -2
- package/components/list-header.js +2 -2
- package/components/modal.js +12 -220
- package/components/picker-column-option.js +2 -2
- package/components/picker-column2.js +2 -2
- package/components/popover.js +13 -85
- package/components/radio-group.js +1 -1
- package/components/radio.js +3 -3
- package/components/ripple-effect.js +1 -1
- package/components/select-modal.js +1 -1
- package/components/select-popover.js +1 -1
- package/components/spinner.js +1 -1
- package/components/title.js +2 -2
- package/components/toolbar.js +2 -2
- package/dist/cjs/ion-app_8.cjs.entry.js +5 -5
- package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +11 -11
- package/dist/cjs/ion-loading.cjs.entry.js +2 -2
- package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
- package/dist/cjs/ion-modal.cjs.entry.js +12 -220
- package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +13 -85
- package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-range.cjs.entry.js +3 -3
- package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
- package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
- package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
- package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
- package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
- package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
- package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-text.cjs.entry.js +2 -2
- package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
- package/dist/cjs/ion-toast.cjs.entry.js +2 -2
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
- package/dist/collection/components/item-divider/item-divider.js +2 -2
- package/dist/collection/components/item-group/item-group.js +1 -1
- package/dist/collection/components/item-option/item-option.js +2 -2
- package/dist/collection/components/item-options/item-options.js +1 -1
- package/dist/collection/components/item-sliding/item-sliding.js +1 -1
- package/dist/collection/components/label/label.js +2 -2
- package/dist/collection/components/list-header/list-header.js +2 -2
- package/dist/collection/components/loading/loading.js +2 -2
- package/dist/collection/components/menu/menu.js +2 -2
- package/dist/collection/components/menu-button/menu-button.js +2 -2
- package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
- package/dist/collection/components/modal/gestures/sheet.js +1 -3
- package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -3
- package/dist/collection/components/modal/modal.ios.css +4 -0
- package/dist/collection/components/modal/modal.js +7 -215
- package/dist/collection/components/modal/modal.md.css +4 -0
- package/dist/collection/components/nav/nav.js +1 -1
- package/dist/collection/components/nav-link/nav-link.js +1 -1
- package/dist/collection/components/note/note.js +2 -2
- package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
- package/dist/collection/components/picker-legacy/picker.js +2 -2
- package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
- package/dist/collection/components/popover/animations/ios.enter.js +5 -21
- package/dist/collection/components/popover/animations/md.enter.js +5 -30
- package/dist/collection/components/popover/popover.js +2 -2
- package/dist/collection/components/popover/utils.js +1 -32
- package/dist/collection/components/progress-bar/progress-bar.js +1 -1
- package/dist/collection/components/radio/radio.js +3 -3
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/range/range.js +3 -3
- package/dist/collection/components/refresher/refresher.js +1 -1
- package/dist/collection/components/refresher-content/refresher-content.js +1 -1
- package/dist/collection/components/reorder/reorder.js +1 -1
- package/dist/collection/components/reorder-group/reorder-group.js +1 -1
- package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
- package/dist/collection/components/router-link/router-link.js +2 -2
- package/dist/collection/components/router-outlet/router-outlet.js +1 -1
- package/dist/collection/components/row/row.js +1 -1
- package/dist/collection/components/searchbar/searchbar.js +4 -4
- package/dist/collection/components/segment/segment.js +2 -2
- package/dist/collection/components/segment-button/segment-button.js +2 -2
- package/dist/collection/components/segment-content/segment-content.js +1 -1
- package/dist/collection/components/segment-view/segment-view.js +2 -2
- package/dist/collection/components/select/select.js +2 -2
- package/dist/collection/components/select-modal/select-modal.js +1 -1
- package/dist/collection/components/select-option/select-option.js +1 -1
- package/dist/collection/components/select-popover/select-popover.js +1 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
- package/dist/collection/components/spinner/spinner.js +1 -1
- package/dist/collection/components/split-pane/split-pane.js +2 -2
- package/dist/collection/components/tab/tab.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.js +2 -2
- package/dist/collection/components/tab-button/tab-button.js +2 -2
- package/dist/collection/components/tabs/tabs.js +1 -1
- package/dist/collection/components/text/text.js +2 -2
- package/dist/collection/components/textarea/textarea.js +2 -2
- package/dist/collection/components/thumbnail/thumbnail.js +1 -1
- package/dist/collection/components/title/title.js +2 -2
- package/dist/collection/components/toast/toast.js +2 -2
- package/dist/collection/components/toggle/toggle.js +3 -3
- package/dist/collection/components/toolbar/toolbar.js +2 -2
- package/dist/docs.json +1 -1
- package/dist/esm/ion-app_8.entry.js +5 -5
- package/dist/esm/ion-avatar_3.entry.js +1 -1
- package/dist/esm/ion-col_3.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +4 -4
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +11 -11
- package/dist/esm/ion-loading.entry.js +2 -2
- package/dist/esm/ion-menu_3.entry.js +6 -6
- package/dist/esm/ion-modal.entry.js +12 -220
- package/dist/esm/ion-nav_2.entry.js +2 -2
- package/dist/esm/ion-picker-column-option.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +13 -85
- package/dist/esm/ion-progress-bar.entry.js +1 -1
- package/dist/esm/ion-radio_2.entry.js +4 -4
- package/dist/esm/ion-range.entry.js +3 -3
- package/dist/esm/ion-refresher_2.entry.js +2 -2
- package/dist/esm/ion-reorder_2.entry.js +2 -2
- package/dist/esm/ion-ripple-effect.entry.js +1 -1
- package/dist/esm/ion-route_4.entry.js +2 -2
- package/dist/esm/ion-searchbar.entry.js +4 -4
- package/dist/esm/ion-segment-content.entry.js +1 -1
- package/dist/esm/ion-segment-view.entry.js +2 -2
- package/dist/esm/ion-segment_2.entry.js +4 -4
- package/dist/esm/ion-select-modal.entry.js +1 -1
- package/dist/esm/ion-select_3.entry.js +4 -4
- package/dist/esm/ion-spinner.entry.js +1 -1
- package/dist/esm/ion-split-pane.entry.js +2 -2
- package/dist/esm/ion-tab-bar_2.entry.js +4 -4
- package/dist/esm/ion-tab_2.entry.js +3 -3
- package/dist/esm/ion-text.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +2 -2
- package/dist/esm/ion-toast.entry.js +2 -2
- package/dist/esm/ion-toggle.entry.js +3 -3
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-074839fc.entry.js → p-01e27965.entry.js} +1 -1
- package/dist/ionic/p-0ca0fe9c.entry.js +4 -0
- package/dist/ionic/{p-316c0420.entry.js → p-221a3d8c.entry.js} +1 -1
- package/dist/ionic/{p-3a6caca9.entry.js → p-2668188b.entry.js} +1 -1
- package/dist/ionic/{p-d3014190.entry.js → p-2bd1ea35.entry.js} +1 -1
- package/dist/ionic/{p-a127bee2.entry.js → p-30333874.entry.js} +1 -1
- package/dist/ionic/{p-0e8c8a10.entry.js → p-31db96da.entry.js} +1 -1
- package/dist/ionic/{p-1647c46c.entry.js → p-363d1209.entry.js} +1 -1
- package/dist/ionic/p-3ec563c1.entry.js +4 -0
- package/dist/ionic/{p-c19af093.entry.js → p-42db6404.entry.js} +1 -1
- package/dist/ionic/{p-db82892c.entry.js → p-46a38cfd.entry.js} +1 -1
- package/dist/ionic/{p-eb024a5b.entry.js → p-4eec1a5e.entry.js} +1 -1
- package/dist/ionic/{p-0dfa5a37.entry.js → p-530fcd71.entry.js} +1 -1
- package/dist/ionic/{p-72c38b88.entry.js → p-5c8f7253.entry.js} +1 -1
- package/dist/ionic/{p-172a579f.entry.js → p-5d6fb6e3.entry.js} +1 -1
- package/dist/ionic/{p-dbbe606a.entry.js → p-652318c3.entry.js} +1 -1
- package/dist/ionic/{p-2a939845.entry.js → p-6f37536a.entry.js} +1 -1
- package/dist/ionic/{p-4e41ea20.entry.js → p-72af946b.entry.js} +1 -1
- package/dist/ionic/p-7f98e710.entry.js +4 -0
- package/dist/ionic/{p-6d070558.entry.js → p-82d5bb3d.entry.js} +1 -1
- package/dist/ionic/p-906bb44d.entry.js +4 -0
- package/dist/ionic/{p-2dbb90cb.entry.js → p-97eb0812.entry.js} +1 -1
- package/dist/ionic/{p-31f7095f.entry.js → p-a4a9f5ae.entry.js} +1 -1
- package/dist/ionic/{p-86f53961.entry.js → p-b8551510.entry.js} +1 -1
- package/dist/ionic/p-bc293244.entry.js +4 -0
- package/dist/ionic/{p-d126e8d3.entry.js → p-bce86e56.entry.js} +1 -1
- package/dist/ionic/{p-02d76786.entry.js → p-be263062.entry.js} +1 -1
- package/dist/ionic/{p-639dd543.entry.js → p-c175d792.entry.js} +1 -1
- package/dist/ionic/{p-020af078.entry.js → p-cc2a9936.entry.js} +1 -1
- package/dist/ionic/{p-1ccd6829.entry.js → p-e338f669.entry.js} +1 -1
- package/dist/ionic/{p-6241ce47.entry.js → p-eaf3f5ff.entry.js} +1 -1
- package/dist/ionic/{p-f8f22cc0.entry.js → p-fb0271ae.entry.js} +1 -1
- package/dist/ionic/{p-370e4237.entry.js → p-fbb00634.entry.js} +1 -1
- package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
- package/dist/types/components/modal/gestures/swipe-to-close.d.ts +1 -1
- package/dist/types/components/modal/modal.d.ts +0 -47
- package/dist/types/components/popover/utils.d.ts +0 -2
- package/hydrate/index.js +112 -392
- package/hydrate/index.mjs +112 -392
- package/package.json +2 -4
- package/dist/ionic/p-51a60e0f.entry.js +0 -4
- package/dist/ionic/p-94de5cfa.entry.js +0 -4
- package/dist/ionic/p-dd1aef77.entry.js +0 -4
- package/dist/ionic/p-ec9ca3fe.entry.js +0 -4
- package/dist/ionic/p-ef4256eb.entry.js +0 -4
|
@@ -15,7 +15,7 @@ const Thumbnail = /*@__PURE__*/ proxyCustomElement(class Thumbnail extends HTMLE
|
|
|
15
15
|
this.__attachShadow();
|
|
16
16
|
}
|
|
17
17
|
render() {
|
|
18
|
-
return (h(Host, { key: '
|
|
18
|
+
return (h(Host, { key: 'b250e01664238f1dca8f9757b15bc3d5d9387ffa', class: getIonMode(this) }, h("slot", { key: '72cb568bccabc983c5186a7596ef6c6d4ebf5ad9' })));
|
|
19
19
|
}
|
|
20
20
|
static get style() { return thumbnailCss; }
|
|
21
21
|
}, [257, "ion-thumbnail"]);
|
package/components/ion-toast.js
CHANGED
|
@@ -855,9 +855,9 @@ const Toast = /*@__PURE__*/ proxyCustomElement(class Toast extends HTMLElement {
|
|
|
855
855
|
if (layout === 'stacked' && startButtons.length > 0 && endButtons.length > 0) {
|
|
856
856
|
printIonWarning('[ion-toast] - This toast is using start and end buttons with the stacked toast layout. We recommend following the best practice of using either start or end buttons with the stacked toast layout.', el);
|
|
857
857
|
}
|
|
858
|
-
return (h(Host, Object.assign({ key: '
|
|
858
|
+
return (h(Host, Object.assign({ key: '4a303f9ebb69614e9dca677d9d80a4a275de0d85', tabindex: "-1" }, this.htmlAttributes, { style: {
|
|
859
859
|
zIndex: `${60000 + this.overlayIndex}`,
|
|
860
|
-
}, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '
|
|
860
|
+
}, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '4f58fcbba8dce9834eab743fc91715935216f3d0', class: wrapperClass }, h("div", { key: 'bbc7b73b186432bd4be8247c5de2ce3b2551fb0a', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '0b953478eb739ceb864373416183bfbf5ce2f9f1', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '7a63497d1c0440256218426194851a969b042ca6', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
|
|
861
861
|
}
|
|
862
862
|
get el() { return this; }
|
|
863
863
|
static get watchers() { return {
|
package/components/ion-toggle.js
CHANGED
|
@@ -288,7 +288,7 @@ const Toggle = /*@__PURE__*/ proxyCustomElement(class Toggle extends HTMLElement
|
|
|
288
288
|
const value = this.getValue();
|
|
289
289
|
const rtl = isRTL(el) ? 'rtl' : 'ltr';
|
|
290
290
|
renderHiddenInput(true, el, name, checked ? value : '', disabled);
|
|
291
|
-
return (h(Host, { key: '
|
|
291
|
+
return (h(Host, { key: '736e1dcfca34fd41f6f0632652e7f86d6996a232', role: "switch", "aria-checked": `${checked}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, onClick: this.onClick, "aria-labelledby": hasLabel ? inputLabelId : null, "aria-label": inheritedAttributes['aria-label'] || null, "aria-disabled": disabled ? 'true' : null, "aria-required": required ? 'true' : undefined, tabindex: disabled ? undefined : 0, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur, class: createColorClasses(color, {
|
|
292
292
|
[mode]: true,
|
|
293
293
|
'in-item': hostContext('ion-item', el),
|
|
294
294
|
'toggle-activated': activated,
|
|
@@ -298,10 +298,10 @@ const Toggle = /*@__PURE__*/ proxyCustomElement(class Toggle extends HTMLElement
|
|
|
298
298
|
[`toggle-alignment-${alignment}`]: alignment !== undefined,
|
|
299
299
|
[`toggle-label-placement-${labelPlacement}`]: true,
|
|
300
300
|
[`toggle-${rtl}`]: true,
|
|
301
|
-
}) }, h("label", { key: '
|
|
301
|
+
}) }, h("label", { key: 'e697739fd3964c1c6c23331cf7e38a9841c46a6a', class: "toggle-wrapper", htmlFor: inputId }, h("input", Object.assign({ key: '3d500b8c1bc879591249d183c1abb3f5f26aff6b', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, required: required }, inheritedAttributes)), h("div", { key: 'e38f3fe0e66b4ca434fd81514f5ef771c2960841', class: {
|
|
302
302
|
'label-text-wrapper': true,
|
|
303
303
|
'label-text-wrapper-hidden': !hasLabel,
|
|
304
|
-
}, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, h("slot", { key: '
|
|
304
|
+
}, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, h("slot", { key: '006dd3558264d69ab020c07005b348adc4ecdd5b' }), this.renderHintText()), h("div", { key: 'dd4e52de31caabee41ec1bc58efecd1e213368c9', class: "native-wrapper" }, this.renderToggleControl()))));
|
|
305
305
|
}
|
|
306
306
|
get el() { return this; }
|
|
307
307
|
static get watchers() { return {
|
package/components/label.js
CHANGED
|
@@ -61,13 +61,13 @@ const Label = /*@__PURE__*/ proxyCustomElement(class Label extends HTMLElement {
|
|
|
61
61
|
render() {
|
|
62
62
|
const position = this.position;
|
|
63
63
|
const mode = getIonMode(this);
|
|
64
|
-
return (h(Host, { key: '
|
|
64
|
+
return (h(Host, { key: '684ddfa719e34d743489ff05a0df067829257c73', class: createColorClasses(this.color, {
|
|
65
65
|
[mode]: true,
|
|
66
66
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
67
67
|
[`label-${position}`]: position !== undefined,
|
|
68
68
|
[`label-no-animate`]: this.noAnimate,
|
|
69
69
|
'label-rtl': document.dir === 'rtl',
|
|
70
|
-
}) }, h("slot", { key: '
|
|
70
|
+
}) }, h("slot", { key: '4aace3e2b36250e832c44f63bea21116d77220fb' })));
|
|
71
71
|
}
|
|
72
72
|
get el() { return this; }
|
|
73
73
|
static get watchers() { return {
|
|
@@ -20,10 +20,10 @@ const ListHeader = /*@__PURE__*/ proxyCustomElement(class ListHeader extends HTM
|
|
|
20
20
|
render() {
|
|
21
21
|
const { lines } = this;
|
|
22
22
|
const mode = getIonMode(this);
|
|
23
|
-
return (h(Host, { key: '
|
|
23
|
+
return (h(Host, { key: '2e529021279761b2b2889885437f619b0e8f71c4', class: createColorClasses(this.color, {
|
|
24
24
|
[mode]: true,
|
|
25
25
|
[`list-header-lines-${lines}`]: lines !== undefined,
|
|
26
|
-
}) }, h("div", { key: '
|
|
26
|
+
}) }, h("div", { key: '9a6a11b0db015df79374f6489a40b959bc80b3e4', class: "list-header-inner" }, h("slot", { key: 'ef347fc6afb47850797e2e4d1aeefcd6a318f789' }))));
|
|
27
27
|
}
|
|
28
28
|
static get style() { return {
|
|
29
29
|
ios: listHeaderIosCss,
|
package/components/modal.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
4
|
import { proxyCustomElement, HTMLElement, createEvent, writeTask, h, Host } from '@stencil/core/internal/client';
|
|
5
|
-
import { w as win } from './index9.js';
|
|
6
5
|
import { a as findClosestIonContent, i as isIonContent, d as disableContentScrollY, r as resetContentScrollY, f as findIonContent, p as printIonContentErrorMsg } from './index8.js';
|
|
7
6
|
import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate.js';
|
|
8
7
|
import { f as clamp, g as getElementRoot, r as raf, d as inheritAttributes, k as hasLazyBuild } from './helpers.js';
|
|
@@ -17,6 +16,7 @@ import { KEYBOARD_DID_OPEN } from './keyboard.js';
|
|
|
17
16
|
import { c as createAnimation } from './animation.js';
|
|
18
17
|
import { g as getTimeGivenProgression } from './cubic-bezier.js';
|
|
19
18
|
import { createGesture } from './index3.js';
|
|
19
|
+
import { w as win } from './index9.js';
|
|
20
20
|
import { d as defineCustomElement$1 } from './backdrop.js';
|
|
21
21
|
|
|
22
22
|
var Style;
|
|
@@ -246,7 +246,7 @@ const calculateSpringStep = (t) => {
|
|
|
246
246
|
const SwipeToCloseDefaults = {
|
|
247
247
|
MIN_PRESENTING_SCALE: 0.915,
|
|
248
248
|
};
|
|
249
|
-
const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss
|
|
249
|
+
const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss) => {
|
|
250
250
|
/**
|
|
251
251
|
* The step value at which a card modal
|
|
252
252
|
* is eligible for dismissing via gesture.
|
|
@@ -403,8 +403,6 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onG
|
|
|
403
403
|
const processedStep = isAttemptingDismissWithCanDismiss ? calculateSpringStep(step / maxStep) : step;
|
|
404
404
|
const clampedStep = clamp(0.0001, processedStep, maxStep);
|
|
405
405
|
animation.progressStep(clampedStep);
|
|
406
|
-
// Notify modal of position change for safe-area updates
|
|
407
|
-
onGestureMove === null || onGestureMove === void 0 ? void 0 : onGestureMove();
|
|
408
406
|
/**
|
|
409
407
|
* When swiping down half way, the status bar style
|
|
410
408
|
* should be reset to its default value.
|
|
@@ -948,7 +946,7 @@ const mdLeaveAnimation = (baseEl, opts) => {
|
|
|
948
946
|
return baseAnimation;
|
|
949
947
|
};
|
|
950
948
|
|
|
951
|
-
const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange
|
|
949
|
+
const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
|
|
952
950
|
// Defaults for the sheet swipe animation
|
|
953
951
|
const defaultBackdrop = [
|
|
954
952
|
{ offset: 0, opacity: 'var(--backdrop-opacity)' },
|
|
@@ -1279,8 +1277,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1279
1277
|
: step;
|
|
1280
1278
|
offset = clamp(0.0001, processedStep, maxStep);
|
|
1281
1279
|
animation.progressStep(offset);
|
|
1282
|
-
// Notify modal of position change for safe-area updates
|
|
1283
|
-
onGestureMove === null || onGestureMove === void 0 ? void 0 : onGestureMove();
|
|
1284
1280
|
};
|
|
1285
1281
|
const onEnd = (detail) => {
|
|
1286
1282
|
/**
|
|
@@ -1475,9 +1471,9 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
|
|
|
1475
1471
|
};
|
|
1476
1472
|
};
|
|
1477
1473
|
|
|
1478
|
-
const modalIosCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}";
|
|
1474
|
+
const modalIosCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}";
|
|
1479
1475
|
|
|
1480
|
-
const modalMdCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}";
|
|
1476
|
+
const modalMdCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}";
|
|
1481
1477
|
|
|
1482
1478
|
const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
1483
1479
|
constructor(registerHost) {
|
|
@@ -1504,10 +1500,6 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
1504
1500
|
this.inline = false;
|
|
1505
1501
|
// Whether or not modal is being dismissed via gesture
|
|
1506
1502
|
this.gestureAnimationDismissing = false;
|
|
1507
|
-
// Whether to skip coordinate-based safe-area detection (for fullscreen phone modals)
|
|
1508
|
-
this.skipSafeAreaCoordinateDetection = false;
|
|
1509
|
-
// Track previous safe-area state to avoid redundant DOM writes
|
|
1510
|
-
this.prevSafeAreaState = { top: false, bottom: false, left: false, right: false };
|
|
1511
1503
|
this.presented = false;
|
|
1512
1504
|
/** @internal */
|
|
1513
1505
|
this.hasController = false;
|
|
@@ -1698,10 +1690,7 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
1698
1690
|
}
|
|
1699
1691
|
}
|
|
1700
1692
|
onWindowResize() {
|
|
1701
|
-
//
|
|
1702
|
-
this.cachedSafeAreas = undefined;
|
|
1703
|
-
this.updateSafeAreaOverrides();
|
|
1704
|
-
// Only handle view transition for iOS card modals when no custom animations are provided
|
|
1693
|
+
// Only handle resize for iOS card modals when no custom animations are provided
|
|
1705
1694
|
if (getIonMode(this) !== 'ios' || !this.presentingElement || this.enterAnimation || this.leaveAnimation) {
|
|
1706
1695
|
return;
|
|
1707
1696
|
}
|
|
@@ -1724,8 +1713,6 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
1724
1713
|
this.triggerController.removeClickListener();
|
|
1725
1714
|
this.cleanupViewTransitionListener();
|
|
1726
1715
|
this.cleanupParentRemovalObserver();
|
|
1727
|
-
// Reset safe-area state to handle removal without dismiss (e.g., framework unmount)
|
|
1728
|
-
this.resetSafeAreaState();
|
|
1729
1716
|
}
|
|
1730
1717
|
componentWillLoad() {
|
|
1731
1718
|
var _a;
|
|
@@ -1885,8 +1872,6 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
1885
1872
|
else if (!this.keepContentsMounted) {
|
|
1886
1873
|
await waitForMount();
|
|
1887
1874
|
}
|
|
1888
|
-
// Predict safe-area needs based on modal configuration to avoid visual snap
|
|
1889
|
-
this.setInitialSafeAreaOverrides(presentingElement);
|
|
1890
1875
|
writeTask(() => this.el.classList.add('show-modal'));
|
|
1891
1876
|
const hasCardModal = presentingElement !== undefined;
|
|
1892
1877
|
/**
|
|
@@ -1948,8 +1933,6 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
1948
1933
|
else if (hasCardModal) {
|
|
1949
1934
|
this.initSwipeToClose();
|
|
1950
1935
|
}
|
|
1951
|
-
// Now that animation is complete, update safe-area based on actual position
|
|
1952
|
-
this.updateSafeAreaOverrides();
|
|
1953
1936
|
// Initialize view transition listener for iOS card modals
|
|
1954
1937
|
this.initViewTransitionListener();
|
|
1955
1938
|
// Initialize parent removal observer
|
|
@@ -2001,7 +1984,7 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
2001
1984
|
await this.dismiss(undefined, GESTURE);
|
|
2002
1985
|
this.gestureAnimationDismissing = false;
|
|
2003
1986
|
});
|
|
2004
|
-
}
|
|
1987
|
+
});
|
|
2005
1988
|
this.gesture.enable(true);
|
|
2006
1989
|
}
|
|
2007
1990
|
initSheetGesture() {
|
|
@@ -2022,8 +2005,7 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
2022
2005
|
this.currentBreakpoint = breakpoint;
|
|
2023
2006
|
this.ionBreakpointDidChange.emit({ breakpoint });
|
|
2024
2007
|
}
|
|
2025
|
-
|
|
2026
|
-
}, () => this.updateSafeAreaOverrides());
|
|
2008
|
+
});
|
|
2027
2009
|
this.gesture = gesture;
|
|
2028
2010
|
this.moveSheetToBreakpoint = moveSheetToBreakpoint;
|
|
2029
2011
|
this.gesture.enable(true);
|
|
@@ -2101,194 +2083,6 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
2101
2083
|
// Clear the cached reference
|
|
2102
2084
|
this.cachedPageParent = undefined;
|
|
2103
2085
|
}
|
|
2104
|
-
/**
|
|
2105
|
-
* Sets initial safe-area overrides based on modal configuration before
|
|
2106
|
-
* the modal becomes visible. This predicts whether the modal will touch
|
|
2107
|
-
* screen edges to avoid a visual snap after animation completes.
|
|
2108
|
-
*/
|
|
2109
|
-
setInitialSafeAreaOverrides(presentingElement) {
|
|
2110
|
-
const style = this.el.style;
|
|
2111
|
-
const mode = getIonMode(this);
|
|
2112
|
-
const isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
|
|
2113
|
-
// Card modals only exist in iOS mode - in MD mode, presentingElement is ignored
|
|
2114
|
-
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
2115
|
-
const isTablet = window.innerWidth >= 768;
|
|
2116
|
-
// Sheet modals always touch bottom edge, never top/left/right
|
|
2117
|
-
if (isSheetModal) {
|
|
2118
|
-
style.setProperty('--ion-safe-area-top', '0px');
|
|
2119
|
-
style.setProperty('--ion-safe-area-left', '0px');
|
|
2120
|
-
style.setProperty('--ion-safe-area-right', '0px');
|
|
2121
|
-
return;
|
|
2122
|
-
}
|
|
2123
|
-
// Card modals have rounded top corners
|
|
2124
|
-
if (isCardModal) {
|
|
2125
|
-
style.setProperty('--ion-safe-area-top', '0px');
|
|
2126
|
-
if (isTablet) {
|
|
2127
|
-
// On tablets, card modals are inset from all edges
|
|
2128
|
-
this.zeroAllSafeAreas();
|
|
2129
|
-
}
|
|
2130
|
-
else {
|
|
2131
|
-
// On phones, card modals still extend to the bottom edge
|
|
2132
|
-
style.setProperty('--ion-safe-area-left', '0px');
|
|
2133
|
-
style.setProperty('--ion-safe-area-right', '0px');
|
|
2134
|
-
this.applyFullscreenSafeArea();
|
|
2135
|
-
}
|
|
2136
|
-
return;
|
|
2137
|
-
}
|
|
2138
|
-
// Check if modal is fullscreen via CSS custom properties
|
|
2139
|
-
// This applies to both phone and tablet sizes - custom modals may have
|
|
2140
|
-
// non-fullscreen dimensions even on phones (e.g., --height: 70%)
|
|
2141
|
-
const computedStyle = getComputedStyle(this.el);
|
|
2142
|
-
const width = computedStyle.getPropertyValue('--width').trim();
|
|
2143
|
-
const height = computedStyle.getPropertyValue('--height').trim();
|
|
2144
|
-
const isFullscreen = width === '100%' && height === '100%';
|
|
2145
|
-
if (isFullscreen) {
|
|
2146
|
-
this.applyFullscreenSafeArea();
|
|
2147
|
-
}
|
|
2148
|
-
else if (isTablet) {
|
|
2149
|
-
// Centered dialog on tablet doesn't touch edges
|
|
2150
|
-
this.zeroAllSafeAreas();
|
|
2151
|
-
}
|
|
2152
|
-
else ;
|
|
2153
|
-
}
|
|
2154
|
-
/**
|
|
2155
|
-
* Applies safe-area handling for fullscreen modals.
|
|
2156
|
-
* Adds wrapper padding when no footer is present to prevent
|
|
2157
|
-
* content from overlapping system navigation areas.
|
|
2158
|
-
*/
|
|
2159
|
-
applyFullscreenSafeArea() {
|
|
2160
|
-
this.skipSafeAreaCoordinateDetection = true;
|
|
2161
|
-
this.updateFooterPadding();
|
|
2162
|
-
// Watch for dynamic footer additions/removals (e.g., async data loading)
|
|
2163
|
-
// Use subtree:true to support wrapped footers in framework components
|
|
2164
|
-
// (e.g., <my-footer><ion-footer>...</ion-footer></my-footer>)
|
|
2165
|
-
if (!this.footerObserver && win !== undefined && 'MutationObserver' in win) {
|
|
2166
|
-
this.footerObserver = new MutationObserver(() => this.updateFooterPadding());
|
|
2167
|
-
this.footerObserver.observe(this.el, { childList: true, subtree: true });
|
|
2168
|
-
}
|
|
2169
|
-
}
|
|
2170
|
-
/**
|
|
2171
|
-
* Updates wrapper and shadow padding based on footer presence.
|
|
2172
|
-
* Called initially and when footer is dynamically added/removed.
|
|
2173
|
-
* Both elements must be styled identically to prevent visual mismatches.
|
|
2174
|
-
*/
|
|
2175
|
-
updateFooterPadding() {
|
|
2176
|
-
if (!this.wrapperEl)
|
|
2177
|
-
return;
|
|
2178
|
-
const hasFooter = this.el.querySelector('ion-footer') !== null;
|
|
2179
|
-
// Apply to both wrapper and shadow to keep them in sync
|
|
2180
|
-
const elements = [this.wrapperEl, this.shadowEl].filter(Boolean);
|
|
2181
|
-
if (hasFooter) {
|
|
2182
|
-
elements.forEach((el) => {
|
|
2183
|
-
el.style.removeProperty('padding-bottom');
|
|
2184
|
-
el.style.removeProperty('box-sizing');
|
|
2185
|
-
});
|
|
2186
|
-
}
|
|
2187
|
-
else {
|
|
2188
|
-
elements.forEach((el) => {
|
|
2189
|
-
el.style.setProperty('padding-bottom', 'var(--ion-safe-area-bottom, 0px)');
|
|
2190
|
-
el.style.setProperty('box-sizing', 'border-box');
|
|
2191
|
-
});
|
|
2192
|
-
}
|
|
2193
|
-
}
|
|
2194
|
-
/**
|
|
2195
|
-
* Sets all safe-area CSS variables to 0px for modals that
|
|
2196
|
-
* don't touch screen edges.
|
|
2197
|
-
*/
|
|
2198
|
-
zeroAllSafeAreas() {
|
|
2199
|
-
const style = this.el.style;
|
|
2200
|
-
style.setProperty('--ion-safe-area-top', '0px');
|
|
2201
|
-
style.setProperty('--ion-safe-area-bottom', '0px');
|
|
2202
|
-
style.setProperty('--ion-safe-area-left', '0px');
|
|
2203
|
-
style.setProperty('--ion-safe-area-right', '0px');
|
|
2204
|
-
}
|
|
2205
|
-
/**
|
|
2206
|
-
* Resets all safe-area related state and styles.
|
|
2207
|
-
* Called during dismiss and disconnectedCallback to ensure clean state
|
|
2208
|
-
* for re-presentation of inline modals.
|
|
2209
|
-
*/
|
|
2210
|
-
resetSafeAreaState() {
|
|
2211
|
-
var _a;
|
|
2212
|
-
this.skipSafeAreaCoordinateDetection = false;
|
|
2213
|
-
this.cachedSafeAreas = undefined;
|
|
2214
|
-
this.prevSafeAreaState = { top: false, bottom: false, left: false, right: false };
|
|
2215
|
-
(_a = this.footerObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
2216
|
-
this.footerObserver = undefined;
|
|
2217
|
-
// Clear wrapper and shadow styles that may have been set for safe-area handling
|
|
2218
|
-
[this.wrapperEl, this.shadowEl].forEach((el) => {
|
|
2219
|
-
if (el) {
|
|
2220
|
-
el.style.removeProperty('padding-bottom');
|
|
2221
|
-
el.style.removeProperty('box-sizing');
|
|
2222
|
-
}
|
|
2223
|
-
});
|
|
2224
|
-
// Clear safe-area CSS variable overrides
|
|
2225
|
-
const style = this.el.style;
|
|
2226
|
-
style.removeProperty('--ion-safe-area-top');
|
|
2227
|
-
style.removeProperty('--ion-safe-area-bottom');
|
|
2228
|
-
style.removeProperty('--ion-safe-area-left');
|
|
2229
|
-
style.removeProperty('--ion-safe-area-right');
|
|
2230
|
-
}
|
|
2231
|
-
/**
|
|
2232
|
-
* Gets the root safe-area values from the document element.
|
|
2233
|
-
* Uses cached values during gestures to avoid getComputedStyle calls.
|
|
2234
|
-
*/
|
|
2235
|
-
getSafeAreaValues() {
|
|
2236
|
-
if (!this.cachedSafeAreas) {
|
|
2237
|
-
const rootStyle = getComputedStyle(document.documentElement);
|
|
2238
|
-
this.cachedSafeAreas = {
|
|
2239
|
-
top: parseFloat(rootStyle.getPropertyValue('--ion-safe-area-top')) || 0,
|
|
2240
|
-
bottom: parseFloat(rootStyle.getPropertyValue('--ion-safe-area-bottom')) || 0,
|
|
2241
|
-
left: parseFloat(rootStyle.getPropertyValue('--ion-safe-area-left')) || 0,
|
|
2242
|
-
right: parseFloat(rootStyle.getPropertyValue('--ion-safe-area-right')) || 0,
|
|
2243
|
-
};
|
|
2244
|
-
}
|
|
2245
|
-
return this.cachedSafeAreas;
|
|
2246
|
-
}
|
|
2247
|
-
/**
|
|
2248
|
-
* Updates safe-area CSS variable overrides based on whether the modal
|
|
2249
|
-
* extends into each safe-area region. Called after animation
|
|
2250
|
-
* and during gestures to handle dynamic position changes.
|
|
2251
|
-
*
|
|
2252
|
-
* Optimized to avoid redundant DOM writes by tracking previous state.
|
|
2253
|
-
*/
|
|
2254
|
-
updateSafeAreaOverrides() {
|
|
2255
|
-
if (this.skipSafeAreaCoordinateDetection) {
|
|
2256
|
-
return;
|
|
2257
|
-
}
|
|
2258
|
-
const wrapper = this.wrapperEl;
|
|
2259
|
-
if (!wrapper) {
|
|
2260
|
-
return;
|
|
2261
|
-
}
|
|
2262
|
-
const rect = wrapper.getBoundingClientRect();
|
|
2263
|
-
const safeAreas = this.getSafeAreaValues();
|
|
2264
|
-
const extendsIntoTop = rect.top < safeAreas.top;
|
|
2265
|
-
const extendsIntoBottom = rect.bottom > window.innerHeight - safeAreas.bottom;
|
|
2266
|
-
const extendsIntoLeft = rect.left < safeAreas.left;
|
|
2267
|
-
const extendsIntoRight = rect.right > window.innerWidth - safeAreas.right;
|
|
2268
|
-
// Only update DOM when state actually changes
|
|
2269
|
-
const prev = this.prevSafeAreaState;
|
|
2270
|
-
const style = this.el.style;
|
|
2271
|
-
if (extendsIntoTop !== prev.top) {
|
|
2272
|
-
extendsIntoTop ? style.removeProperty('--ion-safe-area-top') : style.setProperty('--ion-safe-area-top', '0px');
|
|
2273
|
-
prev.top = extendsIntoTop;
|
|
2274
|
-
}
|
|
2275
|
-
if (extendsIntoBottom !== prev.bottom) {
|
|
2276
|
-
extendsIntoBottom
|
|
2277
|
-
? style.removeProperty('--ion-safe-area-bottom')
|
|
2278
|
-
: style.setProperty('--ion-safe-area-bottom', '0px');
|
|
2279
|
-
prev.bottom = extendsIntoBottom;
|
|
2280
|
-
}
|
|
2281
|
-
if (extendsIntoLeft !== prev.left) {
|
|
2282
|
-
extendsIntoLeft ? style.removeProperty('--ion-safe-area-left') : style.setProperty('--ion-safe-area-left', '0px');
|
|
2283
|
-
prev.left = extendsIntoLeft;
|
|
2284
|
-
}
|
|
2285
|
-
if (extendsIntoRight !== prev.right) {
|
|
2286
|
-
extendsIntoRight
|
|
2287
|
-
? style.removeProperty('--ion-safe-area-right')
|
|
2288
|
-
: style.setProperty('--ion-safe-area-right', '0px');
|
|
2289
|
-
prev.right = extendsIntoRight;
|
|
2290
|
-
}
|
|
2291
|
-
}
|
|
2292
2086
|
sheetOnDismiss() {
|
|
2293
2087
|
/**
|
|
2294
2088
|
* While the gesture animation is finishing
|
|
@@ -2381,8 +2175,6 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
2381
2175
|
}
|
|
2382
2176
|
this.currentBreakpoint = undefined;
|
|
2383
2177
|
this.animation = undefined;
|
|
2384
|
-
// Reset safe-area state for potential re-presentation
|
|
2385
|
-
this.resetSafeAreaState();
|
|
2386
2178
|
unlock();
|
|
2387
2179
|
return dismissed;
|
|
2388
2180
|
}
|
|
@@ -2632,20 +2424,20 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
|
|
|
2632
2424
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
2633
2425
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
2634
2426
|
const isSheetModalWithHandle = isSheetModal && showHandle;
|
|
2635
|
-
return (h(Host, Object.assign({ key: '
|
|
2427
|
+
return (h(Host, Object.assign({ key: '978ba9cc81464b2d9b4caaf36285d5f7bf7e568d', "no-router": true,
|
|
2636
2428
|
// Allow the modal to be navigable when the handle is focusable
|
|
2637
2429
|
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
|
|
2638
2430
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
2639
|
-
}, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '
|
|
2431
|
+
}, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '9f95566d8e0c06bb9607f514484848c250f35f1f', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '91ff26d4f3ab4367f3a2940f51c6a5a3d4c972c3', class: "modal-shadow" }), h("div", Object.assign({ key: '064b2dba13854505a4eb1f5e54296ac79cb7a2bd',
|
|
2640
2432
|
/*
|
|
2641
2433
|
role and aria-modal must be used on the
|
|
2642
2434
|
same element. They must also be set inside the
|
|
2643
2435
|
shadow DOM otherwise ion-button will not be highlighted
|
|
2644
2436
|
when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
|
|
2645
2437
|
*/
|
|
2646
|
-
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '
|
|
2438
|
+
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'b579b08b114022032d078a527111456ceefc7b35', class: "modal-handle",
|
|
2647
2439
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
2648
|
-
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '
|
|
2440
|
+
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: 'dacea58475b72d9c0209934ff31f3be6b9ac8c85', onSlotchange: this.onSlotChange }))));
|
|
2649
2441
|
}
|
|
2650
2442
|
get el() { return this; }
|
|
2651
2443
|
static get watchers() { return {
|
|
@@ -101,10 +101,10 @@ const PickerColumnOption = /*@__PURE__*/ proxyCustomElement(class PickerColumnOp
|
|
|
101
101
|
render() {
|
|
102
102
|
const { color, disabled, ariaLabel } = this;
|
|
103
103
|
const mode = getIonMode(this);
|
|
104
|
-
return (h(Host, { key: '
|
|
104
|
+
return (h(Host, { key: 'c45a1c14a351bf57d7113671164852349be5aa8a', class: createColorClasses(color, {
|
|
105
105
|
[mode]: true,
|
|
106
106
|
['option-disabled']: disabled,
|
|
107
|
-
}) }, h("div", { key: '
|
|
107
|
+
}) }, h("div", { key: '824930b658c6e3fb493ac4c6c2451d38c6bc4829', class: 'picker-column-option-button', role: "button", "aria-label": ariaLabel, onClick: () => this.onClick() }, h("slot", { key: '019df4dcf46e629bdbebcd46ed3ab29669feab27' }))));
|
|
108
108
|
}
|
|
109
109
|
get el() { return this; }
|
|
110
110
|
static get watchers() { return {
|
|
@@ -342,9 +342,9 @@ const PickerColumnCmp = /*@__PURE__*/ proxyCustomElement(class PickerColumnCmp e
|
|
|
342
342
|
render() {
|
|
343
343
|
const col = this.col;
|
|
344
344
|
const mode = getIonMode(this);
|
|
345
|
-
return (h(Host, { key: '
|
|
345
|
+
return (h(Host, { key: '86125e95f18837dfd021db01777d72a1562d8ee3', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
|
|
346
346
|
'max-width': this.col.columnWidth,
|
|
347
|
-
} }, col.prefix && (h("div", { key: '
|
|
347
|
+
} }, col.prefix && (h("div", { key: 'b0f3d39e0bd128781066ffefb7a1e40d12a9e76d', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: '0b106ac4d56916eaaa7f09d1b68348b3754b7bba', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { key: '00ff2f9dbb4561787e5a5223327c6a2a33f8362e', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
|
|
348
348
|
}
|
|
349
349
|
get el() { return this; }
|
|
350
350
|
static get watchers() { return {
|