@ionic/core 9.0.11-dev.11793726772.1e883321 → 9.0.11-dev.11793728481.1fc40367

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 (47) hide show
  1. package/components/ion-content.js +1 -1
  2. package/components/ion-datetime-button.js +1 -1
  3. package/components/ion-datetime.js +1 -1
  4. package/components/ion-select-modal.js +1 -1
  5. package/components/ion-select.js +1 -1
  6. package/components/{p-BCQSEpww.js → p-B7ExaLVL.js} +1 -1
  7. package/components/{p-CseHeZbU.js → p-BCYVFy50.js} +1 -1
  8. package/components/p-ByE0slik.js +4 -0
  9. package/dist/cjs/ion-app_8.cjs.entry.js +5 -13
  10. package/dist/cjs/ion-datetime-button.cjs.entry.js +33 -6
  11. package/dist/cjs/ion-datetime.cjs.entry.js +353 -36
  12. package/dist/cjs/ionic.cjs.js +1 -1
  13. package/dist/cjs/loader.cjs.js +1 -1
  14. package/dist/collection/components/content/{content.ios.css → content.css} +41 -65
  15. package/dist/collection/components/content/content.js +5 -9
  16. package/dist/collection/components/datetime/datetime.ionic.css +179 -5
  17. package/dist/collection/components/datetime/datetime.ios.css +134 -2
  18. package/dist/collection/components/datetime/datetime.js +406 -33
  19. package/dist/collection/components/datetime/datetime.md.css +120 -0
  20. package/dist/collection/components/datetime/utils/state.js +18 -1
  21. package/dist/collection/components/datetime-button/datetime-button.js +34 -6
  22. package/dist/docs.json +160 -127
  23. package/dist/esm/{format-NT7iHsbA.js → format-DUHrIiJq.js} +1 -1
  24. package/dist/esm/ion-app_8.entry.js +5 -13
  25. package/dist/esm/ion-datetime-button.entry.js +34 -7
  26. package/dist/esm/ion-datetime.entry.js +354 -37
  27. package/dist/esm/ionic.js +1 -1
  28. package/dist/esm/loader.js +1 -1
  29. package/dist/html.html-data.json +20 -0
  30. package/dist/ionic/ionic.esm.js +1 -1
  31. package/dist/ionic/p-56d77e95.entry.js +4 -0
  32. package/dist/ionic/{p-BtccSO5J.js → p-CaOPF8Xt.js} +1 -1
  33. package/dist/ionic/p-b30b468d.entry.js +4 -0
  34. package/dist/ionic/p-ceca04fb.entry.js +4 -0
  35. package/dist/types/components/datetime/datetime-interface.d.ts +4 -0
  36. package/dist/types/components/datetime/datetime.d.ts +71 -2
  37. package/dist/types/components/datetime/utils/state.d.ts +5 -2
  38. package/dist/types/components.d.ts +33 -0
  39. package/hydrate/index.js +400 -56
  40. package/hydrate/index.mjs +400 -56
  41. package/package.json +1 -1
  42. package/components/p-Da8LCPwo.js +0 -4
  43. package/dist/collection/components/content/content.ionic.css +0 -352
  44. package/dist/collection/components/content/content.md.css +0 -347
  45. package/dist/ionic/p-0743a26a.entry.js +0 -4
  46. package/dist/ionic/p-39e3be74.entry.js +0 -4
  47. package/dist/ionic/p-ad46d2fd.entry.js +0 -4
@@ -346,11 +346,108 @@
346
346
 
347
347
  :host .calendar-day-wrapper {
348
348
  display: flex;
349
+ position: relative;
349
350
  align-items: center;
350
351
  justify-content: center;
351
352
  min-width: 0;
352
353
  min-height: 0;
353
354
  overflow: visible;
355
+ /**
356
+ * Create a stacking context so the range track
357
+ * (::before with z-index: -1) stays behind the
358
+ * day button but above the host background.
359
+ */
360
+ z-index: 0;
361
+ }
362
+
363
+ /**
364
+ * Each day in the range draws its own piece of the track with a
365
+ * ::before. In-range days fill the cell, while the start and end
366
+ * caps cover the half between the pill center and the next day.
367
+ *
368
+ * Grid columns are `1fr`, so cell edges land on fractional pixels
369
+ * and a cell's track can fall a hairline short of its neighbor's.
370
+ * Each day therefore extends 1px toward the next day in the range,
371
+ * which the next day paints over except inside such a gap.
372
+ *
373
+ * @prop --range-background: The background color of the range selection track.
374
+ */
375
+ :host .calendar-day-wrapper-in-range::before,
376
+ :host .calendar-day-wrapper-range-start::before,
377
+ :host .calendar-day-wrapper-range-end::before {
378
+ position: absolute;
379
+ top: 50%;
380
+ inset-inline-start: 0;
381
+ inset-inline-end: 0;
382
+ height: var(--range-track-height);
383
+ transform: translateY(-50%);
384
+ /**
385
+ * `--range-background` is translucent by default, so it is layered
386
+ * over the datetime background to paint an opaque track. Where two
387
+ * days overlap, the color stays the same instead of doubling up
388
+ * into a darker line.
389
+ */
390
+ background: linear-gradient(var(--range-background), var(--range-background)), linear-gradient(var(--background), var(--background));
391
+ content: "";
392
+ z-index: -1;
393
+ }
394
+
395
+ :host .calendar-day-wrapper-range-start::before {
396
+ inset-inline-start: 50%;
397
+ }
398
+
399
+ :host .calendar-day-wrapper-range-end::before {
400
+ inset-inline-end: 50%;
401
+ }
402
+
403
+ /**
404
+ * Only extend toward a day that draws the track as well. The last
405
+ * day of a week is followed by the next row, and the next day is
406
+ * unpainted when it ends the selection or is disabled inside the
407
+ * range, so extending there would leave a 1px nub.
408
+ */
409
+ :host .calendar-day-wrapper-in-range:not(:nth-child(7n)):has(+ .calendar-day-wrapper-in-range)::before,
410
+ :host .calendar-day-wrapper-in-range:not(:nth-child(7n)):has(+ .calendar-day-wrapper-range-end)::before,
411
+ :host .calendar-day-wrapper-range-start:not(:nth-child(7n)):has(+ .calendar-day-wrapper-in-range)::before,
412
+ :host .calendar-day-wrapper-range-start:not(:nth-child(7n)):has(+ .calendar-day-wrapper-range-end)::before {
413
+ inset-inline-end: -1px;
414
+ }
415
+
416
+ /**
417
+ * A range that continues onto the next week runs the track
418
+ * through the grid padding to the edge of the calendar.
419
+ */
420
+ :host .calendar-day-wrapper-in-range:nth-child(7n)::before,
421
+ :host .calendar-day-wrapper-range-start:nth-child(7n)::before {
422
+ inset-inline-end: calc(var(--range-track-edge-overflow, 0px) * -1);
423
+ }
424
+
425
+ :host .calendar-day-wrapper-in-range:nth-child(7n+1)::before,
426
+ :host .calendar-day-wrapper-range-end:nth-child(7n+1)::before {
427
+ inset-inline-start: calc(var(--range-track-edge-overflow, 0px) * -1);
428
+ }
429
+
430
+ /**
431
+ * When a single day is both the start and end of the range,
432
+ * do not show a track since there is nothing to connect.
433
+ */
434
+ :host .calendar-day-wrapper-range-start.calendar-day-wrapper-range-end::before {
435
+ display: none;
436
+ }
437
+
438
+ /**
439
+ * When the component is disabled, fade the whole grid once instead of
440
+ * fading each day. Fading a day makes it its own compositing group, so
441
+ * the 1px that each day extends toward the next would be painted twice
442
+ * and read as a darker seam. The day buttons drop their own disabled
443
+ * opacity so the grid is the only thing applying it.
444
+ */
445
+ :host(.datetime-disabled.datetime-range) .calendar-month-grid {
446
+ opacity: 0.4;
447
+ }
448
+
449
+ :host(.datetime-disabled.datetime-range) .calendar-month-grid .calendar-day[disabled] {
450
+ opacity: 1;
354
451
  }
355
452
 
356
453
  /**
@@ -451,7 +548,7 @@
451
548
  */
452
549
  --background: var(--token-bg-surface-default, var(--token-primitives-base-white, #ffffff));
453
550
  --focus-ring-color: var(--token-border-focus-default, var(--token-semantics-primary-400, var(--token-primitives-blue-400, #b5c0f7)));
454
- --focus-ring-width: var(--token-border-radius-025, var(--token-scale-050, 2px));
551
+ --focus-ring-width: var(--token-border-size-050, var(--token-scale-050, 2px));
455
552
  /**
456
553
  * TODO(FW-6931): Remove these variables upon solving the root cause
457
554
  */
@@ -601,16 +698,16 @@
601
698
  }
602
699
 
603
700
  .calendar-day[disabled]:not(.calendar-day-constrained) {
604
- color: var(--token-primitives-neutral-500, #9fa5ad);
701
+ color: var(--token-text-disabled, var(--token-primitives-neutral-500, #9fa5ad));
605
702
  }
606
703
 
607
704
  .calendar-day.calendar-day-today {
608
- color: var(--token-semantics-primary-base, var(--token-semantics-primary-700, var(--token-primitives-blue-700, #105cef)));
705
+ color: var(--token-text-select, var(--token-semantics-primary-700, var(--token-primitives-blue-700, #105cef)));
609
706
  }
610
707
 
611
708
  .calendar-day.calendar-day-active,
612
709
  .calendar-day.calendar-day-active.calendar-day-adjacent-day {
613
- background: var(--token-semantics-primary-100, var(--token-primitives-blue-100, #f0f2ff));
710
+ background: var(--token-bg-primary-subtle-default, var(--token-semantics-primary-100, var(--token-primitives-blue-100, #f0f2ff)));
614
711
  }
615
712
 
616
713
  .calendar-day:focus-visible {
@@ -618,7 +715,7 @@
618
715
  }
619
716
 
620
717
  @media (any-hover: hover) {
621
- .calendar-day:not([disabled]):not(:active):hover {
718
+ .calendar-day:not([disabled]):not(:active):not(.calendar-day-in-range):hover {
622
719
  background: var(--token-semantics-primary-200, var(--token-primitives-blue-200, #e4e8ff));
623
720
  }
624
721
  }
@@ -635,6 +732,83 @@
635
732
  color: var(--token-text-default, var(--token-primitives-neutral-1200, #242528));
636
733
  }
637
734
 
735
+ :host {
736
+ --range-background: var(--token-bg-primary-subtle-default, var(--token-semantics-primary-100, var(--token-primitives-blue-100, #f0f2ff)));
737
+ --range-track-height: var(--token-scale-1200, 48px);
738
+ }
739
+
740
+ :host .calendar-day.calendar-day-range-start,
741
+ :host .calendar-day.calendar-day-range-end {
742
+ border-radius: var(--token-border-radius-full, 999px);
743
+ background: var(--token-bg-primary-base-default, var(--token-semantics-primary-base, var(--token-semantics-primary-700, var(--token-primitives-blue-700, #105cef))));
744
+ color: var(--token-text-inverse, var(--token-primitives-base-white, #ffffff));
745
+ }
746
+
747
+ .calendar-day.calendar-day-in-range {
748
+ border-radius: 0;
749
+ background: none;
750
+ color: var(--token-text-default, var(--token-primitives-neutral-1200, #242528));
751
+ }
752
+
753
+ .calendar-day.calendar-day-today.calendar-day-in-range {
754
+ color: var(--token-text-select, var(--token-semantics-primary-700, var(--token-primitives-blue-700, #105cef)));
755
+ }
756
+
757
+ :host .calendar-day.calendar-day-today.calendar-day-range-start,
758
+ :host .calendar-day.calendar-day-today.calendar-day-range-end {
759
+ color: var(--token-text-inverse, var(--token-primitives-base-white, #ffffff));
760
+ }
761
+
762
+ @media (any-hover: hover) {
763
+ .calendar-day.calendar-day-range-start:not([disabled]):not(:active):hover,
764
+ .calendar-day.calendar-day-range-end:not([disabled]):not(:active):hover {
765
+ background: var(--token-bg-primary-base-press, var(--token-semantics-primary-900, var(--token-primitives-blue-900, #0d4bc3)));
766
+ }
767
+ }
768
+ .calendar-day.calendar-day-range-start:active,
769
+ .calendar-day.calendar-day-range-end:active {
770
+ background: var(--token-bg-primary-base-press, var(--token-semantics-primary-900, var(--token-primitives-blue-900, #0d4bc3)));
771
+ }
772
+
773
+ .calendar-day.calendar-day-in-range:active {
774
+ background: var(--token-bg-primary-subtle-press, var(--token-semantics-primary-300, var(--token-primitives-blue-300, #d0d7fa)));
775
+ }
776
+
777
+ :host(.datetime-disabled.datetime-range) .calendar-day[disabled]:not(.calendar-day-constrained) {
778
+ color: var(--token-text-default, var(--token-primitives-neutral-1200, #242528));
779
+ }
780
+
781
+ :host(.datetime-disabled.datetime-range) .calendar-day.calendar-day-adjacent-day[disabled] {
782
+ color: var(--token-text-subtlest, var(--token-primitives-neutral-800, #6c727a));
783
+ }
784
+
785
+ :host(.datetime-disabled.datetime-range) .calendar-day.calendar-day-today[disabled] {
786
+ color: var(--token-text-select, var(--token-semantics-primary-700, var(--token-primitives-blue-700, #105cef)));
787
+ }
788
+
789
+ :host(.datetime-disabled.datetime-range) .calendar-day.calendar-day-range-start[disabled],
790
+ :host(.datetime-disabled.datetime-range) .calendar-day.calendar-day-range-end[disabled] {
791
+ color: var(--token-text-inverse, var(--token-primitives-base-white, #ffffff));
792
+ }
793
+
794
+ :host(.datetime-readonly) .calendar-day.calendar-day-range-start[disabled],
795
+ :host(.datetime-readonly) .calendar-day.calendar-day-range-end[disabled] {
796
+ color: var(--token-text-inverse, var(--token-primitives-base-white, #ffffff));
797
+ }
798
+
799
+ :host(.datetime-readonly) .calendar-day.calendar-day-in-range[disabled] {
800
+ color: var(--token-text-default, var(--token-primitives-neutral-1200, #242528));
801
+ }
802
+
803
+ :host(.datetime-readonly) .calendar-day.calendar-day-today.calendar-day-in-range[disabled] {
804
+ color: var(--token-text-select, var(--token-semantics-primary-700, var(--token-primitives-blue-700, #105cef)));
805
+ }
806
+
807
+ :host(.datetime-readonly) .calendar-day.calendar-day-today.calendar-day-range-start[disabled],
808
+ :host(.datetime-readonly) .calendar-day.calendar-day-today.calendar-day-range-end[disabled] {
809
+ color: var(--token-text-inverse, var(--token-primitives-base-white, #ffffff));
810
+ }
811
+
638
812
  :host .datetime-time {
639
813
  -webkit-padding-start: var(--token-space-400, var(--token-scale-400, 16px));
640
814
  padding-inline-start: var(--token-space-400, var(--token-scale-400, 16px));
@@ -349,11 +349,108 @@
349
349
 
350
350
  :host .calendar-day-wrapper {
351
351
  display: flex;
352
+ position: relative;
352
353
  align-items: center;
353
354
  justify-content: center;
354
355
  min-width: 0;
355
356
  min-height: 0;
356
357
  overflow: visible;
358
+ /**
359
+ * Create a stacking context so the range track
360
+ * (::before with z-index: -1) stays behind the
361
+ * day button but above the host background.
362
+ */
363
+ z-index: 0;
364
+ }
365
+
366
+ /**
367
+ * Each day in the range draws its own piece of the track with a
368
+ * ::before. In-range days fill the cell, while the start and end
369
+ * caps cover the half between the pill center and the next day.
370
+ *
371
+ * Grid columns are `1fr`, so cell edges land on fractional pixels
372
+ * and a cell's track can fall a hairline short of its neighbor's.
373
+ * Each day therefore extends 1px toward the next day in the range,
374
+ * which the next day paints over except inside such a gap.
375
+ *
376
+ * @prop --range-background: The background color of the range selection track.
377
+ */
378
+ :host .calendar-day-wrapper-in-range::before,
379
+ :host .calendar-day-wrapper-range-start::before,
380
+ :host .calendar-day-wrapper-range-end::before {
381
+ position: absolute;
382
+ top: 50%;
383
+ inset-inline-start: 0;
384
+ inset-inline-end: 0;
385
+ height: var(--range-track-height);
386
+ transform: translateY(-50%);
387
+ /**
388
+ * `--range-background` is translucent by default, so it is layered
389
+ * over the datetime background to paint an opaque track. Where two
390
+ * days overlap, the color stays the same instead of doubling up
391
+ * into a darker line.
392
+ */
393
+ background: linear-gradient(var(--range-background), var(--range-background)), linear-gradient(var(--background), var(--background));
394
+ content: "";
395
+ z-index: -1;
396
+ }
397
+
398
+ :host .calendar-day-wrapper-range-start::before {
399
+ inset-inline-start: 50%;
400
+ }
401
+
402
+ :host .calendar-day-wrapper-range-end::before {
403
+ inset-inline-end: 50%;
404
+ }
405
+
406
+ /**
407
+ * Only extend toward a day that draws the track as well. The last
408
+ * day of a week is followed by the next row, and the next day is
409
+ * unpainted when it ends the selection or is disabled inside the
410
+ * range, so extending there would leave a 1px nub.
411
+ */
412
+ :host .calendar-day-wrapper-in-range:not(:nth-child(7n)):has(+ .calendar-day-wrapper-in-range)::before,
413
+ :host .calendar-day-wrapper-in-range:not(:nth-child(7n)):has(+ .calendar-day-wrapper-range-end)::before,
414
+ :host .calendar-day-wrapper-range-start:not(:nth-child(7n)):has(+ .calendar-day-wrapper-in-range)::before,
415
+ :host .calendar-day-wrapper-range-start:not(:nth-child(7n)):has(+ .calendar-day-wrapper-range-end)::before {
416
+ inset-inline-end: -1px;
417
+ }
418
+
419
+ /**
420
+ * A range that continues onto the next week runs the track
421
+ * through the grid padding to the edge of the calendar.
422
+ */
423
+ :host .calendar-day-wrapper-in-range:nth-child(7n)::before,
424
+ :host .calendar-day-wrapper-range-start:nth-child(7n)::before {
425
+ inset-inline-end: calc(var(--range-track-edge-overflow, 0px) * -1);
426
+ }
427
+
428
+ :host .calendar-day-wrapper-in-range:nth-child(7n+1)::before,
429
+ :host .calendar-day-wrapper-range-end:nth-child(7n+1)::before {
430
+ inset-inline-start: calc(var(--range-track-edge-overflow, 0px) * -1);
431
+ }
432
+
433
+ /**
434
+ * When a single day is both the start and end of the range,
435
+ * do not show a track since there is nothing to connect.
436
+ */
437
+ :host .calendar-day-wrapper-range-start.calendar-day-wrapper-range-end::before {
438
+ display: none;
439
+ }
440
+
441
+ /**
442
+ * When the component is disabled, fade the whole grid once instead of
443
+ * fading each day. Fading a day makes it its own compositing group, so
444
+ * the 1px that each day extends toward the next would be painted twice
445
+ * and read as a darker seam. The day buttons drop their own disabled
446
+ * opacity so the grid is the only thing applying it.
447
+ */
448
+ :host(.datetime-disabled.datetime-range) .calendar-month-grid {
449
+ opacity: 0.4;
450
+ }
451
+
452
+ :host(.datetime-disabled.datetime-range) .calendar-month-grid .calendar-day[disabled] {
453
+ opacity: 1;
357
454
  }
358
455
 
359
456
  /**
@@ -980,12 +1077,12 @@ ion-picker {
980
1077
  }
981
1078
 
982
1079
  .calendar-day.calendar-day-active {
983
- background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.2);
1080
+ background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.12);
984
1081
  font-size: min(1.375rem, 35.2px);
985
1082
  }
986
1083
 
987
1084
  :host(.ion-color) .calendar-day.calendar-day-active {
988
- background: rgba(var(--ion-color-base-rgb), 0.2);
1085
+ background: rgba(var(--ion-color-base-rgb), 0.12);
989
1086
  }
990
1087
 
991
1088
  /**
@@ -1035,6 +1132,41 @@ ion-picker {
1035
1132
  color: var(--ion-color-step-300, var(--ion-text-color-step-700, #b3b3b3));
1036
1133
  }
1037
1134
 
1135
+ :host {
1136
+ --range-background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.12);
1137
+ --range-track-height: 40px;
1138
+ --range-track-edge-overflow: 8px;
1139
+ }
1140
+
1141
+ :host(.ion-color) {
1142
+ --range-background: rgba(var(--ion-color-base-rgb), 0.12);
1143
+ }
1144
+
1145
+ /**
1146
+ * The wrapper has `height: 0`, which makes `top: 50%` on the range
1147
+ * track resolve to 0 and pins the track to the top of the cell.
1148
+ * Override to `auto` so the track stays vertically centered. Apply
1149
+ * it to every wrapper in range mode so range rows are not taller
1150
+ * than the other rows.
1151
+ */
1152
+ :host(.datetime-range) .calendar-day-wrapper {
1153
+ height: auto;
1154
+ }
1155
+
1156
+ :host .calendar-day.calendar-day-range-start,
1157
+ :host .calendar-day.calendar-day-range-end {
1158
+ border-radius: 50%;
1159
+ background: var(--ion-color-primary, #0054e9);
1160
+ color: var(--ion-color-primary-contrast, #fff);
1161
+ font-weight: 600;
1162
+ }
1163
+
1164
+ :host(.ion-color) .calendar-day.calendar-day-range-start,
1165
+ :host(.ion-color) .calendar-day.calendar-day-range-end {
1166
+ background: var(--ion-color-base);
1167
+ color: var(--ion-color-contrast);
1168
+ }
1169
+
1038
1170
  :host .datetime-time {
1039
1171
  -webkit-padding-start: 16px;
1040
1172
  padding-inline-start: 16px;