@ionic/core 8.2.3-dev.11723022900.1196a7bf → 8.2.3-dev.11724326037.1eacfaff

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 (96) hide show
  1. package/components/button.js +7 -6
  2. package/components/ion-card-content.js +5 -5
  3. package/components/ion-card-header.js +4 -4
  4. package/components/ion-card-subtitle.js +4 -4
  5. package/components/ion-card.js +3 -3
  6. package/components/ion-input-password-toggle.js +11 -7
  7. package/components/item.js +11 -4
  8. package/components/ripple-effect.js +15 -5
  9. package/components/spinner.js +4 -5
  10. package/dist/cjs/ion-button_2.cjs.entry.js +6 -5
  11. package/dist/cjs/ion-card_5.cjs.entry.js +16 -16
  12. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +11 -7
  13. package/dist/cjs/ion-item_8.cjs.entry.js +11 -4
  14. package/dist/cjs/ion-ripple-effect.cjs.entry.js +14 -4
  15. package/dist/cjs/ion-spinner.cjs.entry.js +3 -4
  16. package/dist/cjs/ionic.cjs.js +1 -1
  17. package/dist/cjs/loader.cjs.js +1 -1
  18. package/dist/collection/components/button/button.ionic.css +346 -211
  19. package/dist/collection/components/button/button.ios.css +87 -20
  20. package/dist/collection/components/button/button.js +4 -3
  21. package/dist/collection/components/button/button.md.css +87 -20
  22. package/dist/collection/components/button/test/basic/button.e2e.js +3 -3
  23. package/dist/collection/components/button/test/clear/button.e2e.js +1 -1
  24. package/dist/collection/components/button/test/outline/button.e2e.js +1 -1
  25. package/dist/collection/components/card/card.ionic.css +61 -10
  26. package/dist/collection/components/card/card.ios.css +37 -12
  27. package/dist/collection/components/card/card.md.css +37 -12
  28. package/dist/collection/components/card-content/card-content.ionic.css +92 -0
  29. package/dist/collection/components/card-content/card-content.ios.css +4 -1
  30. package/dist/collection/components/card-content/card-content.js +3 -3
  31. package/dist/collection/components/card-content/card-content.md.css +4 -1
  32. package/dist/collection/components/card-header/card-header.ionic.css +89 -0
  33. package/dist/collection/components/card-header/card-header.ios.css +15 -15
  34. package/dist/collection/components/card-header/card-header.js +4 -4
  35. package/dist/collection/components/card-header/card-header.md.css +15 -15
  36. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +148 -0
  37. package/dist/collection/components/card-subtitle/card-subtitle.js +4 -4
  38. package/dist/collection/components/card-title/card-title.ios.css +61 -0
  39. package/dist/collection/components/card-title/card-title.md.css +61 -0
  40. package/dist/collection/components/input-password-toggle/input-password-toggle.common.css +61 -0
  41. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +137 -0
  42. package/dist/collection/components/input-password-toggle/input-password-toggle.js +9 -7
  43. package/dist/collection/components/input-password-toggle/test/basic/input-password-toggle.e2e.js +1 -1
  44. package/dist/collection/components/item/item.ionic.css +12 -0
  45. package/dist/collection/components/item/item.js +10 -3
  46. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +154 -0
  47. package/dist/collection/components/ripple-effect/ripple-effect.js +7 -3
  48. package/dist/collection/components/spinner/spinner.js +4 -5
  49. package/dist/docs.json +157 -1
  50. package/dist/esm/ion-button_2.entry.js +7 -6
  51. package/dist/esm/ion-card_5.entry.js +16 -16
  52. package/dist/esm/ion-input-password-toggle.entry.js +11 -7
  53. package/dist/esm/ion-item_8.entry.js +11 -4
  54. package/dist/esm/ion-ripple-effect.entry.js +14 -4
  55. package/dist/esm/ion-spinner.entry.js +4 -5
  56. package/dist/esm/ionic.js +1 -1
  57. package/dist/esm/loader.js +1 -1
  58. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  59. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  60. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  61. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  62. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  63. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  64. package/dist/esm-es5/ionic.js +1 -1
  65. package/dist/esm-es5/loader.js +1 -1
  66. package/dist/ionic/ionic.esm.js +1 -1
  67. package/dist/ionic/p-22952d7a.system.entry.js +4 -0
  68. package/dist/ionic/p-33dd8047.system.entry.js +4 -0
  69. package/dist/ionic/p-3d9c39bc.entry.js +4 -0
  70. package/dist/ionic/p-4f053633.system.entry.js +4 -0
  71. package/dist/ionic/p-7b590e46.system.js +1 -1
  72. package/dist/ionic/p-8b09c4cb.system.entry.js +4 -0
  73. package/dist/ionic/p-91b33f25.entry.js +4 -0
  74. package/dist/ionic/p-a0e155e1.system.entry.js +4 -0
  75. package/dist/ionic/p-a814eee1.entry.js +4 -0
  76. package/dist/ionic/p-c1bb715a.entry.js +4 -0
  77. package/dist/ionic/p-d3c9617d.system.entry.js +4 -0
  78. package/dist/ionic/p-d45fd591.entry.js +4 -0
  79. package/dist/ionic/p-f1aa5723.entry.js +4 -0
  80. package/dist/types/components/item/item.d.ts +5 -0
  81. package/hydrate/index.js +62 -41
  82. package/package.json +1 -1
  83. package/dist/collection/components/input-password-toggle/input-password-toggle.css +0 -0
  84. package/dist/ionic/p-128f0f15.system.entry.js +0 -4
  85. package/dist/ionic/p-1be0295f.entry.js +0 -4
  86. package/dist/ionic/p-41c9fb60.entry.js +0 -4
  87. package/dist/ionic/p-42452dc9.entry.js +0 -4
  88. package/dist/ionic/p-4d6c2031.system.entry.js +0 -4
  89. package/dist/ionic/p-4fdbf0ef.entry.js +0 -4
  90. package/dist/ionic/p-7459eeb7.system.entry.js +0 -4
  91. package/dist/ionic/p-8102551e.system.entry.js +0 -4
  92. package/dist/ionic/p-924deb6b.entry.js +0 -4
  93. package/dist/ionic/p-b1938594.entry.js +0 -4
  94. package/dist/ionic/p-bbefc52b.system.entry.js +0 -4
  95. package/dist/ionic/p-d774e194.system.entry.js +0 -4
  96. /package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +0 -0
@@ -63,8 +63,101 @@
63
63
  * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
64
64
  * convert to a unit other than $baselineUnit.
65
65
  */
66
+ /**
67
+ * Convert a pixels given value into rem
68
+ *
69
+ * @param pixels - Value in pixels to be converted (i.e. px)
70
+ * @param context (optional) - Baseline value
71
+ */
72
+ /**
73
+ * Convert a font size to a dynamic font size.
74
+ * Fonts that participate in Dynamic Type should use
75
+ * dynamic font sizes.
76
+ * @param size - The initial font size including the unit (i.e. px or pt)
77
+ * @param unit (optional) - The unit to convert to. Use this if you want to
78
+ * convert to a unit other than $baselineUnit.
79
+ */
80
+ /**
81
+ * Convert a font size to a dynamic font size but impose
82
+ * a maximum font size.
83
+ * @param size - The initial font size including the unit (i.e. px or pt)
84
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
85
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
86
+ * convert to a unit other than $baselineUnit.
87
+ */
88
+ /**
89
+ * Convert a font size to a dynamic font size but impose
90
+ * a minimum font size.
91
+ * @param size - The initial font size including the unit (i.e. px or pt)
92
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
93
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
94
+ * convert to a unit other than $baselineUnit.
95
+ */
96
+ /**
97
+ * Convert a font size to a dynamic font size but impose
98
+ * maximum and minimum font sizes.
99
+ * @param size - The initial font size including the unit (i.e. px or pt)
100
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
101
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
102
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
103
+ * convert to a unit other than $baselineUnit.
104
+ */
105
+ /**
106
+ * A heuristic that applies CSS to tablet
107
+ * viewports.
108
+ *
109
+ * Usage:
110
+ * @include tablet-viewport() {
111
+ * :host {
112
+ * background-color: green;
113
+ * }
114
+ * }
115
+ */
116
+ /**
117
+ * A heuristic that applies CSS to mobile
118
+ * viewports (i.e. phones, not tablets).
119
+ *
120
+ * Usage:
121
+ * @include mobile-viewport() {
122
+ * :host {
123
+ * background-color: blue;
124
+ * }
125
+ * }
126
+ */
66
127
  :host {
128
+ /**
129
+ * @prop --background: Background of the button
130
+ * @prop --background-activated: Background of the button when pressed. Note: setting this will interfere with the Material Design ripple.
131
+ * @prop --background-activated-opacity: Opacity of the button when pressed
132
+ * @prop --background-focused: Background of the button when focused with the tab key
133
+ * @prop --background-focused-opacity: Opacity of the button when focused with the tab key
134
+ * @prop --background-hover: Background of the button on hover
135
+ * @prop --background-hover-opacity: Opacity of the background on hover
136
+ *
137
+ * @prop --color: Text color of the button
138
+ * @prop --color-activated: Text color of the button when pressed
139
+ * @prop --color-focused: Text color of the button when focused with the tab key
140
+ * @prop --color-hover: Text color of the button when hover
141
+ *
142
+ * @prop --transition: Transition of the button
143
+ *
144
+ * @prop --border-radius: Border radius of the button
145
+ * @prop --border-width: Border width of the button
146
+ * @prop --border-style: Border style of the button
147
+ * @prop --border-color: Border color of the button
148
+ *
149
+ * @prop --ripple-color: Color of the button ripple effect
150
+ *
151
+ * @prop --box-shadow: Box shadow of the button
152
+ * @prop --opacity: Opacity of the button
153
+ *
154
+ * @prop --padding-top: Top padding of the button
155
+ * @prop --padding-end: Right padding if direction is left-to-right, and left padding if direction is right-to-left of the button
156
+ * @prop --padding-bottom: Bottom padding of the button
157
+ * @prop --padding-start: Left padding if direction is left-to-right, and right padding if direction is right-to-left of the button
158
+ */
67
159
  --overflow: hidden;
160
+ --ripple-color: currentColor;
68
161
  --border-width: initial;
69
162
  --border-color: initial;
70
163
  --border-style: initial;
@@ -72,19 +165,9 @@
72
165
  --color-focused: var(--color);
73
166
  --color-hover: var(--color);
74
167
  --box-shadow: none;
75
- --padding-bottom: var(--padding-top);
76
- --padding-end: var(--ionic-space-400, 16px);
77
- --padding-start: var(--padding-end);
78
- --padding-top: var(--ionic-space-300, 12px);
79
- --focus-ring-color: var(--ionic-state-focus-1, #9ec4fd);
80
- --focus-ring-width: var(--ionic-border-size-050, 2px);
81
168
  display: inline-block;
82
- position: relative;
83
169
  width: auto;
84
- min-height: var(--ionic-scale-1000, 40px);
85
170
  color: var(--color);
86
- font-family: var(--ionic-font-family, "Inter", sans-serif);
87
- font-size: var(--ionic-font-size-350, 0.875rem);
88
171
  text-align: center;
89
172
  text-decoration: none;
90
173
  white-space: normal;
@@ -93,221 +176,28 @@
93
176
  vertical-align: -webkit-baseline-middle;
94
177
  font-kerning: none;
95
178
  }
96
- :host::after {
97
- right: 0;
98
- left: 0;
99
- top: 50%;
100
- position: absolute;
101
- height: 100%;
102
- min-height: var(--ionic-scale-1200, 48px);
103
- transform: translateY(-50%);
104
- content: "";
105
- cursor: pointer;
106
- z-index: 1;
107
- }
108
- :host ::slotted(ion-icon[slot=start]) {
109
- -webkit-margin-end: var(--ionic-space-200, 8px);
110
- margin-inline-end: var(--ionic-space-200, 8px);
111
- }
112
- :host ::slotted(ion-icon[slot=end]) {
113
- -webkit-margin-start: var(--ionic-space-200, 8px);
114
- margin-inline-start: var(--ionic-space-200, 8px);
115
- }
116
-
117
- :host(.button-solid.ion-color) .button-native {
118
- background: var(--ion-color-base);
119
- color: var(--ion-color-contrast);
120
- }
121
-
122
- :host(.button-outline.ion-color) .button-native {
123
- border-color: var(--ion-color-base);
124
- background: transparent;
125
- color: var(--ion-color-base);
126
- }
127
-
128
- :host(.button-clear.ion-color) .button-native {
129
- background: transparent;
130
- color: var(--ion-color-base);
131
- }
132
-
133
- /* Extra Small and Small Button */
134
- :host(.button-xsmall) ::slotted(ion-icon[slot=start]),
135
- :host(.button-small) ::slotted(ion-icon[slot=start]) {
136
- -webkit-margin-end: var(--ionic-space-100, 4px);
137
- margin-inline-end: var(--ionic-space-100, 4px);
138
- }
139
- :host(.button-xsmall) ::slotted(ion-icon[slot=end]),
140
- :host(.button-small) ::slotted(ion-icon[slot=end]) {
141
- -webkit-margin-start: var(--ionic-space-100, 4px);
142
- margin-inline-start: var(--ionic-space-100, 4px);
143
- }
144
-
145
- /* Extra Small Button */
146
- :host(.button-xsmall) {
147
- --padding-top: var(--ionic-space-100, 4px);
148
- --padding-end: var(--ionic-space-300, 12px);
149
- min-height: var(--ionic-space-600, 24px);
150
- font-size: var(--ionic-font-size-300, 0.75rem);
151
- }
152
-
153
- /* Small Button */
154
- :host(.button-small) {
155
- --padding-top: var(--ionic-space-200, 8px);
156
- --padding-end: var(--ionic-space-400, 16px);
157
- min-height: var(--ionic-scale-800, 32px);
158
- font-size: var(--ionic-font-size-300, 0.75rem);
159
- }
160
179
 
161
- /* Large Button */
162
- :host(.button-large) {
163
- --padding-top: var(--ionic-space-400, 16px);
164
- --padding-end: var(--ionic-space-600, 24px);
165
- min-height: var(--ionic-scale-1200, 48px);
166
- font-size: var(--ionic-font-size-400, 1rem);
167
- }
168
-
169
- /* Extra Large Button */
170
- :host(.button-xlarge) {
171
- --padding-top: var(--ionic-space-400, 16px);
172
- --padding-end: var(--ionic-space-800, 32px);
173
- min-height: var(--ionic-scale-1400, 56px);
174
- font-size: var(--ionic-font-size-500, 1.25rem);
175
- }
176
-
177
- /* Button containing only an icon */
178
- ::slotted(ion-icon[slot=start]),
179
- ::slotted(ion-icon[slot=end]),
180
- ::slotted(ion-icon[slot=icon-only]) {
181
- font-size: var(--ionic-font-size-400, 1rem);
182
- }
183
-
184
- :host(.button-xsmall) ::slotted(ion-icon[slot=start]),
185
- :host(.button-xsmall) ::slotted(ion-icon[slot=end]),
186
- :host(.button-xsmall) ::slotted(ion-icon[slot=icon-only]),
187
- :host(.button-small) ::slotted(ion-icon[slot=start]),
188
- :host(.button-small) ::slotted(ion-icon[slot=end]),
189
- :host(.button-small) ::slotted(ion-icon[slot=icon-only]),
190
- :host(.button-large) ::slotted(ion-icon[slot=start]),
191
- :host(.button-large) ::slotted(ion-icon[slot=end]),
192
- :host(.button-large) ::slotted(ion-icon[slot=icon-only]),
193
- :host(.button-xlarge) ::slotted(ion-icon[slot=start]),
194
- :host(.button-xlarge) ::slotted(ion-icon[slot=end]),
195
- :host(.button-xlarge) ::slotted(ion-icon[slot=icon-only]) {
196
- font-size: inherit;
197
- }
198
-
199
- :host(.button-has-icon-only) {
200
- --padding-end: var(--padding-top);
201
- aspect-ratio: 1/1;
202
- }
203
-
204
- :host(.button-soft) {
205
- --border-radius: var(--ionic-border-radius-200, 8px);
206
- }
207
-
208
- :host(.button-soft.button-xsmall),
209
- :host(.button-soft.button-small) {
210
- --border-radius: var(--ionic-border-radius-100, 4px);
211
- }
212
-
213
- :host(.button-round) {
214
- --border-radius: var(--ionic-border-radius-full, 999px);
215
- }
216
-
217
- :host(.button-rectangular) {
218
- --border-radius: var(--ionic-border-radius-0, 0px);
219
- }
220
-
221
- :host(.ion-focused) .button-native {
222
- outline: var(--focus-ring-width) var(--ionic-border-style-solid, solid) var(--focus-ring-color);
223
- outline-offset: var(--ionic-border-size-050, 2px);
224
- }
225
-
226
- :host(.button-solid) {
227
- --background-activated: var(--ionic-color-primary-base, #105cef);
228
- }
229
-
230
- :host(.button-solid.ion-activated) .button-native::after {
231
- background: var(--ionic-color-primary-900, #0d4bc3);
232
- }
233
-
234
- :host(.button-outline) {
235
- --border-width: var(--ionic-border-size-025, 1px);
236
- --border-style: var(--ionic-border-style-solid, solid);
237
- --background-activated: var(--ionic-color-neutral-200, #e7e7e7);
238
- --background-activated-opacity: 1;
239
- --background-focused: transparent;
240
- --background-hover: transparent;
241
- --background-focused-opacity: 0.1;
242
- --color-activated: var(--ionic-color-primary-base, #105cef);
243
- }
244
-
245
- :host(.button-outline.ion-focused) {
246
- --border-color: transparent;
247
- }
248
-
249
- :host(.button-clear) {
250
- --background-activated: var(--ionic-color-neutral-200, #e7e7e7);
251
- --background-activated-opacity: 1;
252
- --background-focused: transparent;
253
- --background-hover: transparent;
254
- }
255
-
256
- :host(.button-solid) {
257
- --background-hover: var(--ionic-color-primary-800, #0f54da);
258
- }
259
-
260
- :host(.button-outline),
261
- :host(.button-clear) {
262
- --background-hover: var(--ionic-color-neutral-100, #f1f1f1);
263
- }
264
-
265
- /**
266
- * Only allow overriding of opacity here
267
- * as developers should not be overriding
268
- * colors when using the color prop.
269
- */
270
- :host(.button-solid.ion-color.ion-focused) .button-native::after {
271
- background: current-color(contrast);
272
- }
273
-
274
- :host(.button-clear.ion-color.ion-focused) .button-native::after,
275
- :host(.button-outline.ion-color.ion-focused) .button-native::after {
276
- background: current-color(base);
277
- }
278
-
279
- @media (any-hover: hover) {
280
- :host(.button-solid.ion-color:hover) .button-native::after {
281
- background: current-color(contrast);
282
- }
283
- :host(.button-clear.ion-color:hover) .button-native::after,
284
- :host(.button-outline.ion-color:hover) .button-native::after {
285
- background: current-color(base);
286
- }
287
- }
288
180
  :host(.button-disabled) {
289
- --background: var(--ionic-state-disabled, rgba(255, 255, 255, 0.6));
290
- --border-color: var(--color);
291
181
  cursor: default;
292
182
  opacity: 0.5;
293
183
  pointer-events: none;
294
184
  }
295
185
 
296
186
  :host(.button-solid) {
297
- --background: var(--ionic-color-primary-base, #105cef);
298
- --color: var(--ionic-color-base-white, #ffffff);
187
+ --background: var(--ion-color-primary, #0054e9);
188
+ --color: var(--ion-color-primary-contrast, #fff);
299
189
  }
300
190
 
301
191
  :host(.button-outline) {
302
- --border-color: var(--ion-color-primary, #105cef);
303
- --background: var(--ionic-color-base-white, #ffffff);
304
- --color: var(--ion-color-primary, #105cef);
192
+ --border-color: var(--ion-color-primary, #0054e9);
193
+ --background: transparent;
194
+ --color: var(--ion-color-primary, #0054e9);
305
195
  }
306
196
 
307
197
  :host(.button-clear) {
308
- --border-width: var(--ionic-border-size-0, 0px);
198
+ --border-width: 0;
309
199
  --background: transparent;
310
- --color: var(--ionic-color-primary-base, #105cef);
200
+ --color: var(--ion-color-primary, #0054e9);
311
201
  }
312
202
 
313
203
  :host(.button-block) {
@@ -414,10 +304,13 @@
414
304
  }
415
305
 
416
306
  ::slotted(ion-icon) {
417
- font-size: var(--ionic-font-size-500, 1.25rem);
418
307
  pointer-events: none;
419
308
  }
420
309
 
310
+ ion-ripple-effect {
311
+ color: var(--ripple-color);
312
+ }
313
+
421
314
  .button-native::after {
422
315
  right: 0;
423
316
  left: 0;
@@ -453,4 +346,246 @@
453
346
  :host(.ion-activated) .button-native::after {
454
347
  background: var(--background-activated);
455
348
  opacity: var(--background-activated-opacity);
349
+ }
350
+
351
+ :host(.button-solid.ion-color) .button-native {
352
+ background: var(--ion-color-base);
353
+ color: var(--ion-color-contrast);
354
+ }
355
+
356
+ :host(.button-outline.ion-color) .button-native {
357
+ border-color: var(--ion-color-base);
358
+ background: transparent;
359
+ color: var(--ion-color-base);
360
+ }
361
+
362
+ :host(.button-clear.ion-color) .button-native {
363
+ background: transparent;
364
+ color: var(--ion-color-base);
365
+ }
366
+
367
+ :host(.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
368
+ color: var(--ion-toolbar-color, var(--color));
369
+ }
370
+
371
+ :host(.button-outline.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
372
+ border-color: var(--ion-toolbar-color, var(--color, var(--border-color)));
373
+ }
374
+
375
+ :host(.button-solid.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
376
+ background: var(--ion-toolbar-color, var(--background));
377
+ color: var(--ion-toolbar-background, var(--color));
378
+ }
379
+
380
+ :host {
381
+ --padding-bottom: var(--padding-top);
382
+ --padding-end: var(--ionic-space-500, 20px);
383
+ --padding-start: var(--padding-end);
384
+ --padding-top: var(--ionic-space-0, 0px);
385
+ --focus-ring-color: var(--ionic-state-focus-1, #9ec4fd);
386
+ --focus-ring-width: var(--ionic-border-size-050, 2px);
387
+ position: relative;
388
+ min-height: var(--ionic-scale-1000, 40px);
389
+ font-family: var(--ionic-font-family, "Inter", sans-serif);
390
+ font-size: var(--ionic-font-size-350, 0.875rem);
391
+ }
392
+ :host::after {
393
+ right: 0;
394
+ left: 0;
395
+ top: 50%;
396
+ position: absolute;
397
+ height: 100%;
398
+ min-height: var(--ionic-scale-1200, 48px);
399
+ transform: translateY(-50%);
400
+ content: "";
401
+ cursor: pointer;
402
+ z-index: 1;
403
+ }
404
+
405
+ :host(.button-solid) {
406
+ --background-activated: var(--ion-color-primary-shade, get-color-shade(#105cef));
407
+ --background-hover: var(--ion-color-primary-contrast, #fff);
408
+ --background-focused: var(--ion-color-primary-contrast, #fff);
409
+ --background-focused-opacity: 0.24;
410
+ --background-hover-opacity: 0.08;
411
+ --ripple-opacity: var(--background-activated-opacity, 1);
412
+ --ripple-color: var(--background-activated);
413
+ }
414
+
415
+ :host(.button-outline) {
416
+ --border-width: var(--ionic-border-size-025, 1px);
417
+ --border-style: var(--ionic-border-style-solid, solid);
418
+ --background-activated: var(--ionic-color-neutral-200, #e7e7e7);
419
+ --background-focused: transparent;
420
+ --background-hover: var(--ion-color-primary, #105cef);
421
+ --background-hover-opacity: 0.04;
422
+ --ripple-opacity: var(--background-activated-opacity, 1);
423
+ --ripple-color: var(--background-activated);
424
+ }
425
+
426
+ :host(.button-clear) {
427
+ --background-activated: var(--ionic-color-neutral-200, #e7e7e7);
428
+ --background-focused: transparent;
429
+ --background-hover: var(--ion-color-primary, #105cef);
430
+ --background-hover-opacity: 0.04;
431
+ --ripple-opacity: var(--background-activated-opacity, 1);
432
+ --ripple-color: var(--background-activated);
433
+ }
434
+
435
+ :host(.button-solid.ion-color) ion-ripple-effect {
436
+ color: var(--ion-color-shade);
437
+ }
438
+
439
+ :host(.button-outline.ion-color) ion-ripple-effect,
440
+ :host(.button-clear.ion-color) ion-ripple-effect {
441
+ color: var(--ionic-color-neutral-200, #e7e7e7);
442
+ }
443
+
444
+ /* Extra Small and Small Button */
445
+ :host(.button-xsmall) ::slotted(ion-icon[slot=start]),
446
+ :host(.button-small) ::slotted(ion-icon[slot=start]) {
447
+ -webkit-margin-end: var(--ionic-space-100, 4px);
448
+ margin-inline-end: var(--ionic-space-100, 4px);
449
+ }
450
+ :host(.button-xsmall) ::slotted(ion-icon[slot=end]),
451
+ :host(.button-small) ::slotted(ion-icon[slot=end]) {
452
+ -webkit-margin-start: var(--ionic-space-100, 4px);
453
+ margin-inline-start: var(--ionic-space-100, 4px);
454
+ }
455
+
456
+ /* Extra Small Button */
457
+ :host(.button-xsmall) {
458
+ --padding-top: var(--ionic-space-100, 4px);
459
+ --padding-end: var(--ionic-space-300, 12px);
460
+ min-height: var(--ionic-space-600, 24px);
461
+ font-size: var(--ionic-font-size-300, 0.75rem);
462
+ }
463
+
464
+ /* Small Button */
465
+ :host(.button-small) {
466
+ --padding-top: var(--ionic-space-200, 8px);
467
+ --padding-end: var(--ionic-space-400, 16px);
468
+ min-height: var(--ionic-scale-800, 32px);
469
+ font-size: var(--ionic-font-size-300, 0.75rem);
470
+ }
471
+
472
+ /* Large Button */
473
+ :host(.button-large) {
474
+ --padding-top: var(--ionic-space-400, 16px);
475
+ --padding-end: var(--ionic-space-600, 24px);
476
+ min-height: var(--ionic-scale-1200, 48px);
477
+ font-size: var(--ionic-font-size-400, 1rem);
478
+ }
479
+
480
+ /* Extra Large Button */
481
+ :host(.button-xlarge) {
482
+ --padding-top: var(--ionic-space-400, 16px);
483
+ --padding-end: var(--ionic-space-800, 32px);
484
+ min-height: var(--ionic-scale-1400, 56px);
485
+ font-size: var(--ionic-font-size-500, 1.25rem);
486
+ }
487
+
488
+ /* Button containing only an icon */
489
+ ::slotted(ion-icon[slot=start]),
490
+ ::slotted(ion-icon[slot=end]),
491
+ ::slotted(ion-icon[slot=icon-only]) {
492
+ font-size: var(--ionic-font-size-400, 1rem);
493
+ }
494
+
495
+ :host(.button-xsmall) ::slotted(ion-icon[slot=start]),
496
+ :host(.button-xsmall) ::slotted(ion-icon[slot=end]),
497
+ :host(.button-xsmall) ::slotted(ion-icon[slot=icon-only]),
498
+ :host(.button-small) ::slotted(ion-icon[slot=start]),
499
+ :host(.button-small) ::slotted(ion-icon[slot=end]),
500
+ :host(.button-small) ::slotted(ion-icon[slot=icon-only]),
501
+ :host(.button-large) ::slotted(ion-icon[slot=start]),
502
+ :host(.button-large) ::slotted(ion-icon[slot=end]),
503
+ :host(.button-large) ::slotted(ion-icon[slot=icon-only]),
504
+ :host(.button-xlarge) ::slotted(ion-icon[slot=start]),
505
+ :host(.button-xlarge) ::slotted(ion-icon[slot=end]),
506
+ :host(.button-xlarge) ::slotted(ion-icon[slot=icon-only]) {
507
+ font-size: inherit;
508
+ }
509
+
510
+ :host(.button-has-icon-only) {
511
+ --padding-end: var(--padding-top);
512
+ aspect-ratio: 1/1;
513
+ }
514
+
515
+ :host(.button-soft) {
516
+ --border-radius: var(--ionic-border-radius-200, 8px);
517
+ }
518
+
519
+ :host(.button-soft.button-xsmall),
520
+ :host(.button-soft.button-small) {
521
+ --border-radius: var(--ionic-border-radius-100, 4px);
522
+ }
523
+
524
+ :host(.button-round) {
525
+ --border-radius: var(--ionic-border-radius-full, 999px);
526
+ }
527
+
528
+ :host(.button-rectangular) {
529
+ --border-radius: var(--ionic-border-radius-0, 0px);
530
+ }
531
+
532
+ :host(.ion-focused) .button-native {
533
+ outline: var(--focus-ring-width) var(--ionic-border-style-solid, solid) var(--focus-ring-color);
534
+ outline-offset: var(--ionic-border-size-050, 2px);
535
+ }
536
+
537
+ /**
538
+ * Only allow overriding of opacity here
539
+ * as developers should not be overriding
540
+ * colors when using the color prop.
541
+ */
542
+ :host(.button-solid.ion-color.ion-focused) .button-native::after {
543
+ background: var(--ion-color-contrast);
544
+ }
545
+
546
+ :host(.button-solid.ion-color.ion-activated) .button-native::after {
547
+ background: var(--ion-color-shade);
548
+ }
549
+
550
+ :host(.ion-activated) .button-native:has(ion-ripple-effect)::after,
551
+ :host(.button-solid.ion-color.ion-activated) .button-native:has(ion-ripple-effect)::after {
552
+ background: transparent;
553
+ }
554
+
555
+ :host(.button-disabled) {
556
+ opacity: 0.6;
557
+ }
558
+
559
+ ::slotted(ion-icon) {
560
+ font-size: var(--ionic-font-size-500, 1.25rem);
561
+ }
562
+
563
+ :host(.button-small) ::slotted(ion-icon[slot=start]) {
564
+ -webkit-margin-end: var(--ionic-space-200, 8px);
565
+ margin-inline-end: var(--ionic-space-200, 8px);
566
+ }
567
+
568
+ ::slotted(ion-icon[slot=start]) {
569
+ -webkit-margin-end: var(--ionic-space-250, 10px);
570
+ margin-inline-end: var(--ionic-space-250, 10px);
571
+ }
572
+
573
+ :host(.button-large) ::slotted(ion-icon[slot=start]) {
574
+ -webkit-margin-end: var(--ionic-space-300, 12px);
575
+ margin-inline-end: var(--ionic-space-300, 12px);
576
+ }
577
+
578
+ :host(.button-small) ::slotted(ion-icon[slot=end]) {
579
+ -webkit-margin-start: var(--ionic-space-200, 8px);
580
+ margin-inline-start: var(--ionic-space-200, 8px);
581
+ }
582
+
583
+ ::slotted(ion-icon[slot=end]) {
584
+ -webkit-margin-start: var(--ionic-space-250, 10px);
585
+ margin-inline-start: var(--ionic-space-250, 10px);
586
+ }
587
+
588
+ :host(.button-large) ::slotted(ion-icon[slot=end]) {
589
+ -webkit-margin-start: var(--ionic-space-300, 12px);
590
+ margin-inline-start: var(--ionic-space-300, 12px);
456
591
  }