@propbinder/mobile-design 0.2.16 → 0.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@propbinder/mobile-design",
3
- "version": "0.2.16",
3
+ "version": "0.2.17",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0 || ^21.0.0",
6
6
  "@angular/core": "^20.3.0 || ^21.0.0"
package/styles/ionic.css CHANGED
@@ -106,7 +106,7 @@ html {
106
106
  html,
107
107
  body {
108
108
  /* Background color must match theme-color for iOS PWA status bar */
109
- background-color: var(--color-header-surface);
109
+ background-color: var(--color-brand-secondary);
110
110
  color: var(--text-color-default-primary);
111
111
  font-family: 'Brockmann', system-ui, -apple-system, sans-serif;
112
112
 
@@ -122,16 +122,16 @@ body {
122
122
  /* iOS-specific: Purple background for overshoot areas to match dark header */
123
123
  .plt-ios html,
124
124
  .plt-ios body {
125
- background-color: var(--color-header-surface) !important;
125
+ background-color: var(--color-brand-secondary) !important;
126
126
  }
127
127
 
128
128
  .plt-ios ion-app {
129
- background-color: var(--color-header-surface) !important;
129
+ background-color: var(--color-brand-secondary) !important;
130
130
  }
131
131
 
132
132
  /* When modal opens, ensure purple background is maintained */
133
133
  body.backdrop-no-scroll {
134
- background-color: var(--color-header-surface) !important;
134
+ background-color: var(--color-brand-secondary) !important;
135
135
  }
136
136
 
137
137
  /* Ionic Component Styles - Map to Design System */
@@ -139,14 +139,15 @@ body.backdrop-no-scroll {
139
139
 
140
140
  :root {
141
141
  /* Override Ionic's primary color to use our brand color */
142
- /* Note: RGB values and hover/active states are set dynamically by WhitelabelService */
143
- --ion-color-primary: var(--color-accent);
144
- --ion-color-primary-contrast: var(--color-on-accent);
145
- --ion-color-primary-shade: var(--color-accent-hover);
146
- --ion-color-primary-tint: var(--color-accent);
142
+ --ion-color-primary: var(--color-brand-base);
143
+ --ion-color-primary-rgb: 107, 95, 245;
144
+ --ion-color-primary-contrast: #ffffff;
145
+ --ion-color-primary-contrast-rgb: 255, 255, 255;
146
+ --ion-color-primary-shade: var(--color-brand-base-hover);
147
+ --ion-color-primary-tint: var(--color-brand-base);
147
148
 
148
149
  /* Ionic component defaults */
149
- --ion-background-color: var(--color-header-surface);
150
+ --ion-background-color: var(--color-brand-secondary);
150
151
  --ion-text-color: var(--text-color-default-primary);
151
152
  }
152
153
 
@@ -165,17 +166,17 @@ ion-content {
165
166
 
166
167
  /* iOS: Set base ion-content background to brand secondary for pages */
167
168
  .plt-ios ion-content {
168
- background: var(--color-header-surface) !important;
169
+ background: var(--color-brand-secondary) !important;
169
170
  }
170
171
 
171
172
  /* iOS: Also target any inner background parts */
172
173
  .plt-ios ion-content::part(background) {
173
- background: var(--color-header-surface) !important;
174
+ background: var(--color-brand-secondary) !important;
174
175
  }
175
176
 
176
177
  /* iOS: Target the inner container if it exists */
177
178
  .plt-ios ion-content .inner-scroll {
178
- background: var(--color-header-surface) !important;
179
+ background: var(--color-brand-secondary) !important;
179
180
  }
180
181
 
181
182
  /* Default: Block browser overscroll on all platforms */
@@ -201,18 +202,18 @@ ion-content::part(scroll)::-webkit-scrollbar {
201
202
  overscroll-behavior-y: contain;
202
203
  /* iOS: Set scroll container background to match brand secondary */
203
204
  /* This prevents white background from showing when header fades on scroll */
204
- background: var(--color-header-surface) !important;
205
+ background: var(--color-brand-secondary) !important;
205
206
  }
206
207
 
207
208
  .plt-ios .ion-page {
208
209
  overscroll-behavior-y: contain;
209
210
  /* Set page background to brand secondary to match header on iOS */
210
- background: var(--color-header-surface) !important;
211
+ background: var(--color-brand-secondary) !important;
211
212
  }
212
213
 
213
214
  /* iOS-specific: Override ion-content background for pages (not modals) */
214
215
  .plt-ios .ion-page > ion-content {
215
- --background: var(--color-header-surface);
216
+ --background: var(--color-brand-secondary);
216
217
  }
217
218
 
218
219
  /* iOS: Ensure modal content stays with neutral background */
@@ -232,33 +233,13 @@ ion-content::part(scroll)::-webkit-scrollbar {
232
233
  background: var(--color-background-neutral-primary) !important;
233
234
  }
234
235
 
235
- /* Exception: Lightbox modals should have black background */
236
- .plt-ios ion-modal .lightbox-content.pdf-viewer,
237
- .plt-ios ion-modal .lightbox-content.pdf-viewer::part(scroll),
238
- .plt-ios ion-modal .lightbox-content.pdf-viewer::part(background),
239
- .plt-ios ion-modal .lightbox-content.pdf-viewer .inner-scroll {
240
- background: #000000 !important;
241
- }
242
-
243
- /* Also ensure lightbox is black on all platforms */
244
- ion-modal .lightbox-content.pdf-viewer {
245
- --background: #000000 !important;
246
- background: #000000 !important;
247
- }
248
-
249
- ion-modal .lightbox-content.pdf-viewer::part(scroll),
250
- ion-modal .lightbox-content.pdf-viewer::part(background),
251
- ion-modal .lightbox-content.pdf-viewer .inner-scroll {
252
- background: #000000 !important;
253
- }
254
-
255
236
  ion-footer {
256
237
  box-shadow: none;
257
238
  }
258
239
 
259
240
  ion-router-outlet {
260
- --background: var(--color-header-surface);
261
- background: var(--color-header-surface);
241
+ --background: var(--color-brand-secondary);
242
+ background: var(--color-brand-secondary);
262
243
  }
263
244
 
264
245
  ion-refresher {
@@ -272,8 +253,8 @@ ion-refresher-content {
272
253
 
273
254
  /* Force spinner color to brand */
274
255
  ion-spinner {
275
- --color: var(--color-accent) !important;
276
- color: var(--color-accent) !important;
256
+ --color: var(--color-brand-base) !important;
257
+ color: var(--color-brand-base) !important;
277
258
  }
278
259
 
279
260
  ion-modal {
@@ -303,7 +284,7 @@ ion-action-sheet {
303
284
  --color: var(--text-color-default-primary);
304
285
  --button-background: var(--color-background-neutral-secondary);
305
286
  --button-background-hover: var(--color-background-neutral-tertiary);
306
- --button-background-selected: var(--color-accent);
287
+ --button-background-selected: var(--color-background-brand);
307
288
  --button-color: var(--text-color-default-primary);
308
289
  }
309
290
 
@@ -853,23 +834,3 @@ ion-app ion-router-outlet.ion-page-hidden {
853
834
 
854
835
  /* Dark mode support removed - modals should not change based on system dark mode */
855
836
 
856
- /* ============================================
857
- GLOBAL BUTTON INTERACTIVE STATES
858
- Consistent button behavior across all ds-button instances
859
- ============================================ */
860
-
861
- /* Base transition */
862
- ds-button .btn {
863
- transition: all 0.2s ease !important;
864
- }
865
-
866
- /* Active/pressed/click state - scale down slightly */
867
- ds-button .btn:active:not(:disabled) {
868
- transform: scale(0.98) !important;
869
- }
870
-
871
- /* FORCE hover background color directly - only for primary variant */
872
- ds-button[variant="primary"]:hover .btn {
873
- background-color: var(--color-accent-hover) !important;
874
- }
875
-
@@ -77,7 +77,7 @@
77
77
 
78
78
  /* Section Headlines */
79
79
  .section-headline {
80
- font-size: var(--font-size-base);
80
+ font-size: var(--font-size-sm);
81
81
  font-weight: 600;
82
82
  color: var(--text-color-default-primary);
83
83
  padding: 16px 0;
@@ -14,7 +14,7 @@
14
14
  align-items: center;
15
15
  height: 100%;
16
16
  /* Solid background to cover overlay from page underneath during transitions */
17
- background: var(--color-header-surface);
17
+ background: var(--color-secondary-surface);
18
18
  width: 100%;
19
19
  }
20
20
 
@@ -23,7 +23,7 @@
23
23
  ============================================ */
24
24
 
25
25
  :host ion-header {
26
- background: var(--color-header-surface);
26
+ background: var(--color-brand-secondary);
27
27
  box-shadow: none;
28
28
  height: 72px;
29
29
  min-height: 72px;
@@ -31,7 +31,7 @@
31
31
  }
32
32
 
33
33
  :host ion-header ion-toolbar {
34
- --background: var(--color-header-surface);
34
+ --background: var(--color-brand-secondary);
35
35
  --border-width: 0;
36
36
  --box-shadow: none;
37
37
  --padding-top: 0;
@@ -78,7 +78,7 @@
78
78
  display: flex;
79
79
  align-items: center;
80
80
  justify-content: space-between;
81
- background: var(--color-header-surface);
81
+ background: var(--color-brand-secondary);
82
82
  position: relative;
83
83
  }
84
84
 
@@ -91,10 +91,10 @@
91
91
  transform: translateX(-50%);
92
92
  font-size: var(--font-size-base);
93
93
  font-weight: 600;
94
- color: var(--color-header-content);
94
+ color: white;
95
95
  margin: 0;
96
96
  padding: 0;
97
- --color: var(--color-header-content);
97
+ --color: white;
98
98
  }
99
99
 
100
100
  /* Scroll behavior for header-details title (hidden initially, shows on scroll) */
@@ -122,7 +122,7 @@
122
122
  align-items: center;
123
123
  justify-content: center;
124
124
  cursor: pointer;
125
- color: var(--color-header-content);
125
+ color: white;
126
126
  transition: opacity var(--transition-duration-fast, 0.2s) var(--ease-smooth, ease);
127
127
  z-index: 10;
128
128
  position: relative;
@@ -143,7 +143,7 @@
143
143
  ============================================ */
144
144
 
145
145
  :host ion-content {
146
- --background: var(--color-header-surface);
146
+ --background: var(--color-brand-secondary);
147
147
  --padding-top: 0;
148
148
  --padding-start: 0;
149
149
  --padding-end: 0;
@@ -196,7 +196,7 @@
196
196
  }
197
197
 
198
198
  :host ion-refresher-content {
199
- --color: var(--color-header-content);
199
+ --color: white;
200
200
  }
201
201
 
202
202
  /* ============================================
@@ -213,7 +213,6 @@
213
213
  flex-direction: column;
214
214
  background: var(--color-background-neutral-primary);
215
215
  border-radius: 24px 24px 0 0;
216
- overflow: scroll;
217
216
 
218
217
  /* Visual styling for iOS overshoot - extend background below using box-shadow */
219
218
  transform: translateZ(0);
@@ -221,11 +220,9 @@
221
220
  isolation: isolate;
222
221
  box-shadow: 0 300px 0 0 var(--color-background-neutral-primary);
223
222
 
224
- /* No top padding - ds-mobile-section provides its own */
225
- padding-top: 0;
226
- padding-left: var(--content-wrapper-padding, 20px);
227
- padding-right: var(--content-wrapper-padding, 20px);
228
- /* Bottom padding ALWAYS preserved for safe area and tab bar */
223
+ /* Fixed 20px horizontal padding globally */
224
+ padding: 20px;
225
+ /* Add bottom padding on mobile to account for fixed tab bar */
229
226
  padding-bottom: calc(var(--mobile-content-spacing) + var(--mobile-tab-bar-height) + env(safe-area-inset-bottom, 0px));
230
227
  }
231
228
 
@@ -241,10 +238,7 @@
241
238
 
242
239
  @media (min-width: 768px) {
243
240
  :host .content-wrapper {
244
- /* Remove top padding since ds-mobile-section provides its own */
245
- padding-top: 0;
246
- padding-left: var(--content-wrapper-padding, 20px);
247
- padding-right: var(--content-wrapper-padding, 20px);
241
+ padding: 32px 20px;
248
242
  }
249
243
  }
250
244
 
@@ -253,7 +247,7 @@
253
247
  ============================================ */
254
248
 
255
249
  :host .header-expandable {
256
- background: var(--color-header-surface);
250
+ background: var(--color-brand-secondary);
257
251
  padding: 32px 20px 24px 20px;
258
252
  color: var(--header-content-color, white);
259
253
  position: sticky;