@bagelink/vue 1.15.303 → 1.15.307

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,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "1.15.303",
4
+ "version": "1.15.307",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Bagel Studio",
@@ -113,7 +113,7 @@ cursor: pointer;
113
113
  }
114
114
 
115
115
  .accordion-head {
116
- height: var(--bgl-input-height);
116
+ height: var(--bgl-accordion-height, var(--bgl-input-height));
117
117
  background: transparent;
118
118
  display: flex;
119
119
  width: 100%;
@@ -121,6 +121,7 @@ align-items: center;
121
121
  justify-content: space-between;
122
122
  border: none;
123
123
  color: inherit !important;
124
+ padding-inline: var(--bgl-accordion-padding, 6px);
124
125
  }
125
126
 
126
127
  .accordion-icon {
@@ -128,9 +129,9 @@ transition: all 0.2s ease;
128
129
  display: flex;
129
130
  align-items: center;
130
131
  flex-shrink: 0;
131
- width: calc(var(--bgl-btn-height) / 1.5);
132
- height: calc(var(--bgl-btn-height) / 1.5);
133
- padding-inline: calc(var(--bgl-btn-padding) / 3);
132
+ width: calc(var(--bgl-accordion-height, var(--bgl-btn-height)) / 1.5);
133
+ height: calc(var(--bgl-accordion-height, var(--bgl-btn-height)) / 1.5);
134
+ padding-inline: calc(var(--bgl-accordion-padding, var(--bgl-btn-padding)) / 3);
134
135
  justify-content: center;
135
136
  }
136
137
 
@@ -52,6 +52,15 @@ interface Props {
52
52
  * mobile). Turn this on only for headers you know must stay one exact line.
53
53
  */
54
54
  singleRow?: boolean
55
+ /**
56
+ * Mobile (≤ breakpoint) only: collapse the header's three sides into one
57
+ * continuous flow. The menu/back/title, center and trailing actions all sit in
58
+ * a single wrapping row — items run one after another (no `space-between` gap,
59
+ * no auto-margin pushing the actions to the far edge) and simply wrap onto the
60
+ * next line as a continuous stream when they run out of room. Desktop is
61
+ * unaffected. Off by default (mobile keeps the split leading/trailing layout).
62
+ */
63
+ mobileSingleRow?: boolean
55
64
  /**
56
65
  * Cap the readable width of the page and center it on wide screens. Applies to
57
66
  * BOTH the header and the body, so the title stays aligned above the content
@@ -80,6 +89,7 @@ const props = withDefaults(defineProps<Props>(), {
80
89
  border: undefined,
81
90
  headerHeight: '60px',
82
91
  singleRow: false,
92
+ mobileSingleRow: false,
83
93
  maxWidth: undefined,
84
94
  fill: false,
85
95
  })
@@ -135,7 +145,10 @@ const hasCenter = computed(() => !!slots['header-center'])
135
145
  :class="[
136
146
  `app-header--${resolvedVariant}`,
137
147
  `app-header--m-${resolvedMobileVariant}`,
138
- { 'app-header--single-row': singleRow },
148
+ {
149
+ 'app-header--single-row': singleRow,
150
+ 'app-header--m-single-flow': mobileSingleRow,
151
+ },
139
152
  ]"
140
153
  >
141
154
  <!-- Left Side -->
@@ -163,17 +176,23 @@ const hasCenter = computed(() => !!slots['header-center'])
163
176
  </PageTitle>
164
177
 
165
178
  <!-- Custom Left Content -->
166
- <slot name="header-left" />
179
+ <div class="app-header-slot">
180
+ <slot name="header-left" />
181
+ </div>
167
182
  </div>
168
183
 
169
184
  <!-- Center Content (only rendered when the slot is provided) -->
170
185
  <div v-if="hasCenter" class="app-header-center flex min-w-0">
171
- <slot name="header-center" />
186
+ <div class="app-header-slot">
187
+ <slot name="header-center" />
188
+ </div>
172
189
  </div>
173
190
 
174
191
  <!-- Right Side -->
175
192
  <div class="app-header-side flex gap-row-05 endNavTools">
176
- <slot name="header-right" />
193
+ <div class="app-header-slot">
194
+ <slot name="header-right" />
195
+ </div>
177
196
  </div>
178
197
  </header>
179
198
 
@@ -262,6 +281,25 @@ padding-inline: 0;
262
281
  }
263
282
  }
264
283
 
284
+ /* Slot content is rendered in the consumer's scope. Keep this mobile flow rule
285
+ unscoped so it targets the real rendered DOM directly and remains stable across
286
+ async slot updates and component HMR. */
287
+ .app-header-slot {
288
+ display: contents;
289
+ }
290
+
291
+ @media screen and (max-width: 910px) {
292
+ .app-header.app-header--m-single-flow {
293
+ justify-content: flex-start !important;
294
+ }
295
+ .app-header--m-single-flow > .app-header-side,
296
+ .app-header--m-single-flow > .app-header-center,
297
+ .app-header--m-single-flow > .app-header-side > .app-header-slot > *,
298
+ .app-header--m-single-flow > .app-header-center > .app-header-slot > * {
299
+ display: contents !important;
300
+ }
301
+ }
302
+
265
303
  </style>
266
304
 
267
305
  <style scoped>
@@ -30,7 +30,7 @@ const slots = useSlots()
30
30
  </script>
31
31
 
32
32
  <template>
33
- <div class="bgl-tl-item flex gap-075" :class="{ 'bgl-tl-item--last': last }">
33
+ <div class="bgl-tl-item flex gap-075 align-items-start" :class="{ 'bgl-tl-item--last': last }">
34
34
  <div class="bgl-tl-rail flex-column align-items-center flex-shrink-0">
35
35
  <span class="bgl-tl-marker flex-center" :style="{ '--tl-color': `var(--bgl-${color})` }">
36
36
  <slot name="marker">
@@ -52,9 +52,13 @@ const slots = useSlots()
52
52
  .bgl-tl-item {
53
53
  min-height: 1.75rem;
54
54
  }
55
+ .bgl-tl-rail {
56
+ display: flex;
57
+ align-self: stretch;
58
+ }
55
59
  .bgl-tl-marker {
56
- width: 1.625rem;
57
- height: 1.625rem;
60
+ width: 1.25rem;
61
+ height: 1.25rem;
58
62
  border-radius: 50%;
59
63
  background: color-mix(in srgb, var(--tl-color) 15%, transparent);
60
64
  color: var(--tl-color);