@ionic/core 8.7.17-dev.11771359170.1fda0949 → 8.7.17-dev.11771870864.19b2cde1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/components/ion-datetime.js +5 -5
  2. package/components/ion-segment-view.js +11 -5
  3. package/components/ion-select.js +3 -3
  4. package/components/ion-textarea.js +4 -4
  5. package/components/modal.js +206 -43
  6. package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
  7. package/dist/cjs/ion-modal.cjs.entry.js +206 -43
  8. package/dist/cjs/ion-segment-view.cjs.entry.js +10 -5
  9. package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
  10. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  11. package/dist/cjs/ionic.cjs.js +1 -1
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/collection/components/datetime/datetime.js +5 -12
  14. package/dist/collection/components/modal/gestures/sheet.js +108 -11
  15. package/dist/collection/components/modal/gestures/swipe-to-close.js +54 -1
  16. package/dist/collection/components/modal/modal.js +98 -31
  17. package/dist/collection/components/segment-view/segment-view.ios.css +2 -1
  18. package/dist/collection/components/segment-view/segment-view.js +28 -3
  19. package/dist/collection/components/segment-view/segment-view.md.css +2 -1
  20. package/dist/collection/components/select/select.js +6 -3
  21. package/dist/collection/components/textarea/textarea.js +4 -4
  22. package/dist/docs.json +115 -51
  23. package/dist/esm/ion-datetime_3.entry.js +5 -5
  24. package/dist/esm/ion-modal.entry.js +206 -43
  25. package/dist/esm/ion-segment-view.entry.js +10 -5
  26. package/dist/esm/ion-select_3.entry.js +3 -3
  27. package/dist/esm/ion-textarea.entry.js +2 -2
  28. package/dist/esm/ionic.js +1 -1
  29. package/dist/esm/loader.js +1 -1
  30. package/dist/html.html-data.json +4 -0
  31. package/dist/ionic/ionic.esm.js +1 -1
  32. package/dist/ionic/p-0f418a37.entry.js +4 -0
  33. package/dist/ionic/p-1838bed5.entry.js +4 -0
  34. package/dist/ionic/p-29721c43.entry.js +4 -0
  35. package/dist/ionic/p-9a2d390d.entry.js +4 -0
  36. package/dist/ionic/{p-c19f63d0.entry.js → p-e1d1f3cc.entry.js} +1 -1
  37. package/dist/types/components/datetime/datetime.d.ts +0 -7
  38. package/dist/types/components/modal/gestures/sheet.d.ts +2 -2
  39. package/dist/types/components/modal/gestures/swipe-to-close.d.ts +2 -2
  40. package/dist/types/components/modal/modal-interface.d.ts +7 -0
  41. package/dist/types/components/modal/modal.d.ts +17 -1
  42. package/dist/types/components/segment-view/segment-view.d.ts +4 -0
  43. package/dist/types/components/select/select.d.ts +3 -0
  44. package/dist/types/components.d.ts +27 -2
  45. package/hydrate/index.js +233 -68
  46. package/hydrate/index.mjs +233 -68
  47. package/package.json +1 -1
  48. package/dist/ionic/p-020af078.entry.js +0 -4
  49. package/dist/ionic/p-88367362.entry.js +0 -4
  50. package/dist/ionic/p-91840a80.entry.js +0 -4
  51. package/dist/ionic/p-9dcc3ae4.entry.js +0 -4
package/hydrate/index.js CHANGED
@@ -12880,21 +12880,14 @@ const datetimeMdCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-flow:colu
12880
12880
  * layout with `presentation="date-time"` or `"time-date"`.
12881
12881
  * @part time-button active - The time picker button when the picker is open.
12882
12882
  *
12883
- * @part calendar-header - The calendar header manages the date navigation controls (month/year picker and prev/next buttons) and the days of the week when using a grid style layout.
12884
12883
  * @part month-year-button - The button that opens the month/year picker when
12885
12884
  * using a grid style layout.
12886
- * @part prev-next-buttons - The buttons used to navigate to the next or previous month when using a grid style layout.
12887
- * @part prev-button - The button used to navigate to the previous month when using a grid style layout.
12888
- * @part next-button - The button used to navigate to the next month when using a grid style layout.
12889
- * @part days-of-week - The container for the day-of-the-week header (both weekdays and weekends) when using a grid style layout.
12890
12885
  *
12891
12886
  * @part calendar-day - The individual buttons that display a day inside of the datetime
12892
12887
  * calendar.
12893
12888
  * @part calendar-day active - The currently selected calendar day.
12894
12889
  * @part calendar-day today - The calendar day that contains the current day.
12895
12890
  * @part calendar-day disabled - The calendar day that is disabled.
12896
- *
12897
- * @part datetime-header - The datetime header contains the content for the `title` slot and the selected date.
12898
12891
  */
12899
12892
  class Datetime {
12900
12893
  constructor(hostRef) {
@@ -14236,11 +14229,11 @@ class Datetime {
14236
14229
  const nextMonthDisabled = disabled || isNextMonthDisabled(this.workingParts, this.maxParts);
14237
14230
  // don't use the inheritAttributes util because it removes dir from the host, and we still need that
14238
14231
  const hostDir = this.el.getAttribute('dir') || undefined;
14239
- return (hAsync("div", { class: "calendar-header", part: "calendar-header" }, hAsync("div", { class: "calendar-action-buttons" }, hAsync("div", { class: "calendar-month-year" }, hAsync("button", { class: {
14232
+ return (hAsync("div", { class: "calendar-header" }, hAsync("div", { class: "calendar-action-buttons" }, hAsync("div", { class: "calendar-month-year" }, hAsync("button", { class: {
14240
14233
  'calendar-month-year-toggle': true,
14241
14234
  'ion-activatable': true,
14242
14235
  'ion-focusable': true,
14243
- }, part: "month-year-button", disabled: disabled, "aria-label": this.showMonthAndYear ? 'Hide year picker' : 'Show year picker', onClick: () => this.toggleMonthAndYearView() }, hAsync("span", { id: "toggle-wrapper" }, getMonthAndYear(this.locale, this.workingParts), hAsync("ion-icon", { "aria-hidden": "true", icon: this.showMonthAndYear ? expandedIcon : collapsedIcon, lazy: false, flipRtl: true })), mode === 'md' && hAsync("ion-ripple-effect", null))), hAsync("div", { class: "calendar-next-prev" }, hAsync("ion-buttons", null, hAsync("ion-button", { "aria-label": "Previous month", disabled: prevMonthDisabled, onClick: () => this.prevMonth(), part: "prev-next-buttons prev-button" }, hAsync("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronBack, lazy: false, flipRtl: true })), hAsync("ion-button", { "aria-label": "Next month", disabled: nextMonthDisabled, onClick: () => this.nextMonth(), part: "prev-next-buttons next-button" }, hAsync("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronForward, lazy: false, flipRtl: true }))))), hAsync("div", { class: "calendar-days-of-week", "aria-hidden": "true", part: "days-of-week" }, getDaysOfWeek(this.locale, mode, this.firstDayOfWeek % 7).map((d) => {
14236
+ }, part: "month-year-button", disabled: disabled, "aria-label": this.showMonthAndYear ? 'Hide year picker' : 'Show year picker', onClick: () => this.toggleMonthAndYearView() }, hAsync("span", { id: "toggle-wrapper" }, getMonthAndYear(this.locale, this.workingParts), hAsync("ion-icon", { "aria-hidden": "true", icon: this.showMonthAndYear ? expandedIcon : collapsedIcon, lazy: false, flipRtl: true })), mode === 'md' && hAsync("ion-ripple-effect", null))), hAsync("div", { class: "calendar-next-prev" }, hAsync("ion-buttons", null, hAsync("ion-button", { "aria-label": "Previous month", disabled: prevMonthDisabled, onClick: () => this.prevMonth() }, hAsync("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronBack, lazy: false, flipRtl: true })), hAsync("ion-button", { "aria-label": "Next month", disabled: nextMonthDisabled, onClick: () => this.nextMonth() }, hAsync("ion-icon", { dir: hostDir, "aria-hidden": "true", slot: "icon-only", icon: chevronForward, lazy: false, flipRtl: true }))))), hAsync("div", { class: "calendar-days-of-week", "aria-hidden": "true" }, getDaysOfWeek(this.locale, mode, this.firstDayOfWeek % 7).map((d) => {
14244
14237
  return hAsync("div", { class: "day-of-week" }, d);
14245
14238
  }))));
14246
14239
  }
@@ -14472,7 +14465,7 @@ class Datetime {
14472
14465
  if (!hasSlottedTitle && !this.showDefaultTitle) {
14473
14466
  return;
14474
14467
  }
14475
- return (hAsync("div", { class: "datetime-header", part: "datetime-header" }, hAsync("div", { class: "datetime-title" }, hAsync("slot", { name: "title" }, "Select Date")), showExpandedHeader && hAsync("div", { class: "datetime-selected-date" }, this.getHeaderSelectedDateText())));
14468
+ return (hAsync("div", { class: "datetime-header" }, hAsync("div", { class: "datetime-title" }, hAsync("slot", { name: "title" }, "Select Date")), showExpandedHeader && hAsync("div", { class: "datetime-selected-date" }, this.getHeaderSelectedDateText())));
14476
14469
  }
14477
14470
  /**
14478
14471
  * Render time picker inside of datetime.
@@ -14552,7 +14545,7 @@ class Datetime {
14552
14545
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
14553
14546
  const hasWheelVariant = hasDatePresentation && preferWheel;
14554
14547
  renderHiddenInput(true, el, name, formatValue(value), disabled);
14555
- return (hAsync(Host, { key: '3d0787ecb3ad104c4a60d68a6e57140f018a70f2', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14548
+ return (hAsync(Host, { key: '19e20c9b6b5f9467e91a2567b6dc7d9d38b56cc3', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14556
14549
  [mode]: true,
14557
14550
  ['datetime-readonly']: readonly,
14558
14551
  ['datetime-disabled']: disabled,
@@ -14562,7 +14555,7 @@ class Datetime {
14562
14555
  [`datetime-size-${size}`]: true,
14563
14556
  [`datetime-prefer-wheel`]: hasWheelVariant,
14564
14557
  [`datetime-grid`]: isGridStyle,
14565
- })) }, hAsync("div", { key: '6b245a0033d5ddd1918bc839f142141bf5ec54c5', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14558
+ })) }, hAsync("div", { key: 'e31b5ef76cd6262dafd39f2d21980887880ec32e', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14566
14559
  }
14567
14560
  get el() { return getElement(this); }
14568
14561
  static get watchers() { return {
@@ -21543,7 +21536,7 @@ const calculateSpringStep = (t) => {
21543
21536
  const SwipeToCloseDefaults = {
21544
21537
  MIN_PRESENTING_SCALE: 0.915,
21545
21538
  };
21546
- const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss) => {
21539
+ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss, onDragStart, onDragMove, onDragEnd) => {
21547
21540
  /**
21548
21541
  * The step value at which a card modal
21549
21542
  * is eligible for dismissing via gesture.
@@ -21653,6 +21646,7 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss) =>
21653
21646
  disableContentScrollY(contentEl);
21654
21647
  }
21655
21648
  animation.progressStart(true, isOpen ? 1 : 0);
21649
+ onDragStart();
21656
21650
  };
21657
21651
  const onMove = (detail) => {
21658
21652
  const { deltaY } = detail;
@@ -21720,6 +21714,13 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss) =>
21720
21714
  setCardStatusBarDark();
21721
21715
  }
21722
21716
  lastStep = clampedStep;
21717
+ const eventDetail = {
21718
+ currentY: detail.currentY,
21719
+ deltaY: detail.deltaY,
21720
+ velocityY: detail.velocityY,
21721
+ progress: calculateProgress(el, detail.deltaY),
21722
+ };
21723
+ onDragMove(eventDetail);
21723
21724
  };
21724
21725
  const onEnd = (detail) => {
21725
21726
  const velocity = detail.velocityY;
@@ -21778,6 +21779,13 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss) =>
21778
21779
  else if (shouldComplete) {
21779
21780
  onDismiss();
21780
21781
  }
21782
+ const eventDetail = {
21783
+ currentY: detail.currentY,
21784
+ deltaY: detail.deltaY,
21785
+ velocityY: detail.velocityY,
21786
+ progress: calculateProgress(el, detail.deltaY),
21787
+ };
21788
+ onDragEnd(eventDetail);
21781
21789
  };
21782
21790
  const gesture = createGesture({
21783
21791
  el,
@@ -21795,6 +21803,44 @@ const createSwipeToCloseGesture = (el, animation, statusBarStyle, onDismiss) =>
21795
21803
  const computeDuration = (remaining, velocity) => {
21796
21804
  return clamp(400, remaining / Math.abs(velocity * 1.1), 500);
21797
21805
  };
21806
+ /**
21807
+ * Calculates the progress of the swipe gesture.
21808
+ *
21809
+ * The progress is a value between 0 and 1 that represents how far
21810
+ * the swipe has progressed towards closing the modal.
21811
+ *
21812
+ * A value closer to 1 means the modal is closer to being opened,
21813
+ * while a value closer to 0 means the modal is closer to being closed.
21814
+ *
21815
+ * @param el The modal
21816
+ * @param deltaY The change in Y position (positive when dragging down, negative when dragging up)
21817
+ * @returns The progress of the swipe gesture
21818
+ */
21819
+ const calculateProgress = (el, deltaY) => {
21820
+ const windowHeight = window.innerHeight;
21821
+ // Position when fully open
21822
+ const modalTop = el.getBoundingClientRect().top;
21823
+ /**
21824
+ * The distance between the top of the modal and the bottom of the screen
21825
+ * is the total distance the modal needs to travel to be fully closed.
21826
+ */
21827
+ const totalDistance = windowHeight - modalTop;
21828
+ /**
21829
+ * The pull percentage is how far the user has swiped compared to the total
21830
+ * distance needed to close the modal.
21831
+ */
21832
+ const pullPercentage = deltaY / totalDistance;
21833
+ /**
21834
+ * The progress is the inverse of the pull percentage because
21835
+ * when the user starts swiping up, the progress should be close to 1,
21836
+ * and when the user has swiped all the way down, the progress should be
21837
+ * close to 0.
21838
+ */
21839
+ const progress = 1 - pullPercentage;
21840
+ // Round to the nearest thousandth to avoid returning very small decimal
21841
+ const roundedProgress = Math.round(progress * 1000) / 1000;
21842
+ return Math.max(0, Math.min(1, roundedProgress));
21843
+ };
21798
21844
 
21799
21845
  const createSheetEnterAnimation = (opts) => {
21800
21846
  const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
@@ -22243,7 +22289,7 @@ const mdLeaveAnimation$2 = (baseEl, opts) => {
22243
22289
  return baseAnimation;
22244
22290
  };
22245
22291
 
22246
- const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
22292
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange, onDragStart, onDragMove, onDragEnd) => {
22247
22293
  // Defaults for the sheet swipe animation
22248
22294
  const defaultBackdrop = [
22249
22295
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
@@ -22506,6 +22552,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
22506
22552
  baseEl.focus();
22507
22553
  });
22508
22554
  animation.progressStart(true, 1 - currentBreakpoint);
22555
+ onDragStart();
22509
22556
  };
22510
22557
  const onMove = (detail) => {
22511
22558
  /**
@@ -22574,6 +22621,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
22574
22621
  : step;
22575
22622
  offset = clamp(0.0001, processedStep, maxStep);
22576
22623
  animation.progressStep(offset);
22624
+ const closest = calculateClosestBreakpoint(detail.velocityY, detail.deltaY);
22625
+ const eventDetail = {
22626
+ currentY: detail.currentY,
22627
+ deltaY: detail.deltaY,
22628
+ velocityY: detail.velocityY,
22629
+ progress: calculateProgress(detail.currentY),
22630
+ currentBreakpoint: closest,
22631
+ };
22632
+ onDragMove(eventDetail);
22577
22633
  };
22578
22634
  const onEnd = (detail) => {
22579
22635
  /**
@@ -22592,16 +22648,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
22592
22648
  swapFooterPosition('stationary');
22593
22649
  return;
22594
22650
  }
22595
- /**
22596
- * When the gesture releases, we need to determine
22597
- * the closest breakpoint to snap to.
22598
- */
22599
- const velocity = detail.velocityY;
22600
- const threshold = (detail.deltaY + velocity * 350) / height;
22601
- const diff = currentBreakpoint - threshold;
22602
- const closest = breakpoints.reduce((a, b) => {
22603
- return Math.abs(b - diff) < Math.abs(a - diff) ? b : a;
22604
- });
22651
+ const closest = calculateClosestBreakpoint(detail.velocityY, detail.deltaY);
22605
22652
  moveSheetToBreakpoint({
22606
22653
  breakpoint: closest,
22607
22654
  breakpointOffset: offset,
@@ -22612,6 +22659,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
22612
22659
  */
22613
22660
  animated: true,
22614
22661
  });
22662
+ const eventDetail = {
22663
+ currentY: detail.currentY,
22664
+ deltaY: detail.deltaY,
22665
+ velocityY: detail.velocityY,
22666
+ progress: calculateProgress(detail.currentY),
22667
+ currentBreakpoint: closest,
22668
+ };
22669
+ onDragEnd(eventDetail);
22615
22670
  };
22616
22671
  const moveSheetToBreakpoint = (options) => {
22617
22672
  const { breakpoint, canDismiss, breakpointOffset, animated } = options;
@@ -22751,6 +22806,94 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
22751
22806
  .progressEnd(1, 0, animated ? 500 : 0);
22752
22807
  });
22753
22808
  };
22809
+ /**
22810
+ * Calculates the closest breakpoint based on the current velocity and deltaY.
22811
+ * This determines where the sheet should snap to when the user releases the
22812
+ * gesture.
22813
+ *
22814
+ * @param velocityY The current velocity of the gesture in the Y direction.
22815
+ * @param deltaY The change in Y position since the gesture started.
22816
+ * @returns The closest breakpoint value.
22817
+ */
22818
+ const calculateClosestBreakpoint = (velocityY, deltaY) => {
22819
+ const threshold = (deltaY + velocityY * 350) / height;
22820
+ const diff = currentBreakpoint - threshold;
22821
+ const closest = breakpoints.reduce((a, b) => {
22822
+ return Math.abs(b - diff) < Math.abs(a - diff) ? b : a;
22823
+ });
22824
+ return closest;
22825
+ };
22826
+ /**
22827
+ * Calculates the progress of the swipe gesture.
22828
+ *
22829
+ * The progress is a value between 0 and 1 that represents how far
22830
+ * the swipe has progressed towards closing the modal.
22831
+ *
22832
+ * A value closer to 1 means the modal is closer to being opened,
22833
+ * while a value closer to 0 means the modal is closer to being closed.
22834
+ *
22835
+ * @param currentY The current Y position of the gesture
22836
+ * @returns The progress of the sheet gesture
22837
+ */
22838
+ const calculateProgress = (currentY) => {
22839
+ const minBreakpoint = breakpoints[0];
22840
+ const maxBreakpoint = breakpoints[breakpoints.length - 1];
22841
+ // Convert breakpoints to pixel Y coordinates
22842
+ /**
22843
+ * The lowest point the sheet can be dragged to aka the point at which
22844
+ * the sheet is fully closed.
22845
+ */
22846
+ const maxY = convertBreakpointToY(minBreakpoint);
22847
+ /**
22848
+ * The highest point the sheet can be dragged to aka the point at which
22849
+ * the sheet is fully open.
22850
+ */
22851
+ const minY = convertBreakpointToY(maxBreakpoint);
22852
+ // The total distance between the fully open and fully closed positions.
22853
+ const totalDistance = maxY - minY;
22854
+ // The distance from the current position to the fully closed position.
22855
+ const distanceFromBottom = maxY - currentY;
22856
+ /**
22857
+ * The progress represents how far the sheet is from the bottom relative
22858
+ * to the total distance. When the user starts swiping up, the progress
22859
+ * should be close to 1, and when the user has swiped all the way down,
22860
+ * the progress should be close to 0.
22861
+ */
22862
+ const progress = distanceFromBottom / totalDistance;
22863
+ // Round to the nearest thousandth to avoid returning very small decimal
22864
+ const roundedProgress = Math.round(progress * 1000) / 1000;
22865
+ return Math.max(0, Math.min(1, roundedProgress));
22866
+ };
22867
+ /**
22868
+ * Converts a breakpoint value (0 to 1) into a pixel Y coordinate
22869
+ * on the screen.
22870
+ *
22871
+ * @param breakpoint The breakpoint value (e.g., 0.5 for half-open)
22872
+ * @returns The pixel Y coordinate on the screen
22873
+ */
22874
+ const convertBreakpointToY = (breakpoint) => {
22875
+ const rect = baseEl.getBoundingClientRect();
22876
+ const modalHeight = rect.height;
22877
+ // The bottom of the screen.
22878
+ const viewportBottom = window.innerHeight;
22879
+ /**
22880
+ * The active height is how much of the modal is actually showing
22881
+ * on the screen for this specific breakpoint.
22882
+ */
22883
+ const activeHeight = modalHeight * breakpoint;
22884
+ /**
22885
+ * To find the Y coordinate, start at the bottom of the screen
22886
+ * and move up by the active height of the modal.
22887
+ *
22888
+ * A breakpoint of 1.0 means the active height is the full modal height
22889
+ * (fully open). A breakpoint of 0.0 means the active height is 0
22890
+ * (fully closed).
22891
+ *
22892
+ * Since screen Y coordinates get smaller as you go up, we subtract the
22893
+ * active height from the viewport bottom.
22894
+ */
22895
+ return viewportBottom - activeHeight;
22896
+ };
22754
22897
  const gesture = createGesture({
22755
22898
  el: wrapperEl,
22756
22899
  gestureName: 'modalSheet',
@@ -22795,6 +22938,9 @@ class Modal {
22795
22938
  this.willDismissShorthand = createEvent(this, "willDismiss", 7);
22796
22939
  this.didDismissShorthand = createEvent(this, "didDismiss", 7);
22797
22940
  this.ionMount = createEvent(this, "ionMount", 7);
22941
+ this.ionDragStart = createEvent(this, "ionDragStart", 7);
22942
+ this.ionDragMove = createEvent(this, "ionDragMove", 7);
22943
+ this.ionDragEnd = createEvent(this, "ionDragEnd", 7);
22798
22944
  this.lockController = createLockController();
22799
22945
  this.triggerController = createTriggerController();
22800
22946
  this.coreDelegate = CoreDelegate();
@@ -23262,32 +23408,7 @@ class Modal {
23262
23408
  return;
23263
23409
  }
23264
23410
  const statusBarStyle = (_a = this.statusBarStyle) !== null && _a !== void 0 ? _a : Style.Default;
23265
- this.gesture = createSwipeToCloseGesture(el, ani, statusBarStyle, () => {
23266
- /**
23267
- * While the gesture animation is finishing
23268
- * it is possible for a user to tap the backdrop.
23269
- * This would result in the dismiss animation
23270
- * being played again. Typically this is avoided
23271
- * by setting `presented = false` on the overlay
23272
- * component; however, we cannot do that here as
23273
- * that would prevent the element from being
23274
- * removed from the DOM.
23275
- */
23276
- this.gestureAnimationDismissing = true;
23277
- /**
23278
- * Reset the status bar style as the dismiss animation
23279
- * starts otherwise the status bar will be the wrong
23280
- * color for the duration of the dismiss animation.
23281
- * The dismiss method does this as well, but
23282
- * in this case it's only called once the animation
23283
- * has finished.
23284
- */
23285
- setCardStatusBarDefault(this.statusBarStyle);
23286
- this.animation.onFinish(async () => {
23287
- await this.dismiss(undefined, GESTURE);
23288
- this.gestureAnimationDismissing = false;
23289
- });
23290
- });
23411
+ this.gesture = createSwipeToCloseGesture(el, ani, statusBarStyle, () => this.cardOnDismiss(), () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
23291
23412
  this.gesture.enable(true);
23292
23413
  }
23293
23414
  initSheetGesture() {
@@ -23308,7 +23429,7 @@ class Modal {
23308
23429
  this.currentBreakpoint = breakpoint;
23309
23430
  this.ionBreakpointDidChange.emit({ breakpoint });
23310
23431
  }
23311
- });
23432
+ }, () => this.onDragStart(), (detail) => this.onDragMove(detail), (detail) => this.onDragEnd(detail));
23312
23433
  this.gesture = gesture;
23313
23434
  this.moveSheetToBreakpoint = moveSheetToBreakpoint;
23314
23435
  this.gesture.enable(true);
@@ -23405,6 +23526,32 @@ class Modal {
23405
23526
  this.gestureAnimationDismissing = false;
23406
23527
  });
23407
23528
  }
23529
+ cardOnDismiss() {
23530
+ /**
23531
+ * While the gesture animation is finishing
23532
+ * it is possible for a user to tap the backdrop.
23533
+ * This would result in the dismiss animation
23534
+ * being played again. Typically this is avoided
23535
+ * by setting `presented = false` on the overlay
23536
+ * component; however, we cannot do that here as
23537
+ * that would prevent the element from being
23538
+ * removed from the DOM.
23539
+ */
23540
+ this.gestureAnimationDismissing = true;
23541
+ /**
23542
+ * Reset the status bar style as the dismiss animation
23543
+ * starts otherwise the status bar will be the wrong
23544
+ * color for the duration of the dismiss animation.
23545
+ * The dismiss method does this as well, but
23546
+ * in this case it's only called once the animation
23547
+ * has finished.
23548
+ */
23549
+ setCardStatusBarDefault(this.statusBarStyle);
23550
+ this.animation.onFinish(async () => {
23551
+ await this.dismiss(undefined, GESTURE);
23552
+ this.gestureAnimationDismissing = false;
23553
+ });
23554
+ }
23408
23555
  /**
23409
23556
  * Dismiss the modal overlay after it has been presented.
23410
23557
  * This is a no-op if the overlay has not been presented yet. If you want
@@ -23720,6 +23867,15 @@ class Modal {
23720
23867
  (_a = this.parentRemovalObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
23721
23868
  this.parentRemovalObserver = undefined;
23722
23869
  }
23870
+ onDragStart() {
23871
+ this.ionDragStart.emit();
23872
+ }
23873
+ onDragMove(detail) {
23874
+ this.ionDragMove.emit(detail);
23875
+ }
23876
+ onDragEnd(detail) {
23877
+ this.ionDragEnd.emit(detail);
23878
+ }
23723
23879
  render() {
23724
23880
  const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
23725
23881
  const showHandle = handle !== false && isSheetModal;
@@ -23727,20 +23883,20 @@ class Modal {
23727
23883
  const isCardModal = presentingElement !== undefined && mode === 'ios';
23728
23884
  const isHandleCycle = handleBehavior === 'cycle';
23729
23885
  const isSheetModalWithHandle = isSheetModal && showHandle;
23730
- return (hAsync(Host, Object.assign({ key: '87328006ea6c75ebc518ace300438492a567223e', "no-router": true,
23886
+ return (hAsync(Host, Object.assign({ key: 'bca3cbdb2ce8e5127d27eae7494c434aaeddaf88', "no-router": true,
23731
23887
  // Allow the modal to be navigable when the handle is focusable
23732
23888
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
23733
23889
  zIndex: `${20000 + this.overlayIndex}`,
23734
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), hAsync("ion-backdrop", { key: 'ee94ff8e09b691dd4ad4e4db1720f06bc3c5a469', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: 'bffd69b4635c22d9f249725bd952c1e93d5615c7', class: "modal-shadow" }), hAsync("div", Object.assign({ key: '1d394d3c68916e464ff1fbf5242419f4a3d3cca1',
23890
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), hAsync("ion-backdrop", { key: 'b1c4112123d84d8a9b9d455bcc17d884f99d9f28', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: '080c8e6d37b311a1b5ad2655d99f18668abae211', class: "modal-shadow" }), hAsync("div", Object.assign({ key: '8ba05e9520b1b5529bf0caeb766da5bf612d4d14',
23735
23891
  /*
23736
23892
  role and aria-modal must be used on the
23737
23893
  same element. They must also be set inside the
23738
23894
  shadow DOM otherwise ion-button will not be highlighted
23739
23895
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
23740
23896
  */
23741
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '2dcf58792018e557e0c323baad2d672bc99c0bb1', class: "modal-handle",
23897
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '2d2d5d731f55755f32ebcbf557f97486dc6202a6', class: "modal-handle",
23742
23898
  // Prevents the handle from receiving keyboard focus when it does not cycle
23743
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), hAsync("slot", { key: '44164b1e8710c3895400ad9f44ecd99873874ad5', onSlotchange: this.onSlotChange }))));
23899
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), hAsync("slot", { key: 'c717d19865dafba02e15db79bc0662c5d89e96fd', onSlotchange: this.onSlotChange }))));
23744
23900
  }
23745
23901
  get el() { return getElement(this); }
23746
23902
  static get watchers() { return {
@@ -33491,9 +33647,9 @@ class SegmentContent {
33491
33647
  }; }
33492
33648
  }
33493
33649
 
33494
- const segmentViewIosCss = ":host{display:-ms-flexbox;display:flex;height:100%;overflow-x:scroll;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none}:host::-webkit-scrollbar{display:none}:host(.segment-view-disabled){-ms-touch-action:none;touch-action:none;overflow-x:hidden}:host(.segment-view-scroll-disabled){pointer-events:none}:host(.segment-view-disabled){opacity:0.3}";
33650
+ const segmentViewIosCss = ":host{display:-ms-flexbox;display:flex;height:100%;overflow-x:scroll;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none}:host::-webkit-scrollbar{display:none}:host(.segment-view-disabled),:host(.segment-view-swipe-disabled){-ms-touch-action:none;touch-action:none;overflow-x:hidden}:host(.segment-view-scroll-disabled){pointer-events:none}:host(.segment-view-disabled){opacity:0.3}";
33495
33651
 
33496
- const segmentViewMdCss = ":host{display:-ms-flexbox;display:flex;height:100%;overflow-x:scroll;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none}:host::-webkit-scrollbar{display:none}:host(.segment-view-disabled){-ms-touch-action:none;touch-action:none;overflow-x:hidden}:host(.segment-view-scroll-disabled){pointer-events:none}:host(.segment-view-disabled){opacity:0.3}";
33652
+ const segmentViewMdCss = ":host{display:-ms-flexbox;display:flex;height:100%;overflow-x:scroll;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none}:host::-webkit-scrollbar{display:none}:host(.segment-view-disabled),:host(.segment-view-swipe-disabled){-ms-touch-action:none;touch-action:none;overflow-x:hidden}:host(.segment-view-scroll-disabled){pointer-events:none}:host(.segment-view-disabled){opacity:0.3}";
33497
33653
 
33498
33654
  class SegmentView {
33499
33655
  constructor(hostRef) {
@@ -33505,6 +33661,10 @@ class SegmentView {
33505
33661
  * If `true`, the segment view cannot be interacted with.
33506
33662
  */
33507
33663
  this.disabled = false;
33664
+ /**
33665
+ * If `true`, users will be able to swipe the segment view to navigate between segment contents.
33666
+ */
33667
+ this.swipeGesture = true;
33508
33668
  }
33509
33669
  handleScroll(ev) {
33510
33670
  var _a;
@@ -33592,11 +33752,12 @@ class SegmentView {
33592
33752
  return Array.from(this.el.querySelectorAll('ion-segment-content'));
33593
33753
  }
33594
33754
  render() {
33595
- const { disabled, isManualScroll } = this;
33596
- return (hAsync(Host, { key: 'e180b67bb3143a5f4611fb358c037be6fc782a8f', class: {
33755
+ const { disabled, isManualScroll, swipeGesture } = this;
33756
+ return (hAsync(Host, { key: '565cccce7f0cfc4c71508777cc60292d6f24334f', class: {
33597
33757
  'segment-view-disabled': disabled,
33598
33758
  'segment-view-scroll-disabled': isManualScroll === false,
33599
- } }, hAsync("slot", { key: '41c11d6a7406a10f5c64a2e73abfc072afd8fc73' })));
33759
+ 'segment-view-swipe-disabled': swipeGesture === false,
33760
+ } }, hAsync("slot", { key: '4118c240364467302b8f593e33c37837ea5d06f0' })));
33600
33761
  }
33601
33762
  get el() { return getElement(this); }
33602
33763
  static get style() { return {
@@ -33608,6 +33769,7 @@ class SegmentView {
33608
33769
  "$tagName$": "ion-segment-view",
33609
33770
  "$members$": {
33610
33771
  "disabled": [4],
33772
+ "swipeGesture": [4, "swipe-gesture"],
33611
33773
  "isManualScroll": [32],
33612
33774
  "setContent": [64]
33613
33775
  },
@@ -33637,6 +33799,9 @@ const selectMdCss = ":host{--padding-top:0px;--padding-end:0px;--padding-bottom:
33637
33799
  * @part supporting-text - Supporting text displayed beneath the select.
33638
33800
  * @part helper-text - Supporting text displayed beneath the select when the select is valid.
33639
33801
  * @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
33802
+ * @part bottom - The container element for helper text, error text, and counter.
33803
+ * @part wrapper - The clickable label element that wraps the entire form field (label text, slots, selected values or placeholder, and toggle icons).
33804
+ * @part inner - The inner element of the wrapper that manages the slots, selected values or placeholder, and toggle icons.
33640
33805
  */
33641
33806
  class Select {
33642
33807
  constructor(hostRef) {
@@ -34333,7 +34498,7 @@ class Select {
34333
34498
  if (!hasHintText) {
34334
34499
  return;
34335
34500
  }
34336
- return hAsync("div", { class: "select-bottom" }, this.renderHintText());
34501
+ return (hAsync("div", { class: "select-bottom", part: "bottom" }, this.renderHintText()));
34337
34502
  }
34338
34503
  render() {
34339
34504
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value, hasFocus, } = this;
@@ -34364,7 +34529,7 @@ class Select {
34364
34529
  * TODO(FW-5592): Remove hasStartEndSlots condition
34365
34530
  */
34366
34531
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
34367
- return (hAsync(Host, { key: 'b7fa907f8fbc54fd63e2d07a9bb5156d94fd5057', onClick: this.onClick, class: createColorClasses$1(this.color, {
34532
+ return (hAsync(Host, { key: 'ada627c442ebcdd4a4ee96e5f5f3ec0e2181d689', onClick: this.onClick, class: createColorClasses$1(this.color, {
34368
34533
  [mode]: true,
34369
34534
  'in-item': inItem,
34370
34535
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -34382,7 +34547,7 @@ class Select {
34382
34547
  [`select-justify-${justify}`]: justifyEnabled,
34383
34548
  [`select-shape-${shape}`]: shape !== undefined,
34384
34549
  [`select-label-placement-${labelPlacement}`]: true,
34385
- }) }, hAsync("label", { key: '11137e6a8b0374e93923ddb5a4629972ded5f43c', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: '99e3c09b5e6c2e7be493ed5834f991fffe45cfff', class: "select-wrapper-inner" }, hAsync("slot", { key: '740f0e5a913cb0209d5acae31c33a6ed8f672dfc', name: "start" }), hAsync("div", { key: 'b20e33c8b60915a5194948fcf8e22d7789f0b050', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '0199f338185d5fa2cdd977bb20516746bd9ddad5', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: '3b54de893cc8fc66df8588cee22e30d6f10850b3', class: "select-highlight" })), this.renderBottomContent()));
34550
+ }) }, hAsync("label", { key: 'd1c4663e740cfdcd28f90a5e0297d05cf42cc4df', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), hAsync("div", { key: 'cd671e0b543378e7b822ce649a7b4006094b111f', class: "select-wrapper-inner", part: "inner" }, hAsync("slot", { key: '48e7df0c517a382195736273019b855e422a82ed', name: "start" }), hAsync("div", { key: '822747ffb9101cb1d3ff947da55bc2e8e1f2c8e2', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '349200d9f9ebf25e0b8708ac8683a76e7c6ed33c', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: '7eefb70d431cb9c01cc408d35349f7a3d0f2af35', class: "select-highlight" })), this.renderBottomContent()));
34386
34551
  }
34387
34552
  get el() { return getElement(this); }
34388
34553
  static get watchers() { return {
@@ -35876,7 +36041,7 @@ class Textarea {
35876
36041
  * TODO(FW-5592): Remove hasStartEndSlots condition
35877
36042
  */
35878
36043
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
35879
- return (hAsync(Host, { key: 'a70a62d7aae3831a50acd74f60b930925ada1326', class: createColorClasses$1(this.color, {
36044
+ return (hAsync(Host, { key: '543076e7ed730451b490a9008cabe8f4a5d1f347', class: createColorClasses$1(this.color, {
35880
36045
  [mode]: true,
35881
36046
  'has-value': hasValue,
35882
36047
  'has-focus': hasFocus,
@@ -35885,7 +36050,7 @@ class Textarea {
35885
36050
  [`textarea-shape-${shape}`]: shape !== undefined,
35886
36051
  [`textarea-label-placement-${labelPlacement}`]: true,
35887
36052
  'textarea-disabled': disabled,
35888
- }) }, hAsync("label", { key: '8a2dd59a60f7469df84018eb0ede3a9ec3862703', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: '1bfc368236e3da7a225a45118c27fbfc1fe5fa46', class: "textarea-wrapper-inner" }, hAsync("div", { key: '215cbb2635ff52e31a8973376989b85e7245d40f', class: "start-slot-wrapper" }, hAsync("slot", { key: '9f6b461cdee9d629deb695d2bea054ece2f32305', name: "start" })), hAsync("div", { key: 'c1af35a2d5bc452bebe0b22a26d15ff52b4e9fc8', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, hAsync("textarea", Object.assign({ key: '69a69b3cf0932baafbe37e6e846f1a571608d3f2', 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, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined }, this.inheritedAttributes), value)), hAsync("div", { key: 'c053ea8b865d0e29763aed2e4939cc9c9e374c15', class: "end-slot-wrapper" }, hAsync("slot", { key: '930aa641833b0df54b9ea10368fc2f46d5f491f6', name: "end" }))), shouldRenderHighlight && hAsync("div", { key: '8d12597d15f5f429d80e8272ea99e64ed924e482', class: "textarea-highlight" })), this.renderBottomContent()));
36053
+ }) }, hAsync("label", { key: '3aebaa02edde10e19b2bbe2fbcc10f70b4faccff', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: '73c1c7fee0ffffe65296060dd4110003d3975c44', class: "textarea-wrapper-inner" }, hAsync("div", { key: '5a245b822afae0b9858ef0d176a2fe06983954e2', class: "start-slot-wrapper" }, hAsync("slot", { key: '684305a1b558f93af6eb99825981ced1c09c7a8c', name: "start" })), hAsync("div", { key: 'f2f723b674cff48cf76656450ff6c1362514ea90', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, hAsync("textarea", Object.assign({ key: 'ae826e876a4b476502498b9c64ea020010c55db3', 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, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined }, this.inheritedAttributes), value)), hAsync("div", { key: '018cbf061fb53aa1d1caf6173fd08348cbe3413a', class: "end-slot-wrapper" }, hAsync("slot", { key: 'c383636f2d8a548e48848d0967f71ee1969b1411', name: "end" }))), shouldRenderHighlight && hAsync("div", { key: '6522d2058f9842abad9e7223b542cb7e1af40477', class: "textarea-highlight" })), this.renderBottomContent()));
35889
36054
  }
35890
36055
  get el() { return getElement(this); }
35891
36056
  static get watchers() { return {
@@ -35906,7 +36071,7 @@ class Textarea {
35906
36071
  "autofocus": [4],
35907
36072
  "clearOnEdit": [4, "clear-on-edit"],
35908
36073
  "debounce": [2],
35909
- "disabled": [4],
36074
+ "disabled": [516],
35910
36075
  "fill": [1],
35911
36076
  "inputmode": [1],
35912
36077
  "enterkeyhint": [1],
@@ -35914,7 +36079,7 @@ class Textarea {
35914
36079
  "minlength": [2],
35915
36080
  "name": [1],
35916
36081
  "placeholder": [1],
35917
- "readonly": [4],
36082
+ "readonly": [516],
35918
36083
  "required": [4],
35919
36084
  "spellcheck": [4],
35920
36085
  "cols": [514],
@@ -35936,7 +36101,7 @@ class Textarea {
35936
36101
  },
35937
36102
  "$listeners$": [[2, "click", "onClickCapture"]],
35938
36103
  "$lazyBundleId$": "-",
35939
- "$attrsToReflect$": [["color", "color"], ["cols", "cols"], ["autoGrow", "auto-grow"]]
36104
+ "$attrsToReflect$": [["color", "color"], ["disabled", "disabled"], ["readonly", "readonly"], ["cols", "cols"], ["autoGrow", "auto-grow"]]
35940
36105
  }; }
35941
36106
  }
35942
36107
  let textareaIds = 0;