@ionic/core 8.2.3-dev.11724326037.1eacfaff → 8.2.3-dev.11724345963.10ca6051
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-input-password-toggle.js +7 -11
- package/components/ion-textarea.js +20 -7
- package/components/ion-thumbnail.js +2 -2
- package/components/ion-title.js +2 -2
- package/components/ion-toast.js +2 -2
- package/components/ion-toggle.js +3 -3
- package/components/ion-toolbar.js +2 -2
- package/css/core.css +1 -1
- package/css/core.css.map +1 -1
- package/css/ionic/bundle.ionic.css +1 -1
- package/css/ionic/bundle.ionic.css.map +1 -1
- package/css/ionic/core.ionic.css +1 -1
- package/css/ionic/core.ionic.css.map +1 -1
- package/css/ionic.bundle.css +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/ion-app_8.cjs.entry.js +4 -4
- package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +7 -11
- package/dist/cjs/ion-textarea.cjs.entry.js +19 -7
- package/dist/cjs/ion-toast.cjs.entry.js +2 -2
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/input-password-toggle/input-password-toggle.css +0 -0
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +7 -9
- package/dist/collection/components/input-password-toggle/test/basic/input-password-toggle.e2e.js +1 -1
- package/dist/collection/components/textarea/test/size/textarea.e2e.js +123 -0
- package/dist/collection/components/textarea/textarea.ionic.css +790 -0
- package/dist/collection/components/textarea/textarea.ios.css +175 -95
- package/dist/collection/components/textarea/textarea.js +35 -5
- package/dist/collection/components/textarea/textarea.md.css +175 -95
- package/dist/collection/components/thumbnail/thumbnail.js +2 -2
- 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 +35 -1
- package/dist/esm/ion-app_8.entry.js +4 -4
- package/dist/esm/ion-avatar_3.entry.js +2 -2
- package/dist/esm/ion-input-password-toggle.entry.js +7 -11
- package/dist/esm/ion-textarea.entry.js +19 -7
- package/dist/esm/ion-toast.entry.js +2 -2
- package/dist/esm/ion-toggle.entry.js +3 -3
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
- package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/html.html-data.json +15 -0
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-13405b29.entry.js +4 -0
- package/dist/ionic/p-1ee206ac.entry.js +4 -0
- package/dist/ionic/{p-7dad531c.system.entry.js → p-31692628.system.entry.js} +1 -1
- package/dist/ionic/{p-b4b44bf9.system.entry.js → p-35fde411.system.entry.js} +1 -1
- package/dist/ionic/{p-7ab9c88c.system.entry.js → p-3a2eb448.system.entry.js} +1 -1
- package/dist/ionic/p-6691825a.system.entry.js +4 -0
- package/dist/ionic/{p-39a39279.entry.js → p-6e7d4537.entry.js} +1 -1
- package/dist/ionic/p-7a1b640f.entry.js +4 -0
- package/dist/ionic/p-7b590e46.system.js +1 -1
- package/dist/ionic/p-8102551e.system.entry.js +4 -0
- package/dist/ionic/p-924deb6b.entry.js +4 -0
- package/dist/ionic/{p-f84ea1e9.system.entry.js → p-984e02c3.system.entry.js} +1 -1
- package/dist/ionic/{p-c11fdca2.entry.js → p-a971dec3.entry.js} +1 -1
- package/dist/types/components/textarea/textarea.d.ts +6 -0
- package/dist/types/components.d.ts +8 -0
- package/hydrate/index.js +38 -29
- package/package.json +1 -1
- package/dist/collection/components/input-password-toggle/input-password-toggle.common.css +0 -61
- package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +0 -137
- package/dist/ionic/p-01ae1aa0.entry.js +0 -4
- package/dist/ionic/p-33dd8047.system.entry.js +0 -4
- package/dist/ionic/p-3d9c39bc.entry.js +0 -4
- package/dist/ionic/p-4346453b.entry.js +0 -4
- package/dist/ionic/p-56c72f65.system.entry.js +0 -4
- package/dist/ionic/p-8ac5efa9.entry.js +0 -4
|
@@ -1,3 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a pixels given value into rem
|
|
3
|
+
*
|
|
4
|
+
* @param pixels - Value in pixels to be converted (i.e. px)
|
|
5
|
+
* @param context (optional) - Baseline value
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Convert a font size to a dynamic font size.
|
|
9
|
+
* Fonts that participate in Dynamic Type should use
|
|
10
|
+
* dynamic font sizes.
|
|
11
|
+
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
12
|
+
* @param unit (optional) - The unit to convert to. Use this if you want to
|
|
13
|
+
* convert to a unit other than $baselineUnit.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Convert a font size to a dynamic font size but impose
|
|
17
|
+
* a maximum font size.
|
|
18
|
+
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
19
|
+
* @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
|
|
20
|
+
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
21
|
+
* convert to a unit other than $baselineUnit.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Convert a font size to a dynamic font size but impose
|
|
25
|
+
* a minimum font size.
|
|
26
|
+
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
27
|
+
* @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
|
|
28
|
+
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
29
|
+
* convert to a unit other than $baselineUnit.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Convert a font size to a dynamic font size but impose
|
|
33
|
+
* maximum and minimum font sizes.
|
|
34
|
+
* @param size - The initial font size including the unit (i.e. px or pt)
|
|
35
|
+
* @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
|
|
36
|
+
* @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
|
|
37
|
+
* @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
|
|
38
|
+
* convert to a unit other than $baselineUnit.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* A heuristic that applies CSS to tablet
|
|
42
|
+
* viewports.
|
|
43
|
+
*
|
|
44
|
+
* Usage:
|
|
45
|
+
* @include tablet-viewport() {
|
|
46
|
+
* :host {
|
|
47
|
+
* background-color: green;
|
|
48
|
+
* }
|
|
49
|
+
* }
|
|
50
|
+
*/
|
|
51
|
+
/**
|
|
52
|
+
* A heuristic that applies CSS to mobile
|
|
53
|
+
* viewports (i.e. phones, not tablets).
|
|
54
|
+
*
|
|
55
|
+
* Usage:
|
|
56
|
+
* @include mobile-viewport() {
|
|
57
|
+
* :host {
|
|
58
|
+
* background-color: blue;
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
*/
|
|
1
62
|
/**
|
|
2
63
|
* Convert a pixels given value into rem
|
|
3
64
|
*
|
|
@@ -111,27 +172,10 @@
|
|
|
111
172
|
display: block;
|
|
112
173
|
position: relative;
|
|
113
174
|
width: 100%;
|
|
114
|
-
min-height: 44px;
|
|
115
175
|
color: var(--color);
|
|
116
|
-
font-family: var(--ion-font-family, inherit);
|
|
117
|
-
z-index: 2;
|
|
118
176
|
box-sizing: border-box;
|
|
119
177
|
}
|
|
120
178
|
|
|
121
|
-
/**
|
|
122
|
-
* Since the label sits on top of the element,
|
|
123
|
-
* the component needs to be taller otherwise the
|
|
124
|
-
* label will appear too close to the textarea text.
|
|
125
|
-
* Also, floating and stacked labels should not
|
|
126
|
-
* push the label down since it it
|
|
127
|
-
* sits on top of the textarea.
|
|
128
|
-
*/
|
|
129
|
-
:host(.textarea-label-placement-floating),
|
|
130
|
-
:host(.textarea-label-placement-stacked) {
|
|
131
|
-
--padding-top: 0px;
|
|
132
|
-
min-height: 56px;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
179
|
/**
|
|
136
180
|
* When the cols property is set we should
|
|
137
181
|
* respect that width instead of defaulting
|
|
@@ -195,6 +239,7 @@
|
|
|
195
239
|
resize: none;
|
|
196
240
|
appearance: none;
|
|
197
241
|
}
|
|
242
|
+
|
|
198
243
|
.native-textarea::placeholder {
|
|
199
244
|
padding-left: 0;
|
|
200
245
|
padding-right: 0;
|
|
@@ -229,6 +274,7 @@
|
|
|
229
274
|
position: absolute;
|
|
230
275
|
pointer-events: none;
|
|
231
276
|
}
|
|
277
|
+
|
|
232
278
|
.cloned-input {
|
|
233
279
|
inset-inline-start: 0;
|
|
234
280
|
}
|
|
@@ -279,21 +325,10 @@
|
|
|
279
325
|
caret-color: var(--highlight-color);
|
|
280
326
|
}
|
|
281
327
|
|
|
282
|
-
.native-wrapper textarea {
|
|
283
|
-
-webkit-padding-start: 0px;
|
|
284
|
-
padding-inline-start: 0px;
|
|
285
|
-
-webkit-padding-end: 0px;
|
|
286
|
-
padding-inline-end: 0px;
|
|
287
|
-
padding-top: var(--padding-top);
|
|
288
|
-
padding-bottom: var(--padding-bottom);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
328
|
.native-wrapper {
|
|
292
329
|
display: grid;
|
|
293
330
|
min-width: inherit;
|
|
294
331
|
max-width: inherit;
|
|
295
|
-
min-height: inherit;
|
|
296
|
-
max-height: inherit;
|
|
297
332
|
/**
|
|
298
333
|
* This avoids a WebKit bug where
|
|
299
334
|
* the height of the inner textarea
|
|
@@ -303,6 +338,7 @@
|
|
|
303
338
|
*/
|
|
304
339
|
grid-auto-rows: 100%;
|
|
305
340
|
}
|
|
341
|
+
|
|
306
342
|
.native-wrapper::after {
|
|
307
343
|
white-space: pre-wrap;
|
|
308
344
|
content: attr(data-replicated-value) " ";
|
|
@@ -364,21 +400,9 @@
|
|
|
364
400
|
}
|
|
365
401
|
|
|
366
402
|
.textarea-bottom {
|
|
367
|
-
/**
|
|
368
|
-
* The bottom content should take on the start and end
|
|
369
|
-
* padding so it is always aligned with either the label
|
|
370
|
-
* or the start of the textarea.
|
|
371
|
-
*/
|
|
372
|
-
-webkit-padding-start: var(--padding-start);
|
|
373
|
-
padding-inline-start: var(--padding-start);
|
|
374
|
-
-webkit-padding-end: var(--padding-end);
|
|
375
|
-
padding-inline-end: var(--padding-end);
|
|
376
|
-
padding-top: 5px;
|
|
377
|
-
padding-bottom: 0;
|
|
378
403
|
display: flex;
|
|
379
404
|
justify-content: space-between;
|
|
380
405
|
border-top: var(--border-width) var(--border-style) var(--border-color);
|
|
381
|
-
font-size: 0.75rem;
|
|
382
406
|
}
|
|
383
407
|
|
|
384
408
|
/**
|
|
@@ -421,9 +445,7 @@
|
|
|
421
445
|
*/
|
|
422
446
|
-webkit-margin-start: auto;
|
|
423
447
|
margin-inline-start: auto;
|
|
424
|
-
color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
|
|
425
448
|
white-space: nowrap;
|
|
426
|
-
padding-inline-start: 16px;
|
|
427
449
|
}
|
|
428
450
|
|
|
429
451
|
.label-text-wrapper {
|
|
@@ -498,20 +520,6 @@
|
|
|
498
520
|
flex-direction: row;
|
|
499
521
|
}
|
|
500
522
|
|
|
501
|
-
:host(.textarea-label-placement-start) .label-text-wrapper {
|
|
502
|
-
/**
|
|
503
|
-
* The margin between the label and
|
|
504
|
-
* the textarea should be on the end
|
|
505
|
-
* when the label sits at the start.
|
|
506
|
-
*/
|
|
507
|
-
-webkit-margin-start: 0;
|
|
508
|
-
margin-inline-start: 0;
|
|
509
|
-
-webkit-margin-end: 16px;
|
|
510
|
-
margin-inline-end: 16px;
|
|
511
|
-
margin-top: 0;
|
|
512
|
-
margin-bottom: 0;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
523
|
/**
|
|
516
524
|
* Label is on the right of the textarea in LTR and
|
|
517
525
|
* on the left in RTL.
|
|
@@ -520,34 +528,6 @@
|
|
|
520
528
|
flex-direction: row-reverse;
|
|
521
529
|
}
|
|
522
530
|
|
|
523
|
-
/**
|
|
524
|
-
* The margin between the label and
|
|
525
|
-
* the textarea should be on the start
|
|
526
|
-
* when the label sits at the end.
|
|
527
|
-
*/
|
|
528
|
-
:host(.textarea-label-placement-end) .label-text-wrapper {
|
|
529
|
-
-webkit-margin-start: 16px;
|
|
530
|
-
margin-inline-start: 16px;
|
|
531
|
-
-webkit-margin-end: 0;
|
|
532
|
-
margin-inline-end: 0;
|
|
533
|
-
margin-top: 0;
|
|
534
|
-
margin-bottom: 0;
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
:host(.textarea-label-placement-fixed) .label-text-wrapper {
|
|
538
|
-
/**
|
|
539
|
-
* The margin between the label and
|
|
540
|
-
* the textarea should be on the end
|
|
541
|
-
* when the label sits at the start.
|
|
542
|
-
*/
|
|
543
|
-
-webkit-margin-start: 0;
|
|
544
|
-
margin-inline-start: 0;
|
|
545
|
-
-webkit-margin-end: 16px;
|
|
546
|
-
margin-inline-end: 16px;
|
|
547
|
-
margin-top: 0;
|
|
548
|
-
margin-bottom: 0;
|
|
549
|
-
}
|
|
550
|
-
|
|
551
531
|
/**
|
|
552
532
|
* Label is on the left of the textarea in LTR and
|
|
553
533
|
* on the right in RTL. Label also has a fixed width.
|
|
@@ -594,6 +574,7 @@
|
|
|
594
574
|
*/
|
|
595
575
|
z-index: 2;
|
|
596
576
|
}
|
|
577
|
+
|
|
597
578
|
:host-context([dir=rtl]):host(.textarea-label-placement-stacked) .label-text-wrapper, :host-context([dir=rtl]).textarea-label-placement-stacked .label-text-wrapper, :host-context([dir=rtl]):host(.textarea-label-placement-floating) .label-text-wrapper, :host-context([dir=rtl]).textarea-label-placement-floating .label-text-wrapper {
|
|
598
579
|
transform-origin: right top;
|
|
599
580
|
}
|
|
@@ -603,7 +584,6 @@
|
|
|
603
584
|
transform-origin: right top;
|
|
604
585
|
}
|
|
605
586
|
}
|
|
606
|
-
|
|
607
587
|
/**
|
|
608
588
|
* Ensures the textarea does not
|
|
609
589
|
* overlap the label.
|
|
@@ -620,13 +600,6 @@
|
|
|
620
600
|
margin-bottom: 0px;
|
|
621
601
|
}
|
|
622
602
|
|
|
623
|
-
:host(.textarea-label-placement-stacked) ::slotted([slot=start]),
|
|
624
|
-
:host(.textarea-label-placement-stacked) ::slotted([slot=end]),
|
|
625
|
-
:host(.textarea-label-placement-floating) ::slotted([slot=start]),
|
|
626
|
-
:host(.textarea-label-placement-floating) ::slotted([slot=end]) {
|
|
627
|
-
margin-top: 8px;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
603
|
/**
|
|
631
604
|
* This makes the label sit over the textarea
|
|
632
605
|
* when the textarea is blurred and has no value.
|
|
@@ -661,15 +634,122 @@
|
|
|
661
634
|
max-width: calc(100% / 0.75);
|
|
662
635
|
}
|
|
663
636
|
|
|
637
|
+
.start-slot-wrapper,
|
|
638
|
+
.end-slot-wrapper {
|
|
639
|
+
display: flex;
|
|
640
|
+
flex-shrink: 0;
|
|
641
|
+
align-self: start;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
:host {
|
|
645
|
+
min-height: 44px;
|
|
646
|
+
font-family: var(--ion-font-family, inherit);
|
|
647
|
+
z-index: 2;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Since the label sits on top of the element,
|
|
652
|
+
* the component needs to be taller otherwise the
|
|
653
|
+
* label will appear too close to the textarea text.
|
|
654
|
+
* Also, floating and stacked labels should not
|
|
655
|
+
* push the label down since it it
|
|
656
|
+
* sits on top of the textarea.
|
|
657
|
+
*/
|
|
658
|
+
:host(.textarea-label-placement-floating),
|
|
659
|
+
:host(.textarea-label-placement-stacked) {
|
|
660
|
+
--padding-top: 0px;
|
|
661
|
+
min-height: 56px;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.native-wrapper {
|
|
665
|
+
min-height: inherit;
|
|
666
|
+
max-height: inherit;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
.native-wrapper textarea {
|
|
670
|
+
-webkit-padding-start: 0px;
|
|
671
|
+
padding-inline-start: 0px;
|
|
672
|
+
-webkit-padding-end: 0px;
|
|
673
|
+
padding-inline-end: 0px;
|
|
674
|
+
padding-top: var(--padding-top);
|
|
675
|
+
padding-bottom: var(--padding-bottom);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
.textarea-bottom {
|
|
679
|
+
/**
|
|
680
|
+
* The bottom content should take on the start and end
|
|
681
|
+
* padding so it is always aligned with either the label
|
|
682
|
+
* or the start of the textarea.
|
|
683
|
+
*/
|
|
684
|
+
-webkit-padding-start: var(--padding-start);
|
|
685
|
+
padding-inline-start: var(--padding-start);
|
|
686
|
+
-webkit-padding-end: var(--padding-end);
|
|
687
|
+
padding-inline-end: var(--padding-end);
|
|
688
|
+
padding-top: 5px;
|
|
689
|
+
padding-bottom: 0;
|
|
690
|
+
font-size: 0.75rem;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.textarea-bottom .counter {
|
|
694
|
+
color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
|
|
695
|
+
padding-inline-start: 16px;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
:host(.textarea-label-placement-start) .label-text-wrapper {
|
|
699
|
+
/**
|
|
700
|
+
* The margin between the label and
|
|
701
|
+
* the textarea should be on the end
|
|
702
|
+
* when the label sits at the start.
|
|
703
|
+
*/
|
|
704
|
+
-webkit-margin-start: 0;
|
|
705
|
+
margin-inline-start: 0;
|
|
706
|
+
-webkit-margin-end: 16px;
|
|
707
|
+
margin-inline-end: 16px;
|
|
708
|
+
margin-top: 0;
|
|
709
|
+
margin-bottom: 0;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* The margin between the label and
|
|
714
|
+
* the textarea should be on the start
|
|
715
|
+
* when the label sits at the end.
|
|
716
|
+
*/
|
|
717
|
+
:host(.textarea-label-placement-end) .label-text-wrapper {
|
|
718
|
+
-webkit-margin-start: 16px;
|
|
719
|
+
margin-inline-start: 16px;
|
|
720
|
+
-webkit-margin-end: 0;
|
|
721
|
+
margin-inline-end: 0;
|
|
722
|
+
margin-top: 0;
|
|
723
|
+
margin-bottom: 0;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
:host(.textarea-label-placement-fixed) .label-text-wrapper {
|
|
727
|
+
/**
|
|
728
|
+
* The margin between the label and
|
|
729
|
+
* the textarea should be on the end
|
|
730
|
+
* when the label sits at the start.
|
|
731
|
+
*/
|
|
732
|
+
-webkit-margin-start: 0;
|
|
733
|
+
margin-inline-start: 0;
|
|
734
|
+
-webkit-margin-end: 16px;
|
|
735
|
+
margin-inline-end: 16px;
|
|
736
|
+
margin-top: 0;
|
|
737
|
+
margin-bottom: 0;
|
|
738
|
+
}
|
|
739
|
+
|
|
664
740
|
.start-slot-wrapper,
|
|
665
741
|
.end-slot-wrapper {
|
|
666
742
|
padding-left: 0;
|
|
667
743
|
padding-right: 0;
|
|
668
744
|
padding-top: var(--padding-top);
|
|
669
745
|
padding-bottom: var(--padding-bottom);
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
:host(.textarea-label-placement-stacked) ::slotted([slot=start]),
|
|
749
|
+
:host(.textarea-label-placement-stacked) ::slotted([slot=end]),
|
|
750
|
+
:host(.textarea-label-placement-floating) ::slotted([slot=start]),
|
|
751
|
+
:host(.textarea-label-placement-floating) ::slotted([slot=end]) {
|
|
752
|
+
margin-top: 8px;
|
|
673
753
|
}
|
|
674
754
|
|
|
675
755
|
::slotted([slot=start]),
|
|
@@ -91,6 +91,7 @@ export class Textarea {
|
|
|
91
91
|
this.label = undefined;
|
|
92
92
|
this.labelPlacement = 'start';
|
|
93
93
|
this.shape = undefined;
|
|
94
|
+
this.size = 'medium';
|
|
94
95
|
}
|
|
95
96
|
debounceChanged() {
|
|
96
97
|
const { ionInput, debounce, originalIonInput } = this;
|
|
@@ -335,7 +336,7 @@ export class Textarea {
|
|
|
335
336
|
return (h("div", { class: "textarea-bottom" }, this.renderHintText(), this.renderCounter()));
|
|
336
337
|
}
|
|
337
338
|
render() {
|
|
338
|
-
const { inputId, disabled, fill, shape, labelPlacement, el, hasFocus } = this;
|
|
339
|
+
const { inputId, disabled, fill, shape, size, labelPlacement, el, hasFocus } = this;
|
|
339
340
|
const theme = getIonTheme(this);
|
|
340
341
|
const value = this.getValue();
|
|
341
342
|
const inItem = hostContext('ion-item', this.el);
|
|
@@ -360,16 +361,27 @@ export class Textarea {
|
|
|
360
361
|
* TODO(FW-5592): Remove hasStartEndSlots condition
|
|
361
362
|
*/
|
|
362
363
|
const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
|
|
363
|
-
return (h(Host, { key: '
|
|
364
|
+
return (h(Host, { key: '0f80c3af71da1262718eabb385478447a4d04bce', class: createColorClasses(this.color, {
|
|
364
365
|
[theme]: true,
|
|
365
366
|
'has-value': hasValue,
|
|
366
367
|
'has-focus': hasFocus,
|
|
367
368
|
'label-floating': labelShouldFloat,
|
|
368
369
|
[`textarea-fill-${fill}`]: fill !== undefined,
|
|
369
370
|
[`textarea-shape-${shape}`]: shape !== undefined,
|
|
371
|
+
[`textarea-size-${size}`]: true,
|
|
370
372
|
[`textarea-label-placement-${labelPlacement}`]: true,
|
|
371
373
|
'textarea-disabled': disabled,
|
|
372
|
-
}) }, h("label", { key: '
|
|
374
|
+
}) }, h("label", { key: 'd20e202c8dbbf26e4a734b856294256bdf18ef94', class: "textarea-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'c54e1d41af4a4c9e5c954a829061fb9ecd2eab15', class: "textarea-wrapper-inner" },
|
|
375
|
+
/**
|
|
376
|
+
* For the ionic theme, we render the outline container here
|
|
377
|
+
* instead of higher up, so it can be positioned relative to
|
|
378
|
+
* the native wrapper instead of the <label> element or the
|
|
379
|
+
* entire component. This allows the label text to be positioned
|
|
380
|
+
* above the outline, while staying within the bounds of the
|
|
381
|
+
* <label> element, ensuring that clicking the label text
|
|
382
|
+
* focuses the textarea.
|
|
383
|
+
*/
|
|
384
|
+
theme === 'ionic' && fill === 'outline' && h("div", { key: '148f16138dcbfd8a724d248b4e1f73220b017fd4', class: "textarea-outline" }), h("div", { key: 'b5550e1ad2af3af871b6e9d05c040a5ee009f1da', class: "start-slot-wrapper" }, h("slot", { key: 'ce6d54e769b9de5afb43f432c1194a1a80d8124d', name: "start" })), h("div", { key: '80de31c0139de21273ecc381c9d99bbfebed188a', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ key: '4a3174126f2979ce3fa873c42c313ff83a5f71de', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)), h("div", { key: '5d6e196c46f9af1360b89a3d355ecf434df47657', class: "end-slot-wrapper" }, h("slot", { key: '4109293cca9ccca19a81428ea5149107ebb00359', name: "end" }))), shouldRenderHighlight && h("div", { key: '18063161e67aa882dc2262626fd435352192d6c3', class: "textarea-highlight" })), this.renderBottomContent()));
|
|
373
385
|
}
|
|
374
386
|
static get is() { return "ion-textarea"; }
|
|
375
387
|
static get encapsulation() { return "scoped"; }
|
|
@@ -377,14 +389,14 @@ export class Textarea {
|
|
|
377
389
|
return {
|
|
378
390
|
"ios": ["textarea.ios.scss"],
|
|
379
391
|
"md": ["textarea.md.scss"],
|
|
380
|
-
"ionic": ["textarea.
|
|
392
|
+
"ionic": ["textarea.ionic.scss"]
|
|
381
393
|
};
|
|
382
394
|
}
|
|
383
395
|
static get styleUrls() {
|
|
384
396
|
return {
|
|
385
397
|
"ios": ["textarea.ios.css"],
|
|
386
398
|
"md": ["textarea.md.css"],
|
|
387
|
-
"ionic": ["textarea.
|
|
399
|
+
"ionic": ["textarea.ionic.css"]
|
|
388
400
|
};
|
|
389
401
|
}
|
|
390
402
|
static get properties() {
|
|
@@ -880,6 +892,24 @@ export class Textarea {
|
|
|
880
892
|
},
|
|
881
893
|
"attribute": "shape",
|
|
882
894
|
"reflect": false
|
|
895
|
+
},
|
|
896
|
+
"size": {
|
|
897
|
+
"type": "string",
|
|
898
|
+
"mutable": false,
|
|
899
|
+
"complexType": {
|
|
900
|
+
"original": "'small' | 'medium' | 'large'",
|
|
901
|
+
"resolved": "\"large\" | \"medium\" | \"small\" | undefined",
|
|
902
|
+
"references": {}
|
|
903
|
+
},
|
|
904
|
+
"required": false,
|
|
905
|
+
"optional": true,
|
|
906
|
+
"docs": {
|
|
907
|
+
"tags": [],
|
|
908
|
+
"text": "The size of the textarea. If \"large\" it will increase the height of the textarea, while\n\"small\" and \"medium\" provide progressively smaller heights. The default size is \"medium\".\nThis property only applies to the `\"ionic\"` theme."
|
|
909
|
+
},
|
|
910
|
+
"attribute": "size",
|
|
911
|
+
"reflect": false,
|
|
912
|
+
"defaultValue": "'medium'"
|
|
883
913
|
}
|
|
884
914
|
};
|
|
885
915
|
}
|