@ionic/core 8.8.19-dev.11786730389.1a1927bf → 8.8.19-dev.11786735826.1fad7c0a
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-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-card.js +1 -1
- package/components/ion-chip.js +1 -1
- package/components/ion-datetime-button.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-infinite-scroll-content.js +1 -1
- package/components/ion-input-otp.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-divider.js +1 -1
- package/components/ion-item-group.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item-options.js +1 -1
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-label.js +1 -1
- package/components/ion-list-header.js +1 -1
- package/components/ion-list.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-menu-toggle.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-nav-link.js +1 -1
- package/components/ion-nav.js +1 -1
- package/components/ion-note.js +1 -1
- package/components/ion-picker-column-option.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-progress-bar.js +1 -1
- package/components/ion-radio-group.js +1 -1
- package/components/ion-radio.js +1 -1
- package/components/ion-range.js +1 -1
- 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-ripple-effect.js +1 -1
- package/components/ion-router-link.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-row.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-segment-content.js +1 -1
- package/components/ion-segment-view.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-option.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-skeleton-text.js +1 -1
- package/components/ion-spinner.js +1 -1
- package/components/ion-split-pane.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-tab.js +1 -1
- package/components/ion-tabs.js +1 -1
- package/components/ion-text.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-thumbnail.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/ion-toolbar.js +1 -1
- package/components/{p-C1O9GEug.js → p--m5cCjbK.js} +1 -1
- package/components/{p-CfnGxjv-.js → p-B4uHHhPK.js} +1 -1
- package/components/{p-BxUIQcD9.js → p-BOvLNVKq.js} +1 -1
- package/components/{p-D_XD0pVT.js → p-BWBigMsI.js} +1 -1
- package/components/{p-xOjr4bwc.js → p-BZ4-QTes.js} +1 -1
- package/components/{p-tYCT3JGl.js → p-BjluhQMI.js} +1 -1
- package/components/{p-ClFYbgND.js → p-BlsIikdZ.js} +1 -1
- package/components/{p-Obm7si-x.js → p-Blug1Vxu.js} +1 -1
- package/components/{p-DTY4otpr.js → p-C91npEel.js} +1 -1
- package/components/{p-CVnwvOBD.js → p-CVb3x_r3.js} +1 -1
- package/components/{p-B6dUPQXq.js → p-CWLrHG8Y.js} +1 -1
- package/components/{p-0Pyit076.js → p-CfnNZz_d.js} +1 -1
- package/components/{p-DyePCNGr.js → p-DKrhJJV0.js} +1 -1
- package/components/p-DSzSbVP2.js +4 -0
- package/components/{p-BsVxQGUT.js → p-DgZOZQjJ.js} +1 -1
- package/components/{p-BO4sUqUv.js → p-Dmd2xqCe.js} +1 -1
- package/components/{p-83oP9gzn.js → p-GG5GhznE.js} +1 -1
- package/components/{p-Bc4wROfM.js → p-UQSiXX2Z.js} +1 -1
- package/components/{p-Dm7h4Nyv.js → p-qT1szVjw.js} +1 -1
- package/components/p-ypuYdSDB.js +4 -0
- package/dist/cjs/input.utils-BZdMWVrt.js +35 -0
- 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-input-otp.cjs.entry.js +3 -3
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
- package/dist/cjs/ion-input.cjs.entry.js +42 -56
- package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
- 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 +4 -4
- 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 +2 -2
- 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 +41 -59
- 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 +44 -55
- package/dist/cjs/ion-toast.cjs.entry.js +2 -2
- package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
- package/dist/cjs/slot-mutation-controller-CgTGFqlW.js +397 -0
- package/dist/collection/components/input/input.ios.css +56 -24
- package/dist/collection/components/input/input.js +36 -51
- package/dist/collection/components/input/input.md.css +78 -41
- package/dist/collection/components/input-otp/input-otp.js +3 -3
- package/dist/collection/components/input-password-toggle/input-password-toggle.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/list.js +1 -1
- 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/modal.js +4 -4
- 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/popover/popover.js +2 -2
- 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.ios.css +63 -69
- package/dist/collection/components/select/select.js +40 -55
- package/dist/collection/components/select/select.md.css +85 -85
- 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.ios.css +94 -62
- package/dist/collection/components/textarea/textarea.js +39 -51
- package/dist/collection/components/textarea/textarea.md.css +103 -77
- 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/collection/utils/forms/index.js +1 -0
- package/dist/collection/utils/forms/start-container-controller.js +132 -0
- package/dist/docs.json +22 -6
- package/dist/esm/input.utils-B1ValN_N.js +33 -0
- 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-input-otp.entry.js +3 -3
- package/dist/esm/ion-input-password-toggle.entry.js +3 -3
- package/dist/esm/ion-input.entry.js +40 -54
- package/dist/esm/ion-item-option_3.entry.js +4 -4
- package/dist/esm/ion-item_8.entry.js +12 -12
- 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 +4 -4
- 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 +2 -2
- 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 +40 -58
- 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 +43 -54
- package/dist/esm/ion-toast.entry.js +2 -2
- package/dist/esm/ion-toggle.entry.js +4 -4
- package/dist/esm/slot-mutation-controller-u741eD3Z.js +393 -0
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-dbfd2d52.entry.js → p-06533d51.entry.js} +1 -1
- package/dist/ionic/{p-a641d428.entry.js → p-141f5b47.entry.js} +1 -1
- package/dist/ionic/p-14a5e8f5.entry.js +4 -0
- package/dist/ionic/{p-12589d59.entry.js → p-19269e04.entry.js} +1 -1
- package/dist/ionic/{p-efef6788.entry.js → p-19abbc33.entry.js} +1 -1
- package/dist/ionic/{p-5394e1d4.entry.js → p-4204184c.entry.js} +1 -1
- package/dist/ionic/p-4bc3ecdb.entry.js +4 -0
- package/dist/ionic/{p-21a7fb2a.entry.js → p-4eed9ca1.entry.js} +1 -1
- package/dist/ionic/p-5521dc1f.entry.js +4 -0
- package/dist/ionic/p-5c3626de.entry.js +4 -0
- package/dist/ionic/{p-374b10cb.entry.js → p-5d3b411c.entry.js} +1 -1
- package/dist/ionic/p-60576951.entry.js +4 -0
- package/dist/ionic/{p-1d2e53e8.entry.js → p-711a8319.entry.js} +1 -1
- package/dist/ionic/{p-48b6835f.entry.js → p-71419a55.entry.js} +1 -1
- package/dist/ionic/{p-ba8a598f.entry.js → p-79325ffe.entry.js} +1 -1
- package/dist/ionic/p-84a38904.entry.js +4 -0
- package/dist/ionic/{p-bf7c1f05.entry.js → p-8f204f1e.entry.js} +1 -1
- package/dist/ionic/p-9055e897.entry.js +4 -0
- package/dist/ionic/{p-6277efba.entry.js → p-9658e083.entry.js} +1 -1
- package/dist/ionic/{p-74f30659.entry.js → p-988baee1.entry.js} +1 -1
- package/dist/ionic/p-DAztxQR0.js +4 -0
- package/dist/ionic/p-DkUB-ROc.js +4 -0
- package/dist/ionic/{p-3835a020.entry.js → p-a71232d6.entry.js} +1 -1
- package/dist/ionic/{p-08f1ed1c.entry.js → p-a73d8742.entry.js} +1 -1
- package/dist/ionic/{p-8a21bdbd.entry.js → p-a8421d18.entry.js} +1 -1
- package/dist/ionic/{p-2ce59395.entry.js → p-a8c2c343.entry.js} +1 -1
- package/dist/ionic/{p-c3f65965.entry.js → p-bc2bad5f.entry.js} +1 -1
- package/dist/ionic/{p-f622796d.entry.js → p-be08d500.entry.js} +1 -1
- package/dist/ionic/p-be9a4f51.entry.js +4 -0
- package/dist/ionic/{p-33829e94.entry.js → p-ccc5044d.entry.js} +1 -1
- package/dist/ionic/{p-3c5fdd27.entry.js → p-ce32912b.entry.js} +1 -1
- package/dist/ionic/p-ded69ceb.entry.js +4 -0
- package/dist/ionic/{p-cec87704.entry.js → p-e0c6e31e.entry.js} +1 -1
- package/dist/ionic/{p-09b47b7d.entry.js → p-e8c3e08a.entry.js} +1 -1
- package/dist/ionic/{p-8f3a1995.entry.js → p-ed5d540d.entry.js} +1 -1
- package/dist/ionic/{p-6b286c5c.entry.js → p-f2802440.entry.js} +1 -1
- package/dist/ionic/{p-62e71297.entry.js → p-fe1bfbcf.entry.js} +1 -1
- package/dist/types/components/input/input.d.ts +11 -5
- package/dist/types/components/select/select.d.ts +12 -6
- package/dist/types/components/textarea/textarea.d.ts +12 -5
- package/dist/types/utils/forms/index.d.ts +1 -0
- package/dist/types/utils/forms/start-container-controller.d.ts +34 -0
- package/hydrate/index.js +350 -267
- package/hydrate/index.mjs +350 -267
- package/package.json +4 -4
- package/components/p-DIgGHN7D.js +0 -4
- package/components/p-MCJ7HjWe.js +0 -4
- package/dist/cjs/input.utils-CP4fzrqk.js +0 -149
- package/dist/cjs/notch-controller-BEUpEgb5.js +0 -155
- package/dist/esm/input.utils-J6HWocLA.js +0 -146
- package/dist/esm/notch-controller-CrUGyHYz.js +0 -153
- package/dist/ionic/p-0266b7e1.entry.js +0 -4
- package/dist/ionic/p-214e000a.entry.js +0 -4
- package/dist/ionic/p-91c6faf1.entry.js +0 -4
- package/dist/ionic/p-9b865fe6.entry.js +0 -4
- package/dist/ionic/p-BnMQxWON.js +0 -4
- package/dist/ionic/p-ac6ef997.entry.js +0 -4
- package/dist/ionic/p-b24dc0a1.entry.js +0 -4
- package/dist/ionic/p-c8fbe544.entry.js +0 -4
- package/dist/ionic/p-cb12f6c3.entry.js +0 -4
- package/dist/ionic/p-ede019ef.entry.js +0 -4
- package/dist/ionic/p-kJA95YWg.js +0 -4
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Build, Host, h, forceUpdate } from "@stencil/core";
|
|
5
5
|
import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
6
|
-
import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
|
|
6
|
+
import { compareOptions, createNotchController, createStartContainerController, isOptionSelected, checkInvalidState, } from "../../utils/forms/index";
|
|
7
7
|
import { focusVisibleElement, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
|
|
8
8
|
import { printIonWarning } from "../../utils/logging/index";
|
|
9
9
|
import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
|
|
10
10
|
import { isRTL } from "../../utils/rtl/index";
|
|
11
11
|
import { reflectPropertiesToAttributes, sanitizeDOMTree } from "../../utils/sanitization/index";
|
|
12
|
+
import { createSlotMutationController } from "../../utils/slot-mutation-controller";
|
|
12
13
|
import { createColorClasses, hostContext } from "../../utils/theme";
|
|
13
14
|
import { watchForOptions } from "../../utils/watch-options";
|
|
14
15
|
import { caretDownSharp, chevronExpand } from "ionicons/icons";
|
|
@@ -32,7 +33,9 @@ import { getIonMode } from "../../global/ionic-global";
|
|
|
32
33
|
* @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
|
|
33
34
|
* @part bottom - The container element for helper text, error text, and counter.
|
|
34
35
|
* @part wrapper - The clickable label element that wraps the entire form field (label text, slots, selected values or placeholder, and toggle icons).
|
|
35
|
-
* @part
|
|
36
|
+
* @part start - The wrapper element for the content in the start slot.
|
|
37
|
+
* @part control - The wrapper element containing the label and native select control. When the label is not floating or stacked, this part also contains the dropdown icon.
|
|
38
|
+
* @part end - The wrapper element for the content in the end slot. When the label is floating or stacked, this part also contains the dropdown icon.
|
|
36
39
|
*/
|
|
37
40
|
export class Select {
|
|
38
41
|
inputId = `ion-sel-${selectIds++}`;
|
|
@@ -42,10 +45,13 @@ export class Select {
|
|
|
42
45
|
focusEl;
|
|
43
46
|
mutationO;
|
|
44
47
|
inheritedAttributes = {};
|
|
48
|
+
slotMutationController;
|
|
45
49
|
nativeWrapperEl;
|
|
46
50
|
notchSpacerEl;
|
|
47
51
|
validationObserver;
|
|
48
52
|
notchController;
|
|
53
|
+
startContainerController;
|
|
54
|
+
startContainerEl;
|
|
49
55
|
customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
|
|
50
56
|
el;
|
|
51
57
|
isExpanded = false;
|
|
@@ -256,7 +262,15 @@ export class Select {
|
|
|
256
262
|
}
|
|
257
263
|
async connectedCallback() {
|
|
258
264
|
const { el } = this;
|
|
265
|
+
this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
|
|
266
|
+
this.startContainerController?.calculateStartContainerWidth();
|
|
267
|
+
forceUpdate(this);
|
|
268
|
+
});
|
|
259
269
|
this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
|
|
270
|
+
this.startContainerController = createStartContainerController(el, () => this.startContainerEl, () => {
|
|
271
|
+
return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
|
|
272
|
+
});
|
|
273
|
+
this.startContainerController.calculateStartContainerWidth();
|
|
260
274
|
this.updateOverlayOptions();
|
|
261
275
|
this.emitStyle();
|
|
262
276
|
this.mutationO = watchForOptions(this.el, 'ion-select-option', async () => {
|
|
@@ -328,10 +342,18 @@ export class Select {
|
|
|
328
342
|
this.mutationO.disconnect();
|
|
329
343
|
this.mutationO = undefined;
|
|
330
344
|
}
|
|
345
|
+
if (this.slotMutationController) {
|
|
346
|
+
this.slotMutationController.destroy();
|
|
347
|
+
this.slotMutationController = undefined;
|
|
348
|
+
}
|
|
331
349
|
if (this.notchController) {
|
|
332
350
|
this.notchController.destroy();
|
|
333
351
|
this.notchController = undefined;
|
|
334
352
|
}
|
|
353
|
+
if (this.startContainerController) {
|
|
354
|
+
this.startContainerController.destroy();
|
|
355
|
+
this.startContainerController = undefined;
|
|
356
|
+
}
|
|
335
357
|
// Clean up validation observer to prevent memory leaks.
|
|
336
358
|
if (this.validationObserver) {
|
|
337
359
|
this.validationObserver.disconnect();
|
|
@@ -839,6 +861,7 @@ export class Select {
|
|
|
839
861
|
}
|
|
840
862
|
componentDidRender() {
|
|
841
863
|
this.notchController?.calculateNotchWidth();
|
|
864
|
+
this.startContainerController?.calculateStartContainerWidth();
|
|
842
865
|
}
|
|
843
866
|
/**
|
|
844
867
|
* Gets any content passed into the `label` slot,
|
|
@@ -857,44 +880,24 @@ export class Select {
|
|
|
857
880
|
return this.label !== undefined || this.labelSlot !== null;
|
|
858
881
|
}
|
|
859
882
|
/**
|
|
860
|
-
* Stops propagation when
|
|
861
|
-
*
|
|
883
|
+
* Stops propagation for re-dispatched clicks (when already expanded) to
|
|
884
|
+
* prevent double-click events. Allows initial button clicks (from keyboard
|
|
885
|
+
* or mouse) and slotted content clicks to propagate so event delegation
|
|
886
|
+
* works for parent handlers.
|
|
862
887
|
*/
|
|
863
888
|
onLabelClick = (ev) => {
|
|
864
|
-
|
|
865
|
-
// and not on the input or other child elements
|
|
866
|
-
if (ev.target === ev.currentTarget) {
|
|
889
|
+
if (ev.target === this.focusEl && this.isExpanded) {
|
|
867
890
|
ev.stopPropagation();
|
|
868
891
|
}
|
|
869
892
|
};
|
|
870
893
|
/**
|
|
871
|
-
* Renders the border
|
|
872
|
-
* when fill="outline".
|
|
894
|
+
* Renders the outline border with a notch for the label.
|
|
873
895
|
*/
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
* The outline fill has a special outline
|
|
880
|
-
* that appears around the select and the label.
|
|
881
|
-
* Certain stacked and floating label placements cause the
|
|
882
|
-
* label to translate up and create a "cut out"
|
|
883
|
-
* inside of that border by using the notch-spacer element.
|
|
884
|
-
*/
|
|
885
|
-
return [
|
|
886
|
-
h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
|
|
887
|
-
'select-outline-notch': true,
|
|
888
|
-
'select-outline-notch-hidden': !this.hasLabel,
|
|
889
|
-
} }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })),
|
|
890
|
-
this.renderLabel(),
|
|
891
|
-
];
|
|
892
|
-
}
|
|
893
|
-
/**
|
|
894
|
-
* If not using the outline style,
|
|
895
|
-
* we can render just the label.
|
|
896
|
-
*/
|
|
897
|
-
return this.renderLabel();
|
|
896
|
+
renderOutlineContainer() {
|
|
897
|
+
return (h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
|
|
898
|
+
'select-outline-notch': true,
|
|
899
|
+
'select-outline-notch-hidden': !this.hasLabel,
|
|
900
|
+
} }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })));
|
|
898
901
|
}
|
|
899
902
|
/**
|
|
900
903
|
* Wraps text nodes in the select text with span elements
|
|
@@ -1054,28 +1057,10 @@ export class Select {
|
|
|
1054
1057
|
const inItem = hostContext('ion-item', this.el);
|
|
1055
1058
|
const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
|
|
1056
1059
|
const hasValue = this.hasValue();
|
|
1057
|
-
const
|
|
1060
|
+
const hasOutlineFill = mode === 'md' && fill === 'outline';
|
|
1058
1061
|
renderHiddenInput(true, el, name, parseValue(value), disabled);
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
* For floating labels, the label should move above the select if
|
|
1062
|
-
* the select has a value, is open, or has anything in either
|
|
1063
|
-
* the start or end slot.
|
|
1064
|
-
*
|
|
1065
|
-
* If there is content in the start slot, the label would overlap
|
|
1066
|
-
* it if not forced to float. This is also applied to the end slot
|
|
1067
|
-
* because with the default or solid fills, the select is not
|
|
1068
|
-
* vertically centered in the container, but the label is. This
|
|
1069
|
-
* causes the slots and label to appear vertically offset from each
|
|
1070
|
-
* other when the label isn't floating above the input. This doesn't
|
|
1071
|
-
* apply to the outline fill, but this was not accounted for to keep
|
|
1072
|
-
* things consistent.
|
|
1073
|
-
*
|
|
1074
|
-
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
1075
|
-
*/
|
|
1076
|
-
const labelShouldFloat = labelPlacement === 'stacked' ||
|
|
1077
|
-
(labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded || hasStartEndSlots));
|
|
1078
|
-
return (h(Host, { key: 'e693afee7852c89be122b785230ed8fc9be5ba61', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1062
|
+
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded));
|
|
1063
|
+
return (h(Host, { key: '5d1e5bf46d0f204efdcb55cc42cfde52e6db304b', onClick: this.onClick, class: createColorClasses(this.color, {
|
|
1079
1064
|
[mode]: true,
|
|
1080
1065
|
'in-item': inItem,
|
|
1081
1066
|
'in-item-color': hostContext('ion-item.ion-color', el),
|
|
@@ -1093,7 +1078,7 @@ export class Select {
|
|
|
1093
1078
|
[`select-justify-${justify}`]: justifyEnabled,
|
|
1094
1079
|
[`select-shape-${shape}`]: shape !== undefined,
|
|
1095
1080
|
[`select-label-placement-${labelPlacement}`]: true,
|
|
1096
|
-
}) }, h("label", { key: '
|
|
1081
|
+
}) }, h("label", { key: '15fd1f8e06510ae8472c621cf8cf90e51172e0be', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: '7964e3d9351671899793b117896acdda25ec24c4', class: "select-start", part: "start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: 'aa309ef155c4025acfd7ed5739b5221c85097b36', name: "start" })), h("div", { key: '23d5a9dfea64a9d81b0b36d9426b15bed98901b9', class: "select-control", part: "control" }, this.renderLabel(), h("div", { key: '810da9fbfa8771e09b5fb768d64e5f04858b5833', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox(), !hasFloatingOrStackedLabel && this.renderSelectIcon())), h("div", { key: 'bf1c04704326ecfa14cf2e49bb76d3fb45beb08d', class: "select-end", part: "end" }, hasFloatingOrStackedLabel && this.renderSelectIcon(), h("slot", { key: '76a8bcaeefdcaa908aebd820d93171b08165cee3', name: "end" })), shouldRenderHighlight && h("div", { key: '55a9c417a82323a44e16328fd62a634d9d7c558b', class: "select-highlight" })), this.renderBottomContent()));
|
|
1097
1082
|
}
|
|
1098
1083
|
static get is() { return "ion-select"; }
|
|
1099
1084
|
static get encapsulation() { return "shadow"; }
|
|
@@ -202,33 +202,6 @@ button {
|
|
|
202
202
|
color: inherit;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
/**
|
|
206
|
-
* The select icon should be centered with
|
|
207
|
-
* the entire container not just the control
|
|
208
|
-
* with floating/stacked labels.
|
|
209
|
-
*/
|
|
210
|
-
:host(.select-label-placement-stacked) .select-icon,
|
|
211
|
-
:host(.select-label-placement-floating) .select-icon {
|
|
212
|
-
position: absolute;
|
|
213
|
-
height: 100%;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* This positions the icon at the correct
|
|
218
|
-
* edge of the component with LTR and RTL
|
|
219
|
-
* text directions. The position mixin cannot be
|
|
220
|
-
* used here because the icon is in the Shadow DOM.
|
|
221
|
-
*/
|
|
222
|
-
:host(.select-ltr.select-label-placement-stacked) .select-icon,
|
|
223
|
-
:host(.select-ltr.select-label-placement-floating) .select-icon {
|
|
224
|
-
right: var(--padding-end, 0);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
:host(.select-rtl.select-label-placement-stacked) .select-icon,
|
|
228
|
-
:host(.select-rtl.select-label-placement-floating) .select-icon {
|
|
229
|
-
left: var(--padding-start, 0);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
205
|
.select-text {
|
|
233
206
|
flex: 1;
|
|
234
207
|
min-width: 16px;
|
|
@@ -271,7 +244,7 @@ button {
|
|
|
271
244
|
display: flex;
|
|
272
245
|
position: relative;
|
|
273
246
|
flex-grow: 1;
|
|
274
|
-
align-items:
|
|
247
|
+
align-items: stretch;
|
|
275
248
|
justify-content: space-between;
|
|
276
249
|
height: inherit;
|
|
277
250
|
/**
|
|
@@ -297,21 +270,24 @@ button {
|
|
|
297
270
|
transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
298
271
|
}
|
|
299
272
|
|
|
300
|
-
|
|
273
|
+
/**
|
|
274
|
+
* The control must inherit specific flex properties
|
|
275
|
+
* so that it will be placed properly when justify
|
|
276
|
+
* or label-placement are set on the host.
|
|
277
|
+
*/
|
|
278
|
+
.select-control {
|
|
301
279
|
display: flex;
|
|
280
|
+
flex: 1;
|
|
281
|
+
flex-direction: inherit;
|
|
302
282
|
align-items: center;
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
:host(.select-label-placement-stacked) .select-wrapper-inner,
|
|
307
|
-
:host(.select-label-placement-floating) .select-wrapper-inner {
|
|
283
|
+
justify-content: inherit;
|
|
308
284
|
/**
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
285
|
+
* The min-width is set to 0 to allow flex items to shrink below
|
|
286
|
+
* their content size. This enables the select text to collapse
|
|
287
|
+
* in width. We avoid overflow: hidden here because it will clip
|
|
288
|
+
* the floating label.
|
|
313
289
|
*/
|
|
314
|
-
|
|
290
|
+
min-width: 0;
|
|
315
291
|
}
|
|
316
292
|
|
|
317
293
|
:host(.ion-touched.ion-invalid) {
|
|
@@ -399,6 +375,12 @@ button {
|
|
|
399
375
|
*/
|
|
400
376
|
display: flex;
|
|
401
377
|
align-items: center;
|
|
378
|
+
/**
|
|
379
|
+
* Allows the label to shrink below its intrinsic content width.
|
|
380
|
+
* Without this the label keeps its full width and can push the
|
|
381
|
+
* select and end slot outside the wrapper.
|
|
382
|
+
*/
|
|
383
|
+
min-width: 0;
|
|
402
384
|
/**
|
|
403
385
|
* Label text should not extend
|
|
404
386
|
* beyond the bounds of the select.
|
|
@@ -417,6 +399,18 @@ button {
|
|
|
417
399
|
pointer-events: none;
|
|
418
400
|
}
|
|
419
401
|
|
|
402
|
+
/**
|
|
403
|
+
* When start/end slots are added or removed, we temporarily
|
|
404
|
+
* disable the label transition to prevent the floating label
|
|
405
|
+
* from animating as its position is adjusted.
|
|
406
|
+
*
|
|
407
|
+
* This class is applied by the start container controller, so
|
|
408
|
+
* renaming it here requires renaming it there too.
|
|
409
|
+
*/
|
|
410
|
+
:host(.skip-label-transition) .label-text-wrapper {
|
|
411
|
+
transition: none;
|
|
412
|
+
}
|
|
413
|
+
|
|
420
414
|
/**
|
|
421
415
|
* We need to use two elements instead of
|
|
422
416
|
* one. The .label-text-wrapper is responsible
|
|
@@ -449,6 +443,13 @@ button {
|
|
|
449
443
|
|
|
450
444
|
.native-wrapper {
|
|
451
445
|
display: flex;
|
|
446
|
+
/**
|
|
447
|
+
* Give up space before the label does. Flexbox would otherwise take
|
|
448
|
+
* from both in proportion to their size and truncate the shorter
|
|
449
|
+
* label first. The factor is this large because the label truncates
|
|
450
|
+
* as soon as it loses any width at all, even a fraction of a pixel.
|
|
451
|
+
*/
|
|
452
|
+
flex-shrink: 100000;
|
|
452
453
|
align-items: center;
|
|
453
454
|
/**
|
|
454
455
|
* When the floating label appears on top of the
|
|
@@ -552,9 +553,16 @@ button {
|
|
|
552
553
|
* down when the select is focused or has a value.
|
|
553
554
|
*
|
|
554
555
|
*/
|
|
555
|
-
:host(.select-label-placement-stacked) .select-
|
|
556
|
-
:host(.select-label-placement-floating) .select-
|
|
556
|
+
:host(.select-label-placement-stacked) .select-control,
|
|
557
|
+
:host(.select-label-placement-floating) .select-control {
|
|
557
558
|
flex-direction: column;
|
|
559
|
+
/**
|
|
560
|
+
* When using a stacked/floating label, the control is
|
|
561
|
+
* stacked vertically under the label container. This line
|
|
562
|
+
* ensures that the control fills all the remaining height
|
|
563
|
+
* of the component.
|
|
564
|
+
*/
|
|
565
|
+
flex-grow: 1;
|
|
558
566
|
align-items: start;
|
|
559
567
|
}
|
|
560
568
|
|
|
@@ -579,17 +587,11 @@ button {
|
|
|
579
587
|
}
|
|
580
588
|
|
|
581
589
|
/**
|
|
582
|
-
* Ensures the
|
|
583
|
-
*
|
|
584
|
-
* Also ensure that the native wrapper
|
|
585
|
-
* takes up the remaining available height and width.
|
|
590
|
+
* Ensures that the native wrapper takes up the
|
|
591
|
+
* remaining available height and width.
|
|
586
592
|
*/
|
|
587
593
|
:host(.select-label-placement-stacked) .native-wrapper,
|
|
588
594
|
:host(.select-label-placement-floating) .native-wrapper {
|
|
589
|
-
margin-left: 0;
|
|
590
|
-
margin-right: 0;
|
|
591
|
-
margin-top: 1px;
|
|
592
|
-
margin-bottom: 0;
|
|
593
595
|
flex-grow: 1;
|
|
594
596
|
width: 100%;
|
|
595
597
|
}
|
|
@@ -613,27 +615,16 @@ button {
|
|
|
613
615
|
* The placeholder should be hidden when the label
|
|
614
616
|
* is on top of the select. This prevents the label
|
|
615
617
|
* from overlapping any placeholder value.
|
|
616
|
-
*
|
|
617
|
-
* TODO(FW-5592): Remove :not(.label-floating) piece
|
|
618
618
|
*/
|
|
619
|
-
:host(.select-label-placement-floating
|
|
619
|
+
:host(.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
620
620
|
opacity: 0;
|
|
621
621
|
}
|
|
622
622
|
|
|
623
623
|
/**
|
|
624
|
-
*
|
|
625
|
-
* also include the case where the label is floating due
|
|
626
|
-
* to content in the start/end slot. We want the opacity
|
|
627
|
-
* to remain at the default in this case, since the select
|
|
628
|
-
* isn't being actively interacted with.
|
|
629
|
-
*
|
|
630
|
-
* TODO(FW-5592): Change entire selector to:
|
|
631
|
-
* :host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder
|
|
624
|
+
* Show the placeholder when the label is floating.
|
|
632
625
|
*/
|
|
633
|
-
:host(.
|
|
634
|
-
:
|
|
635
|
-
:host(.has-value.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
636
|
-
opacity: 1;
|
|
626
|
+
:host(.label-floating.select-label-placement-floating) .native-wrapper .select-placeholder {
|
|
627
|
+
opacity: var(--placeholder-opacity);
|
|
637
628
|
}
|
|
638
629
|
|
|
639
630
|
/**
|
|
@@ -648,6 +639,14 @@ button {
|
|
|
648
639
|
max-width: calc(100% / 0.75);
|
|
649
640
|
}
|
|
650
641
|
|
|
642
|
+
.select-start,
|
|
643
|
+
.select-end {
|
|
644
|
+
display: flex;
|
|
645
|
+
position: relative;
|
|
646
|
+
flex-shrink: 0;
|
|
647
|
+
align-items: center;
|
|
648
|
+
}
|
|
649
|
+
|
|
651
650
|
::slotted([slot=start]), ::slotted([slot=end]) {
|
|
652
651
|
/**
|
|
653
652
|
* Prevent the slots from shrinking when the label and/or
|
|
@@ -980,6 +979,14 @@ button {
|
|
|
980
979
|
--border-radius: 4px;
|
|
981
980
|
--padding-start: 16px;
|
|
982
981
|
--padding-end: 16px;
|
|
982
|
+
/**
|
|
983
|
+
* The measured width of the start container, as a negative offset
|
|
984
|
+
* in LTR and a positive one in RTL. Written to the host by the
|
|
985
|
+
* start container controller, so renaming it here requires renaming
|
|
986
|
+
* it there too. Declared with a default so the label is positioned
|
|
987
|
+
* correctly before the first measurement runs.
|
|
988
|
+
*/
|
|
989
|
+
--internal-start-container-adjustment: 0px;
|
|
983
990
|
min-height: 56px;
|
|
984
991
|
}
|
|
985
992
|
|
|
@@ -1049,10 +1056,11 @@ button {
|
|
|
1049
1056
|
:host(.select-fill-outline.select-label-placement-floating) .label-text-wrapper {
|
|
1050
1057
|
position: absolute;
|
|
1051
1058
|
/**
|
|
1052
|
-
*
|
|
1053
|
-
*
|
|
1059
|
+
* While resting this is the width of the select, which already
|
|
1060
|
+
* excludes the start and end slots. Once the label floats the
|
|
1061
|
+
* containing block becomes the wrapper and the rule below takes over.
|
|
1054
1062
|
*/
|
|
1055
|
-
max-width:
|
|
1063
|
+
max-width: 100%;
|
|
1056
1064
|
}
|
|
1057
1065
|
|
|
1058
1066
|
/**
|
|
@@ -1065,11 +1073,20 @@ button {
|
|
|
1065
1073
|
z-index: 1;
|
|
1066
1074
|
}
|
|
1067
1075
|
|
|
1076
|
+
/**
|
|
1077
|
+
* The resting label is positioned relative to the control so it can size to
|
|
1078
|
+
* the space between the start and end slots. When floating, the label needs
|
|
1079
|
+
* to escape the control and position itself relative to the wrapper instead.
|
|
1080
|
+
*/
|
|
1081
|
+
:host(.select-fill-outline:not(.label-floating)) .select-control {
|
|
1082
|
+
position: relative;
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1068
1085
|
/**
|
|
1069
1086
|
* This makes the label sit above the select.
|
|
1070
1087
|
*/
|
|
1071
1088
|
:host(.label-floating.select-fill-outline) .label-text-wrapper {
|
|
1072
|
-
transform:
|
|
1089
|
+
transform: translate(var(--internal-start-container-adjustment, 0px), -32%) scale(0.75);
|
|
1073
1090
|
margin-left: 0;
|
|
1074
1091
|
margin-right: 0;
|
|
1075
1092
|
margin-top: 0;
|
|
@@ -1164,16 +1181,10 @@ button {
|
|
|
1164
1181
|
:host(.select-fill-outline) .select-outline-start {
|
|
1165
1182
|
-webkit-border-start: var(--border-width) var(--border-style) var(--border-color);
|
|
1166
1183
|
border-inline-start: var(--border-width) var(--border-style) var(--border-color);
|
|
1167
|
-
}
|
|
1168
|
-
|
|
1169
|
-
:host(.select-fill-outline) .select-outline-start {
|
|
1170
1184
|
border-start-start-radius: var(--border-radius);
|
|
1171
1185
|
border-start-end-radius: 0px;
|
|
1172
1186
|
border-end-end-radius: 0px;
|
|
1173
1187
|
border-end-start-radius: var(--border-radius);
|
|
1174
|
-
}
|
|
1175
|
-
|
|
1176
|
-
:host(.select-fill-outline) .select-outline-start {
|
|
1177
1188
|
/**
|
|
1178
1189
|
* There should be spacing between the translated text
|
|
1179
1190
|
* and .select-outline-start. However, we can't add this
|
|
@@ -1188,16 +1199,10 @@ button {
|
|
|
1188
1199
|
:host(.select-fill-outline) .select-outline-end {
|
|
1189
1200
|
-webkit-border-end: var(--border-width) var(--border-style) var(--border-color);
|
|
1190
1201
|
border-inline-end: var(--border-width) var(--border-style) var(--border-color);
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
:host(.select-fill-outline) .select-outline-end {
|
|
1194
1202
|
border-start-start-radius: 0px;
|
|
1195
1203
|
border-start-end-radius: var(--border-radius);
|
|
1196
1204
|
border-end-end-radius: var(--border-radius);
|
|
1197
1205
|
border-end-start-radius: 0px;
|
|
1198
|
-
}
|
|
1199
|
-
|
|
1200
|
-
:host(.select-fill-outline) .select-outline-end {
|
|
1201
1206
|
/**
|
|
1202
1207
|
* The ending outline fragment
|
|
1203
1208
|
* should take up the remaining free space.
|
|
@@ -1326,11 +1331,6 @@ button {
|
|
|
1326
1331
|
--border-radius: 16px;
|
|
1327
1332
|
}
|
|
1328
1333
|
|
|
1329
|
-
:host(.select-label-placement-stacked) .select-wrapper-inner,
|
|
1330
|
-
:host(.select-label-placement-floating) .select-wrapper-inner {
|
|
1331
|
-
width: calc(100% - 0.8125rem - 4px);
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1334
1334
|
:host(.select-disabled) {
|
|
1335
1335
|
opacity: 0.38;
|
|
1336
1336
|
}
|
|
@@ -144,7 +144,7 @@ export class SelectModal {
|
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
render() {
|
|
147
|
-
return (h(Host, { key: '
|
|
147
|
+
return (h(Host, { key: '791e95b985dd4b135db17a25fc678e9f8b73c597', class: getIonMode(this) }, h("ion-header", { key: '697d18eef394c4c11c73afe69b9eadd1bad97d38' }, h("ion-toolbar", { key: '036968824ad8771020fe2b7604a6e72b73efc8ae' }, this.header !== undefined && h("ion-title", { key: '102e0346be83e879e733f9b410437b26216156aa' }, this.header), h("ion-buttons", { key: '436b997e990ce2f5e12e1651f8afc31ae231f7b0', slot: "end" }, h("ion-button", { key: 'ee4ddfd0612d33583aa0b93ebdb5257b10d4fda5', onClick: () => this.closeModal() }, this.cancelText)))), h("ion-content", { key: '38ea098f85ac69226e614e0a09f668e9209f7ea1' }, h("ion-list", { key: '20becc2537a1a027915fe0598203039ceb8ba4f3' }, this.multiple === true ? this.renderCheckboxOptions() : this.renderRadioOptions()))));
|
|
148
148
|
}
|
|
149
149
|
static get is() { return "ion-select-modal"; }
|
|
150
150
|
static get encapsulation() { return "scoped"; }
|
|
@@ -56,7 +56,7 @@ export class SelectOption {
|
|
|
56
56
|
*/
|
|
57
57
|
justify;
|
|
58
58
|
render() {
|
|
59
|
-
return h(Host, { key: '
|
|
59
|
+
return h(Host, { key: '01275b5a613c4b065b24e0d939f611f6ed1fc9ee', role: "option", id: this.inputId, class: getIonMode(this) });
|
|
60
60
|
}
|
|
61
61
|
static get is() { return "ion-select-option"; }
|
|
62
62
|
static get encapsulation() { return "shadow"; }
|
|
@@ -179,7 +179,7 @@ export class SelectPopover {
|
|
|
179
179
|
render() {
|
|
180
180
|
const { header, message, options, subHeader } = this;
|
|
181
181
|
const hasSubHeaderOrMessage = subHeader !== undefined || message !== undefined;
|
|
182
|
-
return (h(Host, { key: '
|
|
182
|
+
return (h(Host, { key: '4b4ac4a4b6523147e7c1f5e29dd8043867f2baea', class: getIonMode(this) }, h("ion-list", { key: 'f700d3dc3ce68c20a4d981164b29262564097fb4' }, header !== undefined && h("ion-list-header", { key: '196bcd7963f13ef8bc46231545eee4cb8d526f5e' }, header), hasSubHeaderOrMessage && (h("ion-item", { key: 'bb108e0aa2409997df35f52cb67e58e55e0fd630' }, h("ion-label", { key: '59e8d9196ff976f3835766662654c0f085e58ec3', class: "ion-text-wrap" }, subHeader !== undefined && h("h3", { key: '532f75d7c129ffadca4e6cbb619a4427aaede65c' }, subHeader), message !== undefined && h("p", { key: 'fc42c91594b9001e983cb5e4176fc4c9bff0f708' }, message)))), this.renderOptions(options))));
|
|
183
183
|
}
|
|
184
184
|
static get is() { return "ion-select-popover"; }
|
|
185
185
|
static get encapsulation() { return "scoped"; }
|
|
@@ -32,11 +32,11 @@ export class SkeletonText {
|
|
|
32
32
|
const animated = this.animated && config.getBoolean('animated', true);
|
|
33
33
|
const inMedia = hostContext('ion-avatar', this.el) || hostContext('ion-thumbnail', this.el);
|
|
34
34
|
const mode = getIonMode(this);
|
|
35
|
-
return (h(Host, { key: '
|
|
35
|
+
return (h(Host, { key: '1114e5caf6419e9458db8256480b39e6989963b2', class: {
|
|
36
36
|
[mode]: true,
|
|
37
37
|
'skeleton-text-animated': animated,
|
|
38
38
|
'in-media': inMedia,
|
|
39
|
-
} }, h("span", { key: '
|
|
39
|
+
} }, h("span", { key: '9137cf837f163fc0653437fc003666cddac103b0' }, "\u00A0")));
|
|
40
40
|
}
|
|
41
41
|
static get is() { return "ion-skeleton-text"; }
|
|
42
42
|
static get encapsulation() { return "shadow"; }
|
|
@@ -51,7 +51,7 @@ export class Spinner {
|
|
|
51
51
|
svgs.push(buildLine(spinner, duration, i, spinner.lines));
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
return (h(Host, { key: '
|
|
54
|
+
return (h(Host, { key: '87102ff9ea58b0ecde5d0978386374f7d0e9cf98', class: createColorClasses(self.color, {
|
|
55
55
|
[mode]: true,
|
|
56
56
|
[`spinner-${spinnerName}`]: true,
|
|
57
57
|
'spinner-paused': self.paused || config.getBoolean('_testing'),
|
|
@@ -138,12 +138,12 @@ export class SplitPane {
|
|
|
138
138
|
}
|
|
139
139
|
render() {
|
|
140
140
|
const mode = getIonMode(this);
|
|
141
|
-
return (h(Host, { key: '
|
|
141
|
+
return (h(Host, { key: '652bc0965ae962dc36a67fd7129dacaa1ba8e551', class: {
|
|
142
142
|
[mode]: true,
|
|
143
143
|
// Used internally for styling
|
|
144
144
|
[`split-pane-${mode}`]: true,
|
|
145
145
|
'split-pane-visible': this.visible,
|
|
146
|
-
} }, h("slot", { key: '
|
|
146
|
+
} }, h("slot", { key: '9eac85f4c4e33ec00e8e16e2679f5975d7652452' })));
|
|
147
147
|
}
|
|
148
148
|
static get is() { return "ion-split-pane"; }
|
|
149
149
|
static get encapsulation() { return "shadow"; }
|
|
@@ -65,10 +65,10 @@ export class Tab {
|
|
|
65
65
|
}
|
|
66
66
|
render() {
|
|
67
67
|
const { tab, active, component } = this;
|
|
68
|
-
return (h(Host, { key: '
|
|
68
|
+
return (h(Host, { key: '8ecbd7a85d3370ed8ed40561cd8134e71584d6aa', role: "tabpanel", "aria-hidden": !active ? 'true' : null, "aria-labelledby": `tab-button-${tab}`, class: {
|
|
69
69
|
'ion-page': component === undefined,
|
|
70
70
|
'tab-hidden': !active,
|
|
71
|
-
} }, h("slot", { key: '
|
|
71
|
+
} }, h("slot", { key: '8d6326d75812888e33fd09665b7e588e1e270df1' })));
|
|
72
72
|
}
|
|
73
73
|
static get is() { return "ion-tab"; }
|
|
74
74
|
static get encapsulation() { return "shadow"; }
|
|
@@ -105,11 +105,11 @@ export class TabBar {
|
|
|
105
105
|
const { color, translucent, keyboardVisible } = this;
|
|
106
106
|
const mode = getIonMode(this);
|
|
107
107
|
const shouldHide = keyboardVisible && this.el.getAttribute('slot') !== 'top';
|
|
108
|
-
return (h(Host, { key: '
|
|
108
|
+
return (h(Host, { key: '5c56cffd380df7720f3309af7cfca71500817678', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
|
|
109
109
|
[mode]: true,
|
|
110
110
|
'tab-bar-translucent': translucent,
|
|
111
111
|
'tab-bar-hidden': shouldHide,
|
|
112
|
-
}) }, h("slot", { key: '
|
|
112
|
+
}) }, h("slot", { key: 'a98d3298320f864578e30e0fb79a2cc0cccb46d9' })));
|
|
113
113
|
}
|
|
114
114
|
static get is() { return "ion-tab-bar"; }
|
|
115
115
|
static get encapsulation() { return "shadow"; }
|
|
@@ -109,7 +109,7 @@ export class TabButton {
|
|
|
109
109
|
rel,
|
|
110
110
|
target,
|
|
111
111
|
};
|
|
112
|
-
return (h(Host, { key: '
|
|
112
|
+
return (h(Host, { key: '45bb7ffa6d8764202adc2c5c393748d4003e86fe', onClick: this.onClick, onKeyup: this.onKeyUp, id: tab !== undefined ? `tab-button-${tab}` : null, class: {
|
|
113
113
|
[mode]: true,
|
|
114
114
|
'tab-selected': selected,
|
|
115
115
|
'tab-disabled': disabled,
|
|
@@ -121,7 +121,7 @@ export class TabButton {
|
|
|
121
121
|
'ion-activatable': true,
|
|
122
122
|
'ion-selectable': true,
|
|
123
123
|
'ion-focusable': true,
|
|
124
|
-
} }, h("a", { key: '
|
|
124
|
+
} }, h("a", { key: '78c416609a2b86a6e7c5f217ffd2a6b9f80a5103', ...attrs, class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : undefined, ...inheritedAttributes }, h("span", { key: '62934156439ffd0ab86674b9cf89d9cfa0d3589c', class: "button-inner" }, h("slot", { key: '293ba8f5ef50373c4e6e492dcaa55b3d2aae8d2f' })), mode === 'md' && h("ion-ripple-effect", { key: '360b010afedcf17fc1f3ab6d192f0f8c7b1cf112', type: "unbounded" }))));
|
|
125
125
|
}
|
|
126
126
|
static get is() { return "ion-tab-button"; }
|
|
127
127
|
static get encapsulation() { return "shadow"; }
|
|
@@ -175,7 +175,7 @@ export class Tabs {
|
|
|
175
175
|
}
|
|
176
176
|
};
|
|
177
177
|
render() {
|
|
178
|
-
return (h(Host, { key: '
|
|
178
|
+
return (h(Host, { key: '7b8c6455e0673e343d0c759ed85e0d9970de3bb8', onIonTabButtonClick: this.onTabClicked }, h("slot", { key: '7d0d840ae03312ca22bcb694ffca738d6648218e', name: "top" }), h("div", { key: 'f336d903800af34af0d36adfc94223b940111e6a', class: "tabs-inner" }, h("slot", { key: '14656154959a24ae176eff20f6463043180d2eae' })), h("slot", { key: '2be4d114f058d24b0e70fb12cfb0eccd3d6e6a74', name: "bottom" })));
|
|
179
179
|
}
|
|
180
180
|
static get is() { return "ion-tabs"; }
|
|
181
181
|
static get encapsulation() { return "shadow"; }
|
|
@@ -16,9 +16,9 @@ export class Text {
|
|
|
16
16
|
color;
|
|
17
17
|
render() {
|
|
18
18
|
const mode = getIonMode(this);
|
|
19
|
-
return (h(Host, { key: '
|
|
19
|
+
return (h(Host, { key: 'b6f604df1b7aa5705a5b9a458e669a6a921c02a1', class: createColorClasses(this.color, {
|
|
20
20
|
[mode]: true,
|
|
21
|
-
}) }, h("slot", { key: '
|
|
21
|
+
}) }, h("slot", { key: '055d07b024a6554dfcf959fc8ed7b405e2730af2' })));
|
|
22
22
|
}
|
|
23
23
|
static get is() { return "ion-text"; }
|
|
24
24
|
static get encapsulation() { return "shadow"; }
|