@ionic/core 9.0.3-dev.11788456135.1ab1d6cd → 9.0.3-dev.11790016799.1e269b7a
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-accordion.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-checkbox.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-textarea.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/{p-Cc3oC60a.js → p-0rXxxCTt.js} +1 -1
- package/components/p-B9ibhQu1.js +4 -0
- package/components/p-BzxHcuQH.js +4 -0
- package/components/p-C6wm_AQQ.js +4 -0
- package/components/p-CaxVJjmc.js +4 -0
- package/components/{p-Cm78Kk79.js → p-D2X-Hime.js} +1 -1
- package/css/ionic/bundle.ionic.css.map +1 -1
- package/css/ionic/core.ionic.css.map +1 -1
- package/css/ionic/global.bundle.ionic.css.map +1 -1
- package/css/ionic/ionic-swiper.ionic.css.map +1 -1
- package/css/ionic/link.ionic.css.map +1 -1
- package/css/ionic/typography.ionic.css.map +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +9 -14
- package/dist/cjs/ion-alert.cjs.entry.js +4 -4
- package/dist/cjs/ion-back-button.cjs.entry.js +11 -13
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +16 -29
- package/dist/cjs/ion-checkbox.cjs.entry.js +23 -15
- package/dist/cjs/ion-datetime.cjs.entry.js +14 -50
- package/dist/cjs/ion-fab_3.cjs.entry.js +9 -14
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +17 -29
- package/dist/cjs/ion-input.cjs.entry.js +12 -28
- package/dist/cjs/ion-item_8.cjs.entry.js +10 -15
- package/dist/cjs/ion-menu_3.cjs.entry.js +9 -12
- package/dist/cjs/ion-refresher_2.cjs.entry.js +10 -5
- package/dist/cjs/ion-reorder_2.cjs.entry.js +5 -13
- package/dist/cjs/ion-searchbar.cjs.entry.js +8 -37
- package/dist/cjs/ion-select-modal.cjs.entry.js +11 -10
- package/dist/cjs/ion-select_3.cjs.entry.js +13 -37
- package/dist/cjs/ion-textarea.cjs.entry.js +13 -21
- package/dist/cjs/ion-toggle.cjs.entry.js +12 -28
- package/dist/collection/components/accordion/accordion.js +9 -14
- package/dist/collection/components/alert/alert.ionic.css +7 -9
- package/dist/collection/components/alert/alert.js +3 -3
- package/dist/collection/components/back-button/back-button.js +11 -13
- package/dist/collection/components/breadcrumb/breadcrumb.js +16 -28
- package/dist/collection/components/checkbox/checkbox.ionic.css +35 -42
- package/dist/collection/components/checkbox/checkbox.ios.css +33 -29
- package/dist/collection/components/checkbox/checkbox.js +23 -13
- package/dist/collection/components/checkbox/checkbox.md.css +33 -29
- package/dist/collection/components/datetime/datetime.ios.css +5 -10
- package/dist/collection/components/datetime/datetime.js +12 -48
- package/dist/collection/components/datetime/datetime.md.css +5 -10
- package/dist/collection/components/fab-button/fab-button.js +9 -14
- package/dist/collection/components/input/input.ionic.css +102 -79
- package/dist/collection/components/input/input.js +11 -27
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +18 -28
- package/dist/collection/components/item/item.js +10 -15
- package/dist/collection/components/menu-button/menu-button.js +9 -12
- package/dist/collection/components/refresher-content/refresher-content.js +10 -4
- package/dist/collection/components/reorder/reorder.js +5 -13
- package/dist/collection/components/searchbar/searchbar.js +8 -35
- package/dist/collection/components/select/select.ionic.css +187 -76
- package/dist/collection/components/select/select.js +14 -39
- package/dist/collection/components/select-modal/select-modal.js +12 -10
- package/dist/collection/components/textarea/textarea.ionic.css +133 -85
- package/dist/collection/components/textarea/textarea.ios.css +0 -4
- package/dist/collection/components/textarea/textarea.js +13 -18
- package/dist/collection/components/textarea/textarea.md.css +0 -4
- package/dist/collection/components/toggle/toggle.js +12 -26
- package/dist/collection/utils/test/playwright/field-geometry.js +34 -0
- package/dist/collection/utils/test/playwright/index.js +1 -0
- package/dist/docs.json +60 -25
- package/dist/esm/{index-BqQ15K9a.js → index-BkJpfpXI.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +10 -15
- package/dist/esm/ion-alert.entry.js +4 -4
- package/dist/esm/ion-back-button.entry.js +12 -14
- package/dist/esm/ion-breadcrumb_2.entry.js +17 -30
- package/dist/esm/ion-checkbox.entry.js +24 -16
- package/dist/esm/ion-datetime.entry.js +15 -51
- package/dist/esm/ion-fab_3.entry.js +10 -15
- package/dist/esm/ion-input-password-toggle.entry.js +19 -31
- package/dist/esm/ion-input.entry.js +13 -29
- package/dist/esm/ion-item_8.entry.js +11 -16
- package/dist/esm/ion-menu_3.entry.js +10 -13
- package/dist/esm/ion-refresher_2.entry.js +11 -6
- package/dist/esm/ion-reorder_2.entry.js +6 -14
- package/dist/esm/ion-searchbar.entry.js +9 -38
- package/dist/esm/ion-select-modal.entry.js +13 -12
- package/dist/esm/ion-select_3.entry.js +14 -38
- package/dist/esm/ion-textarea.entry.js +13 -21
- package/dist/esm/ion-toggle.entry.js +13 -29
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-016f2ee0.entry.js +4 -0
- package/dist/ionic/p-07b95001.entry.js +4 -0
- package/dist/ionic/p-14dfe86e.entry.js +4 -0
- package/dist/ionic/p-167af5d6.entry.js +4 -0
- package/dist/ionic/p-18285aab.entry.js +4 -0
- package/dist/ionic/{p-2e3acd77.entry.js → p-1e0f0eb9.entry.js} +1 -1
- package/dist/ionic/p-368935f5.entry.js +4 -0
- package/dist/ionic/p-38da0794.entry.js +4 -0
- package/dist/ionic/p-80f71456.entry.js +4 -0
- package/dist/ionic/p-83aa4043.entry.js +4 -0
- package/dist/ionic/p-944ce631.entry.js +4 -0
- package/dist/ionic/{p-BqQ15K9a.js → p-BkJpfpXI.js} +1 -1
- package/dist/ionic/p-aecef1d7.entry.js +4 -0
- package/dist/ionic/p-bb83b861.entry.js +4 -0
- package/dist/ionic/p-c1c90068.entry.js +4 -0
- package/dist/ionic/p-ccc7487b.entry.js +4 -0
- package/dist/ionic/p-cfd5dc50.entry.js +4 -0
- package/dist/ionic/p-d5c9bf12.entry.js +4 -0
- package/dist/ionic/p-f252ab8a.entry.js +4 -0
- package/dist/types/components/accordion/accordion.d.ts +7 -1
- package/dist/types/components/back-button/back-button.d.ts +8 -2
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +12 -2
- package/dist/types/components/checkbox/checkbox.d.ts +12 -1
- package/dist/types/components/datetime/datetime.d.ts +4 -4
- package/dist/types/components/fab-button/fab-button.d.ts +7 -1
- package/dist/types/components/input/input.d.ts +7 -10
- package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +14 -2
- package/dist/types/components/item/item.d.ts +7 -1
- package/dist/types/components/menu-button/menu-button.d.ts +6 -1
- package/dist/types/components/refresher-content/refresher-content.d.ts +6 -0
- package/dist/types/components/reorder/reorder.d.ts +1 -1
- package/dist/types/components/select/select.d.ts +7 -12
- package/dist/types/components/select-modal/select-modal.d.ts +6 -1
- package/dist/types/components/textarea/textarea.d.ts +8 -8
- package/dist/types/components/toggle/toggle.d.ts +5 -2
- package/dist/types/utils/config.d.ts +22 -2
- package/dist/types/utils/test/playwright/field-geometry.d.ts +13 -0
- package/dist/types/utils/test/playwright/index.d.ts +1 -0
- package/hydrate/index.js +213 -375
- package/hydrate/index.mjs +213 -375
- package/package.json +1 -2
- package/components/p-B1AK6oR-.js +0 -4
- package/components/p-BDqjX7Z_.js +0 -4
- package/components/p-BYSs-jZz.js +0 -4
- package/components/p-CPdOdJa7.js +0 -4
- package/components/p-D1t981Ih.js +0 -4
- package/components/p-Dhi5xtNS.js +0 -4
- package/components/p-DzaPYdjZ.js +0 -4
- package/components/p-e73ca-aN.js +0 -4
- package/components/p-fIOYmaqA.js +0 -4
- package/dist/cjs/caret-down-vtVgfXIs.js +0 -8
- package/dist/cjs/caret-left-CxZXLRv5.js +0 -8
- package/dist/cjs/caret-right-CRCgv98E.js +0 -8
- package/dist/cjs/list-a-7GSA6K.js +0 -8
- package/dist/cjs/x-BTF99yFH.js +0 -8
- package/dist/esm/caret-down-D1t981Ih.js +0 -6
- package/dist/esm/caret-left-fIOYmaqA.js +0 -6
- package/dist/esm/caret-right-BYSs-jZz.js +0 -6
- package/dist/esm/list-Dhi5xtNS.js +0 -6
- package/dist/esm/x-BDqjX7Z_.js +0 -6
- package/dist/ionic/p-04d96dad.entry.js +0 -4
- package/dist/ionic/p-0a924e6a.entry.js +0 -4
- package/dist/ionic/p-2da21af7.entry.js +0 -4
- package/dist/ionic/p-2fc1521f.entry.js +0 -4
- package/dist/ionic/p-73309d35.entry.js +0 -4
- package/dist/ionic/p-74ab5f49.entry.js +0 -4
- package/dist/ionic/p-83d13d56.entry.js +0 -4
- package/dist/ionic/p-8dcd18cf.entry.js +0 -4
- package/dist/ionic/p-9ca59419.entry.js +0 -4
- package/dist/ionic/p-BDqjX7Z_.js +0 -4
- package/dist/ionic/p-BYSs-jZz.js +0 -4
- package/dist/ionic/p-D1t981Ih.js +0 -4
- package/dist/ionic/p-Dhi5xtNS.js +0 -4
- package/dist/ionic/p-b10dc124.entry.js +0 -4
- package/dist/ionic/p-b7ce4a50.entry.js +0 -4
- package/dist/ionic/p-c7035f3f.entry.js +0 -4
- package/dist/ionic/p-c91fc9d4.entry.js +0 -4
- package/dist/ionic/p-cd4791d5.entry.js +0 -4
- package/dist/ionic/p-e9480e7f.entry.js +0 -4
- package/dist/ionic/p-e9fdff49.entry.js +0 -4
- package/dist/ionic/p-f82b13a6.entry.js +0 -4
- package/dist/ionic/p-fIOYmaqA.js +0 -4
|
@@ -548,8 +548,8 @@
|
|
|
548
548
|
* If the input has a validity state, the
|
|
549
549
|
* border should reflect that as a color.
|
|
550
550
|
*/
|
|
551
|
-
:host(.input-fill-solid.has-focus.ion-valid) .input-wrapper
|
|
552
|
-
:host(.input-fill-solid.ion-touched.ion-invalid) .input-wrapper
|
|
551
|
+
:host(.input-fill-solid.has-focus.ion-valid) .input-wrapper,
|
|
552
|
+
:host(.input-fill-solid.ion-touched.ion-invalid) .input-wrapper {
|
|
553
553
|
--border-color: var(--highlight-color);
|
|
554
554
|
}
|
|
555
555
|
|
|
@@ -595,33 +595,6 @@
|
|
|
595
595
|
text-transform: none;
|
|
596
596
|
}
|
|
597
597
|
|
|
598
|
-
.input-outline {
|
|
599
|
-
right: 0;
|
|
600
|
-
left: 0;
|
|
601
|
-
top: 0;
|
|
602
|
-
bottom: 0;
|
|
603
|
-
border-radius: var(--border-radius);
|
|
604
|
-
position: absolute;
|
|
605
|
-
width: 100%;
|
|
606
|
-
height: 100%;
|
|
607
|
-
pointer-events: none;
|
|
608
|
-
border: var(--border-width) var(--border-style) var(--border-color);
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
:host(.input-label-placement-start) .input-wrapper {
|
|
612
|
-
flex-direction: row;
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
:host(.input-label-placement-end) .input-wrapper {
|
|
616
|
-
flex-direction: row-reverse;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
:host(.input-label-placement-stacked) .input-wrapper,
|
|
620
|
-
:host(.input-label-placement-floating) .input-wrapper {
|
|
621
|
-
flex-direction: column;
|
|
622
|
-
align-items: start;
|
|
623
|
-
}
|
|
624
|
-
|
|
625
598
|
:host(.input-label-placement-stacked) input,
|
|
626
599
|
:host(.input-label-placement-floating) input {
|
|
627
600
|
margin-left: 0;
|
|
@@ -639,37 +612,95 @@
|
|
|
639
612
|
padding-bottom: var(--token-space-100, var(--token-scale-100, 4px));
|
|
640
613
|
}
|
|
641
614
|
|
|
615
|
+
/**
|
|
616
|
+
* The label is nested in the control so that every theme renders the same tree.
|
|
617
|
+
* Laying the wrapper out as a grid and flattening the control lets the label
|
|
618
|
+
* span its own row above the start slot, the input and the end slot.
|
|
619
|
+
*/
|
|
642
620
|
.input-wrapper {
|
|
643
|
-
/**
|
|
644
|
-
* For the ionic theme, the padding needs to sit on the
|
|
645
|
-
* native wrapper instead, so that it sits within the
|
|
646
|
-
* outline container but does not always affect the
|
|
647
|
-
* label text.
|
|
648
|
-
*/
|
|
649
621
|
padding-left: 0;
|
|
650
622
|
padding-right: 0;
|
|
651
623
|
padding-top: 0;
|
|
652
624
|
padding-bottom: 0;
|
|
625
|
+
display: grid;
|
|
626
|
+
grid-template-columns: [field-start slot-start] auto [native] minmax(0, 1fr) [slot-end] auto [field-end];
|
|
627
|
+
grid-template-rows: [label] auto [field] auto;
|
|
653
628
|
/**
|
|
654
|
-
*
|
|
655
|
-
*
|
|
656
|
-
* input + label.
|
|
629
|
+
* Only stretch grows an auto row, so centering holds the label row at its
|
|
630
|
+
* content height and still centers the field in any leftover host height.
|
|
657
631
|
*/
|
|
658
|
-
|
|
632
|
+
align-content: center;
|
|
633
|
+
align-items: center;
|
|
659
634
|
/**
|
|
660
|
-
*
|
|
661
|
-
*
|
|
662
|
-
* background to the native wrapper.
|
|
635
|
+
* The wrapper spans the label too, so the background belongs on the field
|
|
636
|
+
* box rather than here.
|
|
663
637
|
*/
|
|
664
638
|
background: transparent;
|
|
665
639
|
}
|
|
666
640
|
|
|
641
|
+
.input-control {
|
|
642
|
+
display: contents;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* A pseudo-element draws the box across the second row, so the label can sit in
|
|
647
|
+
* the first row and stay outside of it while the tree matches the other themes.
|
|
648
|
+
*/
|
|
649
|
+
.input-wrapper::before {
|
|
650
|
+
border-radius: var(--border-radius, 0);
|
|
651
|
+
align-self: stretch;
|
|
652
|
+
box-sizing: border-box;
|
|
653
|
+
content: "";
|
|
654
|
+
pointer-events: none;
|
|
655
|
+
min-height: var(--token-scale-1000, 40px);
|
|
656
|
+
border: var(--border-width) var(--border-style) var(--border-color);
|
|
657
|
+
background: var(--background);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
.input-wrapper::before {
|
|
661
|
+
grid-row: field;
|
|
662
|
+
grid-column: field-start/field-end;
|
|
663
|
+
}
|
|
664
|
+
|
|
667
665
|
.label-text-wrapper {
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
666
|
+
grid-row: label;
|
|
667
|
+
grid-column: field-start/field-end;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
.input-start {
|
|
671
|
+
grid-row: field;
|
|
672
|
+
grid-column: slot-start;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
.native-wrapper {
|
|
676
|
+
grid-row: field;
|
|
677
|
+
grid-column: native;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
.input-end {
|
|
681
|
+
grid-row: field;
|
|
682
|
+
grid-column: slot-end;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
/**
|
|
686
|
+
* The padding sits on the cells that the field box covers, so the label is not
|
|
687
|
+
* indented by it.
|
|
688
|
+
*/
|
|
689
|
+
.input-start,
|
|
690
|
+
.native-wrapper,
|
|
691
|
+
.input-end {
|
|
692
|
+
padding-top: var(--padding-top);
|
|
693
|
+
padding-bottom: var(--padding-bottom);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
.input-start {
|
|
697
|
+
-webkit-padding-start: var(--padding-start);
|
|
698
|
+
padding-inline-start: var(--padding-start);
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
.input-end {
|
|
702
|
+
-webkit-padding-end: var(--padding-end);
|
|
703
|
+
padding-inline-end: var(--padding-end);
|
|
673
704
|
}
|
|
674
705
|
|
|
675
706
|
:host(.input-label-placement-stacked) .label-text-wrapper {
|
|
@@ -698,27 +729,6 @@
|
|
|
698
729
|
border-top: none;
|
|
699
730
|
}
|
|
700
731
|
|
|
701
|
-
.input-wrapper-inner {
|
|
702
|
-
border-radius: inherit;
|
|
703
|
-
-webkit-padding-start: var(--padding-start);
|
|
704
|
-
padding-inline-start: var(--padding-start);
|
|
705
|
-
-webkit-padding-end: var(--padding-end);
|
|
706
|
-
padding-inline-end: var(--padding-end);
|
|
707
|
-
padding-top: var(--padding-top);
|
|
708
|
-
padding-bottom: var(--padding-bottom);
|
|
709
|
-
display: flex;
|
|
710
|
-
position: relative;
|
|
711
|
-
align-items: center;
|
|
712
|
-
width: 100%;
|
|
713
|
-
min-height: var(--token-scale-1000, 40px);
|
|
714
|
-
box-sizing: border-box;
|
|
715
|
-
/**
|
|
716
|
-
* Apply the background to the inner wrapper so the label
|
|
717
|
-
* above it stays outside the field.
|
|
718
|
-
*/
|
|
719
|
-
background: var(--background);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
732
|
:host(.input-size-medium) {
|
|
723
733
|
--padding-start: var(--token-space-300, var(--token-scale-300, 12px));
|
|
724
734
|
--padding-end: var(--token-space-300, var(--token-scale-300, 12px));
|
|
@@ -734,15 +744,15 @@
|
|
|
734
744
|
--padding-end: var(--token-space-500, var(--token-scale-500, 20px));
|
|
735
745
|
}
|
|
736
746
|
|
|
737
|
-
:host(.input-size-medium) .input-wrapper
|
|
747
|
+
:host(.input-size-medium) .input-wrapper::before {
|
|
738
748
|
min-height: var(--token-scale-1000, 40px);
|
|
739
749
|
}
|
|
740
750
|
|
|
741
|
-
:host(.input-size-large) .input-wrapper
|
|
751
|
+
:host(.input-size-large) .input-wrapper::before {
|
|
742
752
|
min-height: var(--token-scale-1200, 48px);
|
|
743
753
|
}
|
|
744
754
|
|
|
745
|
-
:host(.input-size-xlarge) .input-wrapper
|
|
755
|
+
:host(.input-size-xlarge) .input-wrapper::before {
|
|
746
756
|
min-height: var(--token-scale-1400, 56px);
|
|
747
757
|
}
|
|
748
758
|
|
|
@@ -770,18 +780,31 @@
|
|
|
770
780
|
--size: var(--token-scale-1400, 56px);
|
|
771
781
|
}
|
|
772
782
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
783
|
+
/**
|
|
784
|
+
* This stays at the default stacking level. The native input is positioned at
|
|
785
|
+
* `z-index: 1`, so a target area at that level or above paints over it and
|
|
786
|
+
* swallows the clicks meant for it. Tree order already puts this above the
|
|
787
|
+
* field box, which is all it needs to cover.
|
|
788
|
+
*/
|
|
789
|
+
.input-wrapper::after {
|
|
790
|
+
grid-row: field;
|
|
791
|
+
grid-column: field-start/field-end;
|
|
792
|
+
align-self: stretch;
|
|
781
793
|
content: "";
|
|
782
794
|
cursor: text;
|
|
783
795
|
}
|
|
784
796
|
|
|
797
|
+
/**
|
|
798
|
+
* The medium field is shorter than the minimum target area, so the negative
|
|
799
|
+
* block margin lets the target area overflow the row instead of growing it.
|
|
800
|
+
* The larger sizes are already at least as tall, so they need no correction.
|
|
801
|
+
*/
|
|
802
|
+
:host(.input-size-medium) .input-wrapper::after {
|
|
803
|
+
margin-top: calc((var(--token-scale-1000, 40px) - var(--token-scale-1200, 48px)) / 2);
|
|
804
|
+
margin-bottom: calc((var(--token-scale-1000, 40px) - var(--token-scale-1200, 48px)) / 2);
|
|
805
|
+
min-height: var(--token-scale-1200, 48px);
|
|
806
|
+
}
|
|
807
|
+
|
|
785
808
|
::slotted([slot=start]),
|
|
786
809
|
::slotted([slot=end]),
|
|
787
810
|
.input-clear-icon {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import xRegular from "@phosphor-icons/core/assets/regular/x.svg";
|
|
5
4
|
import { Build, Host, forceUpdate, h, } from "@stencil/core";
|
|
6
5
|
import { createClearButtonPressController, createNotchController, createStartContainerController, checkInvalidState, } from "../../utils/forms/index";
|
|
7
6
|
import { inheritAriaAttributes, debounceEvent, inheritAttributes, componentOnReady } from "../../utils/helpers";
|
|
@@ -579,27 +578,19 @@ export class Input {
|
|
|
579
578
|
'input-clear-button-pressed': this.isClearButtonPressed,
|
|
580
579
|
}, onPointerDown: this.clearButtonPressController.onPointerDown, onPointerCancel: this.clearButtonPressController.release, onClick: this.clearTextInput }, h("ion-icon", { "aria-hidden": "true", icon: this.inputClearIcon })));
|
|
581
580
|
}
|
|
582
|
-
/**
|
|
583
|
-
* The ionic theme keeps the label above a field box that wraps the slots and
|
|
584
|
-
* the input, so the label can size independently of the slotted content.
|
|
585
|
-
*/
|
|
586
|
-
renderIonicField() {
|
|
587
|
-
return [
|
|
588
|
-
this.renderLabel(),
|
|
589
|
-
h("div", { key: "inner", class: "input-wrapper-inner" }, h("div", { key: "outline", class: "input-outline" }), this.renderStartContainer(), h("div", { key: "control", class: "input-control" }, h("div", { class: "native-wrapper", onClick: this.onLabelClick }, this.renderNativeInput())), this.renderEndContainer()),
|
|
590
|
-
];
|
|
591
|
-
}
|
|
592
|
-
/**
|
|
593
|
-
* The ios and md themes nest the label alongside the input so a floating
|
|
594
|
-
* label can escape the control and clear the start and end slots.
|
|
595
|
-
*/
|
|
596
581
|
renderStartContainer() {
|
|
597
582
|
return (h("div", { key: "start", class: "input-start", ref: (el) => (this.startContainerEl = el) }, h("slot", { name: "start" })));
|
|
598
583
|
}
|
|
599
584
|
renderEndContainer() {
|
|
600
585
|
return (h("div", { key: "end", class: "input-end" }, this.renderClearButton(), h("slot", { name: "end" })));
|
|
601
586
|
}
|
|
602
|
-
|
|
587
|
+
/**
|
|
588
|
+
* Every theme renders the same label and control structure, aside from the md
|
|
589
|
+
* outline container below. The label is nested alongside the input so the ios
|
|
590
|
+
* and md floating label can escape the control and clear the start and end
|
|
591
|
+
* slots. The ionic theme lifts it above the field with grid instead.
|
|
592
|
+
*/
|
|
593
|
+
renderField() {
|
|
603
594
|
const hasOutlineFill = getIonTheme(this) === 'md' && this.getFill() === 'outline';
|
|
604
595
|
return [
|
|
605
596
|
hasOutlineFill && this.renderOutlineContainer(),
|
|
@@ -621,16 +612,9 @@ export class Input {
|
|
|
621
612
|
if (this.clearInputIcon != null) {
|
|
622
613
|
return this.clearInputIcon;
|
|
623
614
|
}
|
|
624
|
-
// Determine the theme and map to default
|
|
615
|
+
// Determine the theme and map to the default icon
|
|
625
616
|
const theme = getIonTheme(this);
|
|
626
|
-
const
|
|
627
|
-
ios: closeCircle,
|
|
628
|
-
ionic: xRegular,
|
|
629
|
-
md: closeSharp,
|
|
630
|
-
};
|
|
631
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
632
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
633
|
-
// Return the configured input clear icon or the default icon
|
|
617
|
+
const defaultIcon = theme === 'ios' ? closeCircle : closeSharp;
|
|
634
618
|
return config.get('inputClearIcon', defaultIcon);
|
|
635
619
|
}
|
|
636
620
|
render() {
|
|
@@ -649,7 +633,7 @@ export class Input {
|
|
|
649
633
|
* the input has a value or is focused.
|
|
650
634
|
*/
|
|
651
635
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus));
|
|
652
|
-
return (h(Host, { key: '
|
|
636
|
+
return (h(Host, { key: '82d13bcc33e5817aa3afcc0c752cdca87301b1c7', class: createColorClasses(this.color, {
|
|
653
637
|
[theme]: true,
|
|
654
638
|
'has-value': hasValue,
|
|
655
639
|
'has-focus': hasFocus,
|
|
@@ -662,7 +646,7 @@ export class Input {
|
|
|
662
646
|
'in-item-color': hostContext('ion-item.ion-color', this.el),
|
|
663
647
|
'input-disabled': disabled,
|
|
664
648
|
'input-readonly': readonly,
|
|
665
|
-
}) }, h("label", { key: '
|
|
649
|
+
}) }, h("label", { key: '53d8b948776361505a9bc47a4a2e8544d05f6856', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderField(), shouldRenderHighlight && h("div", { key: 'f4c81c4927a685d1474bb4510ad25eb51f77cd99', class: "input-highlight" })), this.renderBottomContent()));
|
|
666
650
|
}
|
|
667
651
|
static get is() { return "ion-input"; }
|
|
668
652
|
static get encapsulation() { return "scoped"; }
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import eyeSlashRegular from "@phosphor-icons/core/assets/regular/eye-slash.svg";
|
|
5
|
-
import eyeRegular from "@phosphor-icons/core/assets/regular/eye.svg";
|
|
6
4
|
import { Host, h } from "@stencil/core";
|
|
7
5
|
import { printIonWarning } from "../../utils/logging/index";
|
|
8
6
|
import { createColorClasses } from "../../utils/theme";
|
|
9
7
|
import { eyeOff, eye } from "ionicons/icons";
|
|
10
8
|
import { config } from "../../global/config";
|
|
11
|
-
import { getIonMode
|
|
9
|
+
import { getIonMode } from "../../global/ionic-global";
|
|
12
10
|
/**
|
|
13
11
|
* @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
|
|
14
12
|
*/
|
|
@@ -56,54 +54,46 @@ export class InputPasswordToggle {
|
|
|
56
54
|
disconnectedCallback() {
|
|
57
55
|
this.inputElRef = null;
|
|
58
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the icon to use for the hide icon.
|
|
59
|
+
* If an icon is set on the component, use that.
|
|
60
|
+
* Otherwise, use the icon set in the config.
|
|
61
|
+
* If no icon is set in the config, use the default icon.
|
|
62
|
+
*/
|
|
59
63
|
get inputPasswordHideIcon() {
|
|
60
64
|
// Return the icon if it is explicitly set
|
|
61
65
|
if (this.hideIcon != null) {
|
|
62
66
|
return this.hideIcon;
|
|
63
67
|
}
|
|
64
|
-
|
|
65
|
-
const theme = getIonTheme(this);
|
|
66
|
-
const defaultIcons = {
|
|
67
|
-
ios: eyeOff,
|
|
68
|
-
ionic: eyeSlashRegular,
|
|
69
|
-
md: eyeOff,
|
|
70
|
-
};
|
|
71
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
72
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
73
|
-
// Return the configured input password hide icon or the default icon
|
|
74
|
-
return config.get('inputPasswordHideIcon', defaultIcon);
|
|
68
|
+
return config.get('inputPasswordHideIcon', eyeOff);
|
|
75
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the icon to use for the show icon.
|
|
72
|
+
* If an icon is set on the component, use that.
|
|
73
|
+
* Otherwise, use the icon set in the config.
|
|
74
|
+
* If no icon is set in the config, use the default icon.
|
|
75
|
+
*/
|
|
76
76
|
get inputPasswordShowIcon() {
|
|
77
77
|
// Return the icon if it is explicitly set
|
|
78
78
|
if (this.showIcon != null) {
|
|
79
79
|
return this.showIcon;
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
const theme = getIonTheme(this);
|
|
83
|
-
const defaultIcons = {
|
|
84
|
-
ios: eye,
|
|
85
|
-
ionic: eyeRegular,
|
|
86
|
-
md: eye,
|
|
87
|
-
};
|
|
88
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
89
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
90
|
-
// Return the configured input password show icon or the default icon
|
|
91
|
-
return config.get('inputPasswordShowIcon', defaultIcon);
|
|
81
|
+
return config.get('inputPasswordShowIcon', eye);
|
|
92
82
|
}
|
|
93
83
|
render() {
|
|
94
84
|
const { color, inputPasswordHideIcon, inputPasswordShowIcon, type } = this;
|
|
95
85
|
const mode = getIonMode(this);
|
|
96
86
|
const isPasswordVisible = type === 'text';
|
|
97
|
-
return (h(Host, { key: '
|
|
87
|
+
return (h(Host, { key: '84bc48922e1757b815cc8cfb57120479736c3c60', class: createColorClasses(color, {
|
|
98
88
|
[mode]: true,
|
|
99
|
-
}) }, h("ion-button", { key: '
|
|
89
|
+
}) }, h("ion-button", { key: '1ffddcd50039cc044a0ad36e5c8e0465d135518c', mode: mode, color: color, fill: "clear", shape: "round", "aria-label": isPasswordVisible ? 'Hide password' : 'Show password', "aria-pressed": isPasswordVisible ? 'true' : 'false', type: "button", onPointerDown: (ev) => {
|
|
100
90
|
/**
|
|
101
91
|
* This prevents mobile browsers from
|
|
102
92
|
* blurring the input when the password toggle
|
|
103
93
|
* button is activated.
|
|
104
94
|
*/
|
|
105
95
|
ev.preventDefault();
|
|
106
|
-
}, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: '
|
|
96
|
+
}, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: '6ee118c5044c11b6db743f3ce6be6ef7ba255292', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? inputPasswordHideIcon : inputPasswordShowIcon }))));
|
|
107
97
|
}
|
|
108
98
|
static get is() { return "ion-input-password-toggle"; }
|
|
109
99
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import caretRightRegular from "@phosphor-icons/core/assets/regular/caret-right.svg";
|
|
5
4
|
import { Build, Host, forceUpdate, h } from "@stencil/core";
|
|
6
5
|
import { inheritAttributes, raf } from "../../utils/helpers";
|
|
7
6
|
import { createColorClasses, hostContext, openURL } from "../../utils/theme";
|
|
@@ -239,29 +238,25 @@ export class Item {
|
|
|
239
238
|
const controls = this.el.querySelectorAll('ion-toggle:not([disabled]), ion-checkbox:not([disabled]), ion-radio:not([disabled]), ion-select:not([disabled]), ion-input:not([disabled]), ion-textarea:not([disabled])');
|
|
240
239
|
return controls[0];
|
|
241
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Get the icon to use for the detail icon.
|
|
243
|
+
* If an icon is set on the component, use that.
|
|
244
|
+
* Otherwise, use the icon set in the config.
|
|
245
|
+
* If no icon is set in the config, use the default icon.
|
|
246
|
+
*/
|
|
242
247
|
get itemDetailIcon() {
|
|
243
248
|
// Return the icon if it is explicitly set
|
|
244
249
|
if (this.detailIcon != null) {
|
|
245
250
|
return this.detailIcon;
|
|
246
251
|
}
|
|
247
|
-
|
|
248
|
-
const theme = getIonTheme(this);
|
|
249
|
-
const defaultIcons = {
|
|
250
|
-
ios: chevronForward,
|
|
251
|
-
ionic: caretRightRegular,
|
|
252
|
-
md: chevronForward,
|
|
253
|
-
};
|
|
254
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
255
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
256
|
-
// Return the configured item detail icon or the default icon
|
|
257
|
-
return config.get('itemDetailIcon', defaultIcon);
|
|
252
|
+
return config.get('itemDetailIcon', chevronForward);
|
|
258
253
|
}
|
|
259
254
|
/**
|
|
260
255
|
* The icon should be flipped when the app is RTL and
|
|
261
256
|
* the icon is a variation of chevron.
|
|
262
257
|
*/
|
|
263
258
|
get shouldFlipIcon() {
|
|
264
|
-
return this.itemDetailIcon === chevronForward
|
|
259
|
+
return this.itemDetailIcon === chevronForward;
|
|
265
260
|
}
|
|
266
261
|
render() {
|
|
267
262
|
const { detail, download, labelColorStyles, lines, disabled, href, itemDetailIcon, shouldFlipIcon, rel, target, routerAnimation, routerDirection, inheritedAriaAttributes, multipleInputs, } = this;
|
|
@@ -340,7 +335,7 @@ export class Item {
|
|
|
340
335
|
* multi-input item, and in a clickable item, which is a second tab stop.
|
|
341
336
|
*/
|
|
342
337
|
const slottedIndicatorNeedsRoom = this.hasSlottedIndicatorControl && (multipleInputs || this.isClickable());
|
|
343
|
-
return (h(Host, { key: '
|
|
338
|
+
return (h(Host, { key: '94668203071ec29cbcd4a435cded154d9a6f44e1', "aria-disabled": ariaDisabled, class: {
|
|
344
339
|
...childStyles,
|
|
345
340
|
...labelColorStyles,
|
|
346
341
|
...createColorClasses(this.color, {
|
|
@@ -357,7 +352,7 @@ export class Item {
|
|
|
357
352
|
'ion-focusable': this.focusable,
|
|
358
353
|
'item-rtl': document.dir === 'rtl',
|
|
359
354
|
}),
|
|
360
|
-
}, role: inList ? 'listitem' : null }, h(TagType, { key: '
|
|
355
|
+
}, role: inList ? 'listitem' : null }, h(TagType, { key: '5d806a372a58368735fa9ec5d7a91fb9fb0177a1', ...attrs, ...inheritedAriaAttributes, class: "item-native", part: "native", disabled: disabled, ...clickFn }, h("slot", { key: 'f51ab92aa48af5e6061e4ce6054ce758913849e9', name: "start", onSlotchange: this.updateInteractivityOnSlotChange }), h("div", { key: '7f843e3fc8446f137c2ab8e3b9ec761816537f88', class: "item-inner", part: "inner" }, h("div", { key: '7427ac82b29335459ec3b9c8f07d8b92faee675e', class: "input-wrapper", part: "container" }, h("slot", { key: '99306e28323143b5e4b83f548fcbbe693684128b', onSlotchange: this.updateInteractivityOnSlotChange })), h("slot", { key: 'c0da503cade4c5be74c1a06cbda6d381569b0819', name: "end", onSlotchange: this.updateInteractivityOnSlotChange }), showDetail && (h("ion-icon", { key: 'a4422494c8715cf258655ccc1e1dd7ffd9cc13eb', icon: itemDetailIcon, lazy: false, class: "item-detail-icon", part: "detail-icon", "aria-hidden": "true", "flip-rtl": shouldFlipIcon }))), canActivate && theme === 'md' && h("ion-ripple-effect", { key: '16aa4720ebfbdc1669cec2769780b4cfc8f775ed' }))));
|
|
361
356
|
}
|
|
362
357
|
static get is() { return "ion-item"; }
|
|
363
358
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import listRegular from "@phosphor-icons/core/assets/regular/list.svg";
|
|
5
4
|
import { Host, h } from "@stencil/core";
|
|
6
5
|
import { inheritAriaAttributes } from "../../utils/helpers";
|
|
7
6
|
import { menuController } from "../../utils/menu-controller/index";
|
|
@@ -46,17 +45,15 @@ export class MenuButton {
|
|
|
46
45
|
async visibilityChanged() {
|
|
47
46
|
this.visible = await updateVisibility(this.menu);
|
|
48
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the icon to use for the menu icon.
|
|
50
|
+
* Use the icon set in the config.
|
|
51
|
+
* If no icon is set in the config, use the default icon.
|
|
52
|
+
*/
|
|
49
53
|
get menuIcon() {
|
|
50
|
-
// Determine the theme and map to default
|
|
54
|
+
// Determine the theme and map to the default icon
|
|
51
55
|
const theme = getIonTheme(this);
|
|
52
|
-
const
|
|
53
|
-
ios: menuOutline,
|
|
54
|
-
ionic: listRegular,
|
|
55
|
-
md: menuSharp,
|
|
56
|
-
};
|
|
57
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
58
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
59
|
-
// Return the configured menu icon or the default icon
|
|
56
|
+
const defaultIcon = theme === 'ios' ? menuOutline : menuSharp;
|
|
60
57
|
return config.get('menuIcon', defaultIcon);
|
|
61
58
|
}
|
|
62
59
|
render() {
|
|
@@ -67,7 +64,7 @@ export class MenuButton {
|
|
|
67
64
|
type: this.type,
|
|
68
65
|
};
|
|
69
66
|
const ariaLabel = inheritedAttributes['aria-label'] || 'menu';
|
|
70
|
-
return (h(Host, { key: '
|
|
67
|
+
return (h(Host, { key: '0593ed9f0867e28fbb9d79e381282eef93343df8', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, "aria-hidden": hidden ? 'true' : null, class: createColorClasses(color, {
|
|
71
68
|
[theme]: true,
|
|
72
69
|
button: true, // ion-buttons target .button
|
|
73
70
|
'menu-button-hidden': hidden,
|
|
@@ -76,7 +73,7 @@ export class MenuButton {
|
|
|
76
73
|
'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
|
|
77
74
|
'ion-activatable': true,
|
|
78
75
|
'ion-focusable': true,
|
|
79
|
-
}) }, h("button", { key: '
|
|
76
|
+
}) }, h("button", { key: 'e61f71642db9b719eaf9b71e813fc271ea3b7343', ...attrs, disabled: disabled, class: "button-native", part: "native", "aria-label": ariaLabel }, h("span", { key: '8e5bb04a8e56dd02c7c8b2d10166f095ac40e461', class: "button-inner" }, h("slot", { key: '23d1bce767d0d389380fe30b3cd94e6f7c5c98f6' }, h("ion-icon", { key: 'abc88761fa11b5cfa853b58411e1ee8a4f632859', part: "icon", icon: menuIcon, lazy: false, "aria-hidden": "true" }))), theme === 'md' && h("ion-ripple-effect", { key: '77e328074a65be3b951cf7352aa7f9e82b7f1256', type: "unbounded" }))));
|
|
80
77
|
}
|
|
81
78
|
static get is() { return "ion-menu-button"; }
|
|
82
79
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import caretLeftFill from "@phosphor-icons/core/assets/fill/caret-left-fill.svg";
|
|
5
4
|
import { Host, h } from "@stencil/core";
|
|
6
5
|
import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
|
|
7
6
|
import { sanitizeDOMString } from "../../utils/sanitization/index";
|
|
@@ -34,6 +33,14 @@ export class RefresherContent {
|
|
|
34
33
|
this.refreshingSpinner = config.get('refreshingSpinner', config.get('spinner', theme === 'ios' ? 'lines' : 'circular'));
|
|
35
34
|
}
|
|
36
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the icon to use for the arrow icon.
|
|
38
|
+
* Use the icon set in the config.
|
|
39
|
+
* If no icon is set in the config, use the default icon.
|
|
40
|
+
*/
|
|
41
|
+
get refresherArrowIcon() {
|
|
42
|
+
return config.get('refresherArrowIcon', caretBackSharp);
|
|
43
|
+
}
|
|
37
44
|
renderPullingText() {
|
|
38
45
|
const { customHTMLEnabled, pullingText } = this;
|
|
39
46
|
if (customHTMLEnabled) {
|
|
@@ -52,10 +59,9 @@ export class RefresherContent {
|
|
|
52
59
|
const pullingIcon = this.pullingIcon;
|
|
53
60
|
const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;
|
|
54
61
|
const theme = getIonTheme(this);
|
|
55
|
-
|
|
56
|
-
return (h(Host, { key: '264b9869eb2357cc2acb3d2abde9538f2486bc60', class: {
|
|
62
|
+
return (h(Host, { key: '79641f5cfcbae77afd812b4758984ecb191dda29', class: {
|
|
57
63
|
[theme]: true,
|
|
58
|
-
} }, h("div", { key: '
|
|
64
|
+
} }, h("div", { key: '3d6dedbcd0ad04d0a1cc2563a130ac8c53a34891', class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (h("div", { key: '4dad78f16e6ee175bd55bd88e40ac33bbd492fc0', class: "refresher-pulling-icon" }, h("div", { key: '9d9b9a6c8f371e92aee43eca9d25768fe80aff8f', class: "spinner-arrow-container" }, h("ion-spinner", { key: '56c31feada2e1558f30b472a624e66cada7dd971', name: this.pullingIcon, paused: true }), (theme === 'md' || theme === 'ionic') && this.pullingIcon === 'circular' && (h("div", { key: 'ddb580acffb25ed3cf1c3e793594e4a7c93323bf', class: "arrow-container" }, h("ion-icon", { key: '2ef17431b18d0475e645062b3b98435a1adc2d01', icon: this.refresherArrowIcon, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (h("div", { key: 'd400ef684a1a3783709b1842f096b657950d7700', class: "refresher-pulling-icon" }, h("ion-icon", { key: '82e1c30d5c7e94c4420518722a1ddca406739e69', icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), h("div", { key: '27a6e09db376a00d704d3880d4075580d8ea4fba', class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { key: '712b68c41b714fb3cf3f6403db4250a16df570cd', class: "refresher-refreshing-icon" }, h("ion-spinner", { key: '051829b30e40c8eed2a121f2b11cae2fa240a147', name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
|
|
59
65
|
}
|
|
60
66
|
static get is() { return "ion-refresher-content"; }
|
|
61
67
|
static get originalStyleUrls() {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import listRegular from "@phosphor-icons/core/assets/regular/list.svg";
|
|
5
4
|
import { Host, h } from "@stencil/core";
|
|
6
5
|
import { reorderThreeOutline, reorderTwoSharp } from "ionicons/icons";
|
|
7
6
|
import { config } from "../../global/config";
|
|
@@ -24,28 +23,21 @@ export class Reorder {
|
|
|
24
23
|
}
|
|
25
24
|
/**
|
|
26
25
|
* Get the icon to use for the handle icon.
|
|
27
|
-
*
|
|
26
|
+
* Use the icon set in the config.
|
|
28
27
|
* If no icon is set in the config, use the default icon.
|
|
29
28
|
*/
|
|
30
29
|
get reorderHandleIcon() {
|
|
31
|
-
// Determine the theme and map to default
|
|
30
|
+
// Determine the theme and map to the default icon
|
|
32
31
|
const theme = getIonTheme(this);
|
|
33
|
-
const
|
|
34
|
-
ios: reorderThreeOutline,
|
|
35
|
-
ionic: listRegular,
|
|
36
|
-
md: reorderTwoSharp,
|
|
37
|
-
};
|
|
38
|
-
// Get the default icon based on the theme, falling back to 'md' icon if necessary
|
|
39
|
-
const defaultIcon = defaultIcons[theme] || defaultIcons.md;
|
|
40
|
-
// Return the configured reorder handle icon or the default icon
|
|
32
|
+
const defaultIcon = theme === 'ios' ? reorderThreeOutline : reorderTwoSharp;
|
|
41
33
|
return config.get('reorderHandleIcon', defaultIcon);
|
|
42
34
|
}
|
|
43
35
|
render() {
|
|
44
36
|
const { reorderHandleIcon } = this;
|
|
45
37
|
const theme = getIonTheme(this);
|
|
46
|
-
return (h(Host, { key: '
|
|
38
|
+
return (h(Host, { key: 'ba25a7b0b5ece6693f2431f562d63738efe1f831', class: {
|
|
47
39
|
[theme]: true,
|
|
48
|
-
} }, h("slot", { key: '
|
|
40
|
+
} }, h("slot", { key: 'b5afb5131bfb9bfce01a01d6b36e0a7408e14ec5' }, h("ion-icon", { key: '7e0d35640277a07b139d122939b0253a81dc785d', icon: reorderHandleIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
|
|
49
41
|
}
|
|
50
42
|
static get is() { return "ion-reorder"; }
|
|
51
43
|
static get encapsulation() { return "shadow"; }
|