@rdlabo/ionic-theme-ios27 0.1.0-0 → 0.1.0-1

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 (85) hide show
  1. package/README.md +12 -10
  2. package/dist/css/components/ion-action-sheet.css +1 -1
  3. package/dist/css/components/ion-alert.css +1 -1
  4. package/dist/css/components/ion-button.css +1 -1
  5. package/dist/css/components/ion-card.css +1 -1
  6. package/dist/css/components/ion-content.css +1 -1
  7. package/dist/css/components/ion-datetime.css +1 -1
  8. package/dist/css/components/ion-fab.css +1 -1
  9. package/dist/css/components/ion-inputs.css +1 -1
  10. package/dist/css/components/ion-list.css +1 -1
  11. package/dist/css/components/ion-loading.css +1 -1
  12. package/dist/css/components/ion-menu.css +1 -1
  13. package/dist/css/components/ion-modal.css +1 -1
  14. package/dist/css/components/ion-popover.css +1 -1
  15. package/dist/css/components/ion-range.css +1 -1
  16. package/dist/css/components/ion-searchbar.css +1 -1
  17. package/dist/css/components/ion-segment.css +1 -1
  18. package/dist/css/components/ion-tabs.css +1 -1
  19. package/dist/css/components/ion-toast.css +1 -1
  20. package/dist/css/components/ion-toggle.css +1 -1
  21. package/dist/css/components/ion-toolbar.css +1 -1
  22. package/dist/css/ionic-theme-ios27-dark-always.css +1 -0
  23. package/dist/css/ionic-theme-ios27-dark-class.css +1 -0
  24. package/dist/css/ionic-theme-ios27-dark-system.css +1 -0
  25. package/dist/css/ionic-theme-ios27.css +1 -0
  26. package/dist/css/md-remove-ios-class-effect.css +1 -1
  27. package/dist/css/utils/translucent.css +1 -1
  28. package/dist/popover/animations/ios.enter.js +2 -2
  29. package/dist/popover/animations/ios.leave.js +2 -2
  30. package/dist/sheets-of-glass/index.js +2 -2
  31. package/dist/transition/ios.transition.d.ts.map +1 -1
  32. package/dist/transition/ios.transition.js +10 -9
  33. package/docs/eslint.md +1 -1
  34. package/docs/feedback.md +2 -2
  35. package/docs/ios-adaptive.md +90 -0
  36. package/docs/migration.md +6 -83
  37. package/docs/special-markup.md +5 -3
  38. package/docs/using-ion-item-group.md +2 -2
  39. package/package.json +2 -2
  40. package/src/popover/animations/ios.enter.ts +2 -2
  41. package/src/popover/animations/ios.leave.ts +2 -2
  42. package/src/sheets-of-glass/index.ts +2 -2
  43. package/src/styles/components/ion-action-sheet.scss +4 -4
  44. package/src/styles/components/ion-alert.scss +1 -1
  45. package/src/styles/components/ion-button.scss +25 -21
  46. package/src/styles/components/ion-card.scss +1 -1
  47. package/src/styles/components/ion-content.scss +10 -8
  48. package/src/styles/components/ion-datetime.scss +1 -1
  49. package/src/styles/components/ion-fab.scss +11 -9
  50. package/src/styles/components/ion-inputs.scss +2 -2
  51. package/src/styles/components/ion-list.scss +2 -2
  52. package/src/styles/components/ion-loading.scss +1 -1
  53. package/src/styles/components/ion-menu.scss +26 -21
  54. package/src/styles/components/ion-modal.scss +3 -3
  55. package/src/styles/components/ion-picker.scss +1 -1
  56. package/src/styles/components/ion-popover.scss +4 -3
  57. package/src/styles/components/ion-range.scss +2 -2
  58. package/src/styles/components/ion-searchbar.scss +6 -4
  59. package/src/styles/components/ion-segment.scss +8 -8
  60. package/src/styles/components/ion-tabs.scss +13 -13
  61. package/src/styles/components/ion-toast.scss +8 -7
  62. package/src/styles/components/ion-toggle.scss +4 -4
  63. package/src/styles/components/ion-toolbar.scss +13 -12
  64. package/src/styles/default-variables.scss +4 -3
  65. package/src/styles/md-remove-ios-class-effect.scss +2 -2
  66. package/src/styles/utils/api.scss +16 -16
  67. package/src/styles/utils/dark/ion-button.scss +8 -8
  68. package/src/styles/utils/dark/ion-fab.scss +1 -1
  69. package/src/styles/utils/dark/ion-segment.scss +3 -2
  70. package/src/styles/utils/dark/ion-tabs.scss +3 -2
  71. package/src/styles/utils/translucent.scss +21 -16
  72. package/src/transition/ios.transition.ts +12 -9
  73. package/dist/css/ionic-theme-ios26-dark-always.css +0 -1
  74. package/dist/css/ionic-theme-ios26-dark-class.css +0 -1
  75. package/dist/css/ionic-theme-ios26-dark-system.css +0 -1
  76. package/dist/css/ionic-theme-ios26.css +0 -1
  77. package/dist/docs.json +0 -234
  78. package/dist/focus-controller /index.d.ts +0 -6
  79. package/dist/focus-controller /index.d.ts.map +0 -1
  80. package/dist/focus-controller /index.js +0 -62
  81. package/docs/ios-18.md +0 -16
  82. /package/src/styles/{ionic-theme-ios26-dark-always.scss → ionic-theme-ios27-dark-always.scss} +0 -0
  83. /package/src/styles/{ionic-theme-ios26-dark-class.scss → ionic-theme-ios27-dark-class.scss} +0 -0
  84. /package/src/styles/{ionic-theme-ios26-dark-system.scss → ionic-theme-ios27-dark-system.scss} +0 -0
  85. /package/src/styles/{ionic-theme-ios26.scss → ionic-theme-ios27.scss} +0 -0
@@ -1,20 +1,23 @@
1
1
  @use '../utils/api';
2
2
 
3
- ion-split-pane.ios:not(.ios26-disabled) {
4
- --side-max-width: var(--ios26-menu-width);
3
+ ion-split-pane.ios:not(.ios-theme-disabled, .ios26-disabled) {
4
+ --side-max-width: var(--ios-theme-menu-width, var(--ios26-menu-width));
5
5
  }
6
6
 
7
- ion-split-pane.ios:not(.ios26-disabled).split-pane-visible:has(ion-menu.menu-pane-visible) {
7
+ ion-split-pane.ios:not(.ios-theme-disabled, .ios26-disabled).split-pane-visible:has(ion-menu.menu-pane-visible) {
8
8
  .split-pane-main {
9
- ion-tab-bar.ios:not(.ios26-disabled) {
9
+ ion-tab-bar.ios:not(.ios-theme-disabled, .ios26-disabled) {
10
10
  width: calc(
11
11
  100% - calc(18px + var(--ion-safe-area-left, 0px)) - calc(18px + var(--ion-safe-area-left, 0px)) - 60px -
12
- 12px - var(--ios26-menu-width)
12
+ 12px - var(--ios-theme-menu-width, var(--ios26-menu-width))
13
13
  );
14
14
 
15
15
  &:has(:nth-child(5)) {
16
16
  width: calc(
17
- 100% - calc(18px + var(--ion-safe-area-left, 0px)) - calc(18px + var(--ion-safe-area-left, 0px)) - var(--ios26-menu-width)
17
+ 100% - calc(18px + var(--ion-safe-area-left, 0px)) - calc(18px + var(--ion-safe-area-left, 0px)) - var(
18
+ --ios-theme-menu-width,
19
+ var(--ios26-menu-width)
20
+ )
18
21
  );
19
22
  }
20
23
  }
@@ -25,62 +28,62 @@ ion-split-pane.ios:not(.ios26-disabled).split-pane-visible:has(ion-menu.menu-pan
25
28
  /*
26
29
  * 4px: https://github.com/ionic-team/ionic-framework/blob/main/core/src/components/toolbar/toolbar.ios.vars.scss#L28-L32
27
30
  */
28
- --padding-start: calc(var(--ios26-menu-width) + 4px);
31
+ --padding-start: calc(var(--ios-theme-menu-width, var(--ios26-menu-width)) + 4px);
29
32
  ion-title.title-default {
30
33
  /*
31
34
  * 90px: https://github.com/ionic-team/ionic-framework/blob/main/core/src/components/title/title.ios.scss#L8
32
35
  */
33
- padding-left: calc(90px + var(--ios26-menu-width));
36
+ padding-left: calc(90px + var(--ios-theme-menu-width, var(--ios26-menu-width)));
34
37
  }
35
38
  }
36
39
  ion-content {
37
- --padding-start: var(--ios26-menu-width);
40
+ --padding-start: var(--ios-theme-menu-width, var(--ios26-menu-width));
38
41
  ion-header ion-toolbar {
39
42
  --padding-start: 4px;
40
43
  }
41
44
  }
42
45
  ion-footer ion-toolbar {
43
- --padding-start: var(--ios26-menu-width);
46
+ --padding-start: var(--ios-theme-menu-width, var(--ios26-menu-width));
44
47
  }
45
- ion-tab-bar.ios:not(.ios26-disabled) {
48
+ ion-tab-bar.ios:not(.ios-theme-disabled, .ios26-disabled) {
46
49
  &[slot='bottom'] {
47
- left: calc(16px + var(--ion-safe-area-left, 0px) + var(--ios26-menu-width));
50
+ left: calc(16px + var(--ion-safe-area-left, 0px) + var(--ios-theme-menu-width, var(--ios26-menu-width)));
48
51
  }
49
52
  }
50
53
  }
51
54
  }
52
55
 
53
- &:has(ion-menu.ios:not(.ios26-disabled).menu-side-end) {
56
+ &:has(ion-menu.ios:not(.ios-theme-disabled, .ios26-disabled).menu-side-end) {
54
57
  .split-pane-main {
55
58
  ion-header ion-toolbar {
56
59
  /*
57
60
  * 4px: https://github.com/ionic-team/ionic-framework/blob/main/core/src/components/toolbar/toolbar.ios.vars.scss#L28-L32
58
61
  */
59
- --padding-end: calc(var(--ios26-menu-width) + 4px);
62
+ --padding-end: calc(var(--ios-theme-menu-width, var(--ios26-menu-width)) + 4px);
60
63
  ion-title.title-default {
61
64
  /*
62
65
  * 90px: https://github.com/ionic-team/ionic-framework/blob/main/core/src/components/title/title.ios.scss#L8
63
66
  */
64
- padding-right: calc(90px + var(--ios26-menu-width));
67
+ padding-right: calc(90px + var(--ios-theme-menu-width, var(--ios26-menu-width)));
65
68
  }
66
69
  }
67
70
  ion-content {
68
- --padding-end: var(--ios26-menu-width);
71
+ --padding-end: var(--ios-theme-menu-width, var(--ios26-menu-width));
69
72
  ion-header ion-toolbar {
70
73
  --padding-start: 4px;
71
74
  }
72
75
  }
73
76
  ion-footer ion-toolbar {
74
- --padding-end: var(--ios26-menu-width);
77
+ --padding-end: var(--ios-theme-menu-width, var(--ios26-menu-width));
75
78
  }
76
79
  }
77
80
  }
78
81
  }
79
82
 
80
- ion-menu.ios:not(.ios26-disabled) {
83
+ ion-menu.ios:not(.ios-theme-disabled, .ios26-disabled) {
81
84
  --border: none;
82
85
  --background: transparent;
83
- --max-width: var(--ios26-menu-width);
86
+ --max-width: var(--ios-theme-menu-width, var(--ios26-menu-width));
84
87
  position: absolute;
85
88
  top: 0;
86
89
  z-index: 999;
@@ -89,7 +92,7 @@ ion-menu.ios:not(.ios26-disabled) {
89
92
  left: 0;
90
93
  }
91
94
  &.menu-side-end {
92
- left: calc(100vw - var(--ios26-menu-width));
95
+ left: calc(100vw - var(--ios-theme-menu-width, var(--ios26-menu-width)));
93
96
  }
94
97
 
95
98
  &::part(backdrop) {
@@ -99,10 +102,12 @@ ion-menu.ios:not(.ios26-disabled) {
99
102
  ion-content {
100
103
  --background: transparent;
101
104
  --ios26-content-box-shadow-rgb: transparent;
105
+ --ios-theme-content-box-shadow-rgb: var(--ios26-content-box-shadow-rgb);
102
106
 
103
107
  &::part(scroll) {
104
108
  @include api.glass-background;
105
- margin: calc(var(--ios26-floating-safe-area-top) + 6px) calc(16px + var(--ion-safe-area-right)) var(--ios26-floating-safe-area-bottom)
109
+ margin: calc(var(--ios-theme-floating-safe-area-top, var(--ios26-floating-safe-area-top)) + 6px)
110
+ calc(16px + var(--ion-safe-area-right)) var(--ios-theme-floating-safe-area-bottom, var(--ios26-floating-safe-area-bottom))
106
111
  calc(12px + var(--ion-safe-area-left));
107
112
  border-radius: 24px;
108
113
  }
@@ -1,6 +1,6 @@
1
1
  @use '../utils/api';
2
2
 
3
- ion-modal.ios:not(.ios26-disabled) {
3
+ ion-modal.ios:not(.ios-theme-disabled, .ios26-disabled) {
4
4
  --backdrop-opacity: 0.2;
5
5
 
6
6
  &::part(handle) {
@@ -22,7 +22,7 @@ ion-modal.ios:not(.ios26-disabled) {
22
22
  &.modal-card {
23
23
  /**
24
24
  * IonicでCardModalのborder-radiusはハードコーディングされています。
25
- * また、iOS26のドキュメントで見つからないため、サポートは行いません。
25
+ * また、iOS27のドキュメントで見つからないため、サポートは行いません。
26
26
  * https://github.com/ionic-team/ionic-framework/blob/3b80473f2fd5ad4da5a9f5d66f783a69909c8965/core/src/components/modal/animations/ios.enter.ts#L82-L83
27
27
  */
28
28
  }
@@ -34,7 +34,7 @@ ion-modal.ios:not(.ios26-disabled) {
34
34
 
35
35
  &.modal-sheet {
36
36
  --border-radius: 30px;
37
- --background: rgba(var(--ios26-glass-background-rgb), 1);
37
+ --background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 1);
38
38
  &::part(content) {
39
39
  @include api.glass-background($opacity: 1, $include-background: false);
40
40
  }
@@ -1,4 +1,4 @@
1
1
  @use '../utils/api';
2
2
 
3
- ion-picker.ios:not(.ios26-disabled) {
3
+ ion-picker.ios:not(.ios-theme-disabled, .ios26-disabled) {
4
4
  }
@@ -1,10 +1,11 @@
1
1
  @use '../utils/api';
2
2
 
3
- ion-popover.ios:not(.ios26-disabled) {
3
+ ion-popover.ios:not(.ios-theme-disabled, .ios26-disabled) {
4
4
  --backdrop-opacity: 0.2;
5
- --background: rgba(var(--ios26-glass-background-rgb), 0.72);
5
+ --background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.72);
6
6
  --box-shadow:
7
- inset 0 0 8px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), 0.2), 0 0 10px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), 0.82);
7
+ inset 0 0 8px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), 0.2),
8
+ 0 0 10px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), 0.82);
8
9
  &::part(arrow) {
9
10
  display: none;
10
11
  ::after {
@@ -5,7 +5,7 @@
5
5
  -webkit-transform: scale(1.56, 1.47) translateX(calc(#{$translate-x} * -0.1)) translateZ(0);
6
6
  }
7
7
 
8
- ion-range.ios:not(.ios26-disabled) {
8
+ ion-range.ios:not(.ios-theme-disabled, .ios26-disabled) {
9
9
  --knob-size: 20px;
10
10
  --knob-width: 38px;
11
11
  --knob-border-radius: 24px;
@@ -36,7 +36,7 @@ ion-range.ios:not(.ios26-disabled) {
36
36
  }
37
37
 
38
38
  &:not(.range-dual-knobs).range-pressed {
39
- --knob-background: rgba(var(--ios26-glass-background-rgb), 0.1);
39
+ --knob-background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.1);
40
40
  --knob-box-shadow: 0 0.5px 4px rgba(0, 0, 0, 0.12), 0 6px 4px rgba(0, 0, 0, 0.05), inset 0.4px 0.4px 1px 0 var(--bar-background-active);
41
41
 
42
42
  &::part(knob) {
@@ -1,7 +1,7 @@
1
1
  @use '../utils/api';
2
2
 
3
3
  ion-modal.ios {
4
- ion-searchbar:not(.ios26-disabled) {
4
+ ion-searchbar:not(.ios-theme-disabled, .ios26-disabled) {
5
5
  .searchbar-input-container {
6
6
  input.searchbar-input {
7
7
  // Modal表示でのアイコン非表示の不具合の対応
@@ -11,7 +11,7 @@ ion-modal.ios {
11
11
  }
12
12
  }
13
13
 
14
- ion-searchbar.ios:not(.ios26-disabled):not(.searchbar-classic) {
14
+ ion-searchbar.ios:not(.ios-theme-disabled, .ios26-disabled):not(.searchbar-classic) {
15
15
  min-height: 60px;
16
16
  padding: 0;
17
17
 
@@ -45,10 +45,12 @@ ion-searchbar.ios:not(.ios26-disabled):not(.searchbar-classic) {
45
45
  /**
46
46
  * add searchbar-classic
47
47
  */
48
- ion-toolbar.ios:not(.ios26-disabled):has(ion-searchbar.searchbar-classic.ios:not(.ios26-disabled)) {
48
+ ion-toolbar.ios:not(.ios-theme-disabled, .ios26-disabled):has(
49
+ ion-searchbar.searchbar-classic.ios:not(.ios-theme-disabled, .ios26-disabled)
50
+ ) {
49
51
  --min-height: auto;
50
52
  }
51
- ion-searchbar.ios:not(.ios26-disabled).searchbar-classic {
53
+ ion-searchbar.ios:not(.ios-theme-disabled, .ios26-disabled).searchbar-classic {
52
54
  padding-bottom: 12px;
53
55
  min-height: auto;
54
56
  .searchbar-input-container input.searchbar-input {
@@ -1,11 +1,11 @@
1
1
  @use '../utils/api';
2
2
 
3
- ion-segment.ios:not(.ios26-disabled) {
3
+ ion-segment.ios:not(.ios-theme-disabled, .ios26-disabled) {
4
4
  @include api.glass-background;
5
5
  min-height: 48px;
6
6
  border-radius: 25px;
7
7
 
8
- transition: transform var(--ios26-activated-transition-duration) ease-out;
8
+ transition: transform var(--ios-theme-activated-transition-duration, var(--ios26-activated-transition-duration)) ease-out;
9
9
 
10
10
  // will-change is optimized to only apply when needed for performance
11
11
  &.segment-activated,
@@ -28,7 +28,7 @@ ion-segment.ios:not(.ios26-disabled) {
28
28
  }
29
29
  }
30
30
 
31
- &:not(.ios26-enable-gesture).segment-activated {
31
+ &:not(.ios27-enable-gesture).segment-activated {
32
32
  transform: scale(1.1) translateZ(0);
33
33
  -webkit-transform: scale(1.1) translateZ(0);
34
34
  ion-segment-button {
@@ -47,7 +47,7 @@ ion-segment.ios:not(.ios26-disabled) {
47
47
  }
48
48
  }
49
49
 
50
- &.ios26-enable-gesture {
50
+ &.ios27-enable-gesture {
51
51
  &:has(ion-segment-button.ion-activated) {
52
52
  transform: scale(1.1) translateZ(0);
53
53
  -webkit-transform: scale(1.1) translateZ(0);
@@ -65,7 +65,7 @@ ion-segment.ios:not(.ios26-disabled) {
65
65
  }
66
66
  }
67
67
  }
68
- &.ios26-animated {
68
+ &.ios27-animated {
69
69
  ion-segment-button {
70
70
  --indicator-color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0);
71
71
  }
@@ -87,7 +87,7 @@ ion-segment.ios:not(.ios26-disabled) {
87
87
  min-height: 24px;
88
88
  }
89
89
 
90
- &.ios26-enable-gesture {
90
+ &.ios27-enable-gesture {
91
91
  &:has(ion-segment-button.ion-activated) {
92
92
  transform: scale(1) translateZ(0);
93
93
  -webkit-transform: scale(1) translateZ(0);
@@ -105,7 +105,7 @@ ion-segment.ios:not(.ios26-disabled) {
105
105
  }
106
106
  }
107
107
  }
108
- &.ios26-animated {
108
+ &.ios27-animated {
109
109
  ion-segment-button {
110
110
  --indicator-color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0);
111
111
  }
@@ -114,7 +114,7 @@ ion-segment.ios:not(.ios26-disabled) {
114
114
  }
115
115
  }
116
116
 
117
- ion-segment-button.ios:not(.ios26-disabled) {
117
+ ion-segment-button.ios:not(.ios-theme-disabled, .ios26-disabled) {
118
118
  --border-width: 0;
119
119
  --indicator-box-shadow: none;
120
120
  --indicator-color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.06);
@@ -1,6 +1,6 @@
1
1
  @use '../utils/api';
2
2
 
3
- ion-tab-bar.ios:not(.ios26-disabled) {
3
+ ion-tab-bar.ios:not(.ios-theme-disabled, .ios26-disabled) {
4
4
  @include api.glass-background;
5
5
  z-index: 2;
6
6
 
@@ -9,13 +9,13 @@ ion-tab-bar.ios:not(.ios26-disabled) {
9
9
 
10
10
  &[slot='top'] {
11
11
  position: absolute;
12
- top: var(--ios26-floating-safe-area-top);
12
+ top: var(--ios-theme-floating-safe-area-top, var(--ios26-floating-safe-area-top));
13
13
  right: calc(16px + var(--ion-safe-area-right, 0px));
14
14
  }
15
15
 
16
16
  &[slot='bottom'] {
17
17
  position: absolute;
18
- bottom: var(--ios26-floating-safe-area-bottom);
18
+ bottom: var(--ios-theme-floating-safe-area-bottom, var(--ios26-floating-safe-area-bottom));
19
19
  left: calc(16px + var(--ion-safe-area-left, 0px));
20
20
  }
21
21
 
@@ -31,7 +31,7 @@ ion-tab-bar.ios:not(.ios26-disabled) {
31
31
  }
32
32
  padding: 2px 2px;
33
33
 
34
- transition: transform var(--ios26-activated-transition-duration) ease-out;
34
+ transition: transform var(--ios-theme-activated-transition-duration, var(--ios26-activated-transition-duration)) ease-out;
35
35
 
36
36
  // will-change is optimized to only apply when needed for performance
37
37
  &:has(ion-tab-button.ion-activated) {
@@ -53,9 +53,9 @@ ion-tab-bar.ios:not(.ios26-disabled) {
53
53
  /**
54
54
  * effectが有効な場合、effectでスタイリングするため不要
55
55
  */
56
- &.ios26-enable-gesture.ios26-animated {
56
+ &.ios27-enable-gesture.ios27-animated {
57
57
  ion-tab-button.tab-selected::part(native) {
58
- background: rgba(var(--ios26-button-color-selected-rgb), 0);
58
+ background: rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), 0);
59
59
  }
60
60
  ion-tab-button.ion-activated {
61
61
  ion-label,
@@ -66,19 +66,19 @@ ion-tab-bar.ios:not(.ios26-disabled) {
66
66
  }
67
67
  }
68
68
 
69
- ion-tab-button.ios:not(.ios26-disabled) {
69
+ ion-tab-button.ios:not(.ios-theme-disabled, .ios26-disabled) {
70
70
  ion-icon {
71
71
  font-size: 26px;
72
72
  }
73
73
  ion-label,
74
74
  ion-icon {
75
75
  transition:
76
- filter var(--ios26-activated-transition-duration) ease,
77
- color var(--ios26-activated-transition-duration) ease;
76
+ filter var(--ios-theme-activated-transition-duration, var(--ios26-activated-transition-duration)) ease,
77
+ color var(--ios-theme-activated-transition-duration, var(--ios26-activated-transition-duration)) ease;
78
78
  }
79
- background: rgba(var(--ios26-glass-background-rgb), 0);
79
+ background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0);
80
80
  height: auto;
81
- transition: transform var(--ios26-activated-transition-duration) ease;
81
+ transition: transform var(--ios-theme-activated-transition-duration, var(--ios26-activated-transition-duration)) ease;
82
82
  &::part(native) {
83
83
  overflow: visible;
84
84
  min-height: 56px;
@@ -97,8 +97,8 @@ ion-tab-button.ios:not(.ios26-disabled) {
97
97
 
98
98
  &.tab-selected {
99
99
  &::part(native) {
100
- background: rgba(var(--ios26-button-color-selected-rgb), 0.095);
101
- transition: background var(--ios26-activated-transition-duration) ease;
100
+ background: rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), 0.095);
101
+ transition: background var(--ios-theme-activated-transition-duration, var(--ios26-activated-transition-duration)) ease;
102
102
  }
103
103
  }
104
104
 
@@ -1,21 +1,22 @@
1
1
  @use '../utils/api';
2
2
 
3
- ion-toast.ios:not(.ios26-disabled) {
4
- --background: rgba(var(--ios26-glass-background-rgb), 0.72);
3
+ ion-toast.ios:not(.ios-theme-disabled, .ios26-disabled) {
4
+ --background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.72);
5
5
  --border-radius: 24px;
6
6
  --border-style: solid;
7
7
  --border-width: 0.5px;
8
8
  --box-shadow:
9
- inset 0 0 8px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), 0.2), 0 0 10px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), 0.82);
9
+ inset 0 0 8px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), 0.2),
10
+ 0 0 10px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), 0.82);
10
11
  --start: 16px;
11
12
  --end: 16px;
12
13
 
13
14
  &::part(wrapper) {
14
15
  @include api.glass-background($include-background: false, $include-box-shadow: false, $include-border: false);
15
- border-top-color: rgba(var(--ios26-glass-border-color-rgb), 1);
16
- border-right-color: rgba(var(--ios26-glass-border-color-rgb), 0.8);
17
- border-bottom-color: rgba(var(--ios26-glass-border-color-rgb), 1);
18
- border-left-color: rgba(var(--ios26-glass-border-color-rgb), 0.6);
16
+ border-top-color: rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 1);
17
+ border-right-color: rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 0.8);
18
+ border-bottom-color: rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 1);
19
+ border-left-color: rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 0.6);
19
20
  }
20
21
 
21
22
  &.ion-color {
@@ -4,7 +4,7 @@
4
4
  * Adjustments have been made to prevent the right edge from being cut off within the ion-item.
5
5
  * When the native-inner part be added to the ion-item, it will be removed.
6
6
  */
7
- ion-item.ios:not(.ios26-disabled) ion-toggle.ios:not(.ios26-disabled) {
7
+ ion-item.ios:not(.ios-theme-disabled, .ios26-disabled) ion-toggle.ios:not(.ios-theme-disabled, .ios26-disabled) {
8
8
  &.toggle-checked.toggle-activated::part(track) {
9
9
  transform-origin: left;
10
10
  transform: scaleX(0.894) translateZ(0);
@@ -16,7 +16,7 @@ ion-item.ios:not(.ios26-disabled) ion-toggle.ios:not(.ios26-disabled) {
16
16
  }
17
17
  }
18
18
 
19
- ion-toggle.ios:not(.ios26-disabled) {
19
+ ion-toggle.ios:not(.ios-theme-disabled, .ios26-disabled) {
20
20
  --handle-width: 38px;
21
21
  --handle-height: 24px;
22
22
  --handle-max-width: none;
@@ -48,8 +48,8 @@ ion-toggle.ios:not(.ios26-disabled) {
48
48
  @include api.glass-background($opacity: 0.1, $blur: 0.5px, $saturate: 120%, $include-background: false, $include-box-shadow: false);
49
49
  }
50
50
  &.toggle-activated {
51
- --handle-background: rgba(var(--ios26-glass-background-rgb), 0.1);
52
- --handle-background-checked: rgba(var(--ios26-glass-background-rgb), 0.1);
51
+ --handle-background: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.1);
52
+ --handle-background-checked: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.1);
53
53
  --handle-box-shadow: inset 0 0 8px 0 var(--track-background);
54
54
  }
55
55
  &.ion-color.toggle-checked.toggle-activated {
@@ -6,34 +6,35 @@
6
6
  * padding-top: var(--ion-safe-area-top, 0);
7
7
  * }
8
8
  */
9
- ion-header.ios:not(.ios26-disabled) ion-toolbar:not(.ios26-disabled):first-of-type {
9
+ ion-header.ios:not(.ios-theme-disabled, .ios26-disabled) ion-toolbar:not(.ios-theme-disabled, .ios26-disabled):first-of-type {
10
10
  padding-top: max(calc(var(--ion-safe-area-top) - 12px), 4px);
11
11
  }
12
12
 
13
- ion-modal.ios:not(.ios26-disabled).modal-card,
14
- ion-modal.ios:not(.ios26-disabled).modal-sheet {
15
- ion-header.ios:not(.ios26-disabled) ion-toolbar.ios:not(.ios26-disabled):first-of-type {
13
+ ion-modal.ios:not(.ios-theme-disabled, .ios26-disabled).modal-card,
14
+ ion-modal.ios:not(.ios-theme-disabled, .ios26-disabled).modal-sheet {
15
+ ion-header.ios:not(.ios-theme-disabled, .ios26-disabled) ion-toolbar.ios:not(.ios-theme-disabled, .ios26-disabled):first-of-type {
16
16
  padding-top: 6px;
17
17
  }
18
18
  }
19
19
 
20
- ion-header.ios.header-collapse-condense:not(.ios26-disabled) ion-toolbar:not(.ios26-disabled):first-of-type {
20
+ ion-header.ios.header-collapse-condense:not(.ios-theme-disabled, .ios26-disabled)
21
+ ion-toolbar:not(.ios-theme-disabled, .ios26-disabled):first-of-type {
21
22
  padding-top: 0;
22
23
  }
23
24
 
24
- ion-toolbar.ios:not(.toolbar-title-large):not(.ios26-disabled):not(:has(ion-segment.segment-expand)) {
25
+ ion-toolbar.ios:not(.toolbar-title-large):not(.ios-theme-disabled, .ios26-disabled):not(:has(ion-segment.segment-expand)) {
25
26
  --min-height: 68px;
26
27
  }
27
28
 
28
- ion-header.ios:not(.ios26-disabled):not(.header-collapse-condense):not(:where(ion-modal *))
29
- > ion-toolbar.ios:not(.ios26-disabled):not(.toolbar-title-large):not(.toolbar-searchbar):not(
29
+ ion-header.ios:not(.ios-theme-disabled, .ios26-disabled):not(.header-collapse-condense):not(:where(ion-modal *))
30
+ > ion-toolbar.ios:not(.ios-theme-disabled, .ios26-disabled):not(.toolbar-title-large):not(.toolbar-searchbar):not(
30
31
  :has(ion-segment.segment-expand)
31
32
  ):first-of-type {
32
33
  padding-top: max(calc(var(--ion-safe-area-top) - 10px), 6px);
33
34
  --min-height: 64px;
34
35
  }
35
36
 
36
- ion-toolbar.ios:not(.ios26-disabled).toolbar-searchbar {
37
+ ion-toolbar.ios:not(.ios-theme-disabled, .ios26-disabled).toolbar-searchbar {
37
38
  *[slot='start'],
38
39
  *[slot='end'] {
39
40
  align-self: center;
@@ -42,7 +43,7 @@ ion-toolbar.ios:not(.ios26-disabled).toolbar-searchbar {
42
43
  ion-buttons[slot='start'] {
43
44
  margin-right: 6px;
44
45
  }
45
- ion-searchbar.ios:not(.ios26-disabled) {
46
+ ion-searchbar.ios:not(.ios-theme-disabled, .ios26-disabled) {
46
47
  .searchbar-input-container {
47
48
  margin: 0 12px 0 6px;
48
49
  }
@@ -52,7 +53,7 @@ ion-toolbar.ios:not(.ios26-disabled).toolbar-searchbar {
52
53
  ion-buttons[slot='end'] {
53
54
  margin-left: 6px;
54
55
  }
55
- ion-searchbar.ios:not(.ios26-disabled) {
56
+ ion-searchbar.ios:not(.ios-theme-disabled, .ios26-disabled) {
56
57
  .searchbar-input-container {
57
58
  margin: 0 6px 0 12px;
58
59
  }
@@ -60,7 +61,7 @@ ion-toolbar.ios:not(.ios26-disabled).toolbar-searchbar {
60
61
  }
61
62
  }
62
63
 
63
- ion-toolbar.ios:not(.ios26-disabled) {
64
+ ion-toolbar.ios:not(.ios-theme-disabled, .ios26-disabled) {
64
65
  ion-buttons {
65
66
  margin-left: 12px;
66
67
  margin-right: 12px;
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * @naming
3
- * prefix: ios26
3
+ * prefix: ios-theme
4
4
  * target-element: tab-button
5
5
  * target css property: color
6
6
  * status: selected
7
7
  * additional information: rgb
8
8
  */
9
9
 
10
+ // Deprecated --ios26-* defaults back the --ios-theme-* fallbacks.
10
11
  :root {
11
12
  --ios26-floating-safe-area-top: max(10px, var(--ion-safe-area-top, 0px));
12
13
  --ios26-floating-safe-area-bottom: max(10px, calc(var(--ion-safe-area-bottom, 0px) - 12px));
@@ -22,9 +23,9 @@
22
23
 
23
24
  /**
24
25
  * `--ios26-color-background-rgb` is deprecated.
25
- * You should replace to '--ios26-content-box-shadow-rgb'.
26
+ * Use '--ios-theme-content-box-shadow-rgb'.
26
27
  * This variable can also be defined in root, but if you want to set multiple background colors individually, it is easier to set them as follows.
27
- * ion-content { --ios26-content-box-shadow-rgb: var(--ion-color-base-rgb); }
28
+ * ion-content { --ios-theme-content-box-shadow-rgb: var(--ion-color-base-rgb); }
28
29
  */
29
30
  --ios26-content-box-shadow-rgb: var(--ion-color-base-rgb, var(--ion-background-color-rgb, 255, 255, 255));
30
31
 
@@ -1,9 +1,9 @@
1
1
  ion-buttons.md {
2
2
  /**
3
- * ion-buttons.ios26-disabled > ion-button.button-default is for ios26 structure.
3
+ * ion-buttons.ios-theme-disabled > ion-button.button-default is for ios27 structure.
4
4
  * for .md, remove button-default styles. Will be button-clear.
5
5
  */
6
- ion-button.md:not(.ios26-disabled).button-default {
6
+ ion-button.md:not(.ios-theme-disabled, .ios26-disabled).button-default {
7
7
  // copy .button-clear
8
8
  --color: initial;
9
9
  --background: transparent;
@@ -22,8 +22,8 @@ $_glass-surface: linear-gradient(
22
22
  $opacity: 0.72,
23
23
  $blur: 2px,
24
24
  $saturate: 360%,
25
- $background-rgb: var(--ios26-glass-background-rgb),
26
- $border-color-rgb: var(--ios26-glass-border-color-rgb),
25
+ $background-rgb: var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)),
26
+ $border-color-rgb: var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)),
27
27
  $include-background: true,
28
28
  $include-box-shadow: true,
29
29
  $include-border: true,
@@ -40,10 +40,10 @@ $_glass-surface: linear-gradient(
40
40
  @if $include-box-shadow {
41
41
  box-shadow:
42
42
  inset 0 0 0 0.5px rgba($border-color-rgb, 0.6),
43
- inset 0 0 1px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), 0.18),
43
+ inset 0 0 1px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), 0.18),
44
44
  inset 0 1px 2px 0 rgba($border-color-rgb, 0.8),
45
45
  inset 0 -1px 2px 0 rgba($border-color-rgb, 0.5),
46
- 0 0.5px 1px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), $shadow-opacity);
46
+ 0 0.5px 1px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), $shadow-opacity);
47
47
  }
48
48
  @if $include-border {
49
49
  border: 0.5px solid;
@@ -84,14 +84,14 @@ $_glass-surface: linear-gradient(
84
84
  }
85
85
 
86
86
  @mixin glass-background-button-activated {
87
- background-color: rgba(var(--ios26-glass-background-rgb), 0.96);
87
+ background-color: rgba(var(--ios-theme-glass-background-rgb, var(--ios26-glass-background-rgb)), 0.96);
88
88
  border-color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.12) rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.32)
89
89
  rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.16) rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.28);
90
90
  box-shadow:
91
- inset 0 0 0 0.5px rgba(var(--ios26-glass-border-color-rgb), 0.95),
92
- inset 0 1px 3px 0 rgba(var(--ios26-glass-border-color-rgb), 0.85),
93
- inset 0 -1px 2px 0 rgba(var(--ios26-glass-border-color-rgb), 0.6),
94
- 0 0.5px 1px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), 0.12);
91
+ inset 0 0 0 0.5px rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 0.95),
92
+ inset 0 1px 3px 0 rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 0.85),
93
+ inset 0 -1px 2px 0 rgba(var(--ios-theme-glass-border-color-rgb, var(--ios26-glass-border-color-rgb)), 0.6),
94
+ 0 0.5px 1px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), 0.12);
95
95
  }
96
96
 
97
97
  @mixin glass-background-button-activated-dark(
@@ -102,18 +102,18 @@ $_glass-surface: linear-gradient(
102
102
  $include-box-shadow: true
103
103
  ) {
104
104
  @if $include-background {
105
- background: rgba(var(--ios26-button-color-selected-rgb), $opacity);
105
+ background: rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), $opacity);
106
106
  } @else {
107
- background-color: rgba(var(--ios26-button-color-selected-rgb), $opacity);
107
+ background-color: rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), $opacity);
108
108
  }
109
109
  backdrop-filter: blur($blur) saturate($saturate);
110
110
  @if $include-box-shadow {
111
- box-shadow: inset 0 0 16px 0 rgba(var(--ios26-glass-box-shadow-color-rgb), 0.55);
111
+ box-shadow: inset 0 0 16px 0 rgba(var(--ios-theme-glass-box-shadow-color-rgb, var(--ios26-glass-box-shadow-color-rgb)), 0.55);
112
112
  }
113
- border-top: 0.8px solid rgba(var(--ios26-button-color-selected-rgb), 0.8);
114
- border-right: 0.8px solid rgba(var(--ios26-button-color-selected-rgb), 0.4);
115
- border-bottom: 0.8px solid rgba(var(--ios26-button-color-selected-rgb), 0.8);
116
- border-left: 0.8px solid rgba(var(--ios26-button-color-selected-rgb), 0.6);
113
+ border-top: 0.8px solid rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), 0.8);
114
+ border-right: 0.8px solid rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), 0.4);
115
+ border-bottom: 0.8px solid rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), 0.8);
116
+ border-left: 0.8px solid rgba(var(--ios-theme-button-color-selected-rgb, var(--ios26-button-color-selected-rgb)), 0.6);
117
117
  background-image: none;
118
118
  background-clip: border-box;
119
119
  background-origin: padding-box;