@bagelink/vue 1.15.458 → 1.15.468

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.458",
4
+ "version": "1.15.468",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Bagel Studio",
@@ -22,6 +22,8 @@ const props = defineProps<{
22
22
  itemLabel?: string
23
23
  collapsible?: boolean
24
24
  simple?: boolean
25
+ /** Shows fixed item labels with drag handles, without editable row content. */
26
+ reorderOnly?: boolean
25
27
  /** Factory for new rows. Prefer this over pushing `undefined` (which becomes `null` after JSON sync). */
26
28
  createItem?: () => T
27
29
  } & BagelInputShellProps>()
@@ -49,7 +51,7 @@ const itemLabelPrefix = computed(() => {
49
51
  return $t('arrayInput.item')
50
52
  })
51
53
 
52
- const IDENTIFIER_FIELDS = ['title', 'name', 'key', 'label', 'displayName', 'display_name', 'heading', 'caption', 'text']
54
+ const IDENTIFIER_FIELDS = ['title', 'name', 'type', 'key', 'label', 'displayName', 'display_name', 'heading', 'caption', 'text']
53
55
  const IMAGE_FIELDS = ['image', 'thumbnail', 'avatar', 'photo', 'picture', 'profilePic', 'profile_pic', 'icon', 'logo']
54
56
 
55
57
  function getItemIdentifier(item: T): string | null {
@@ -170,16 +172,37 @@ function getItemRef(i: number) {
170
172
  <p v-if="helptext" class="helptext">
171
173
  {{ helptext }}
172
174
  </p>
173
- <template v-if="!collapsible">
174
- <div v-for="(_, i) in items" :key="i" class="array-input-row grid align-items-center" :class="{ 'simpleArray mb-025': isSimple, 'pb-1': !isSimple }">
175
- <slot :item="getItemRef(i)" :index="i" />
176
- <div v-if="allowDelete" class=" h-100p" :class="{ 'border-start ps-025 ms-075': !simple }">
175
+ <Draggable v-if="reorderOnly" :model-value="items" handle=".grab" :disabled="!allowReorder" class="grid gap-05 mb-05" @end="onDraggableEnd">
176
+ <template #default="{ index: i }">
177
+ <div class="grid gap-0 grid-array-line-reorder align-items-center pe-025 border radius-1 overflow-hidden">
177
178
  <Btn
178
- v-tooltip="resolveI18n(deleteTooltip || 'Delete')" flat icon="delete"
179
- @click="deleteItem(i)"
179
+ v-if="allowReorder" v-tooltip="resolveI18n('Drag to reorder')" flat xs icon="drag_indicator"
180
+ class="grab"
180
181
  />
182
+ <p class="ellipsis-1 txt12 line-height-1">
183
+ {{ getItemIdentifier(items[i]) ?? getItemLabel(i) }}
184
+ </p>
181
185
  </div>
182
- </div>
186
+ </template>
187
+ </Draggable>
188
+ <template v-else-if="!collapsible">
189
+ <Draggable :model-value="items" handle=".grab" :disabled="!allowReorder" class="grid gap-05 mb-05" @end="onDraggableEnd">
190
+ <template #default="{ index: i }">
191
+ <div class="array-input-row grid align-items-center" :class="{ 'array-input-row-reorder': allowReorder, 'simpleArray mb-025': isSimple, 'pb-1': !isSimple }">
192
+ <Btn
193
+ v-if="allowReorder" v-tooltip="resolveI18n('Drag to reorder')" flat thin icon="drag_indicator"
194
+ class="grab"
195
+ />
196
+ <slot :item="getItemRef(i)" :index="i" />
197
+ <div v-if="allowDelete" class="h-100p" :class="{ 'border-start ps-025 ms-075': !simple }">
198
+ <Btn
199
+ v-tooltip="resolveI18n(deleteTooltip || 'Delete')" flat icon="delete"
200
+ @click="deleteItem(i)"
201
+ />
202
+ </div>
203
+ </div>
204
+ </template>
205
+ </Draggable>
183
206
  </template>
184
207
  <Draggable v-if="collapsible" :model-value="items" handle=".grab" :disabled="!allowReorder" class="grid gap-05 mb-05" @end="onDraggableEnd">
185
208
  <template #default="{ index: i }">
@@ -228,6 +251,9 @@ function getItemRef(i: number) {
228
251
  .array-input-row {
229
252
  grid-template-columns: 1fr auto;
230
253
  }
254
+ .array-input-row-reorder {
255
+ grid-template-columns: auto 1fr auto;
256
+ }
231
257
 
232
258
  .array-collapse-enter-active,
233
259
  .array-collapse-leave-active {
@@ -262,6 +288,10 @@ transform: scale(0.98);
262
288
  grid-template-columns: auto 1fr auto;
263
289
  background: var(--array-input-bg) !important;
264
290
  }
291
+ .grid-array-line-reorder {
292
+ grid-template-columns: auto 1fr;
293
+ background: var(--array-input-bg) !important;
294
+ }
265
295
 
266
296
  .grid-array-line button:hover {
267
297
  filter: brightness(90%);
@@ -152,7 +152,7 @@ const sidebarStyles = computed(() => {
152
152
  <aside
153
153
  id="bgl-app-sidebar"
154
154
  class="app-sidebar" :class="{
155
- 'fixed start top bottom h-100vh z-99': isMobile,
155
+ 'fixed start top bottom h-100vh m_h-100svh z-99': isMobile,
156
156
  'h-100p': !isMobile,
157
157
  'sidebar-mobile-open': isMobile && isOpen,
158
158
  'sidebar-mobile-closed': isMobile && !isOpen,
@@ -443,6 +443,7 @@ export const $ = {
443
443
  min?: number
444
444
  max?: number
445
445
  simple?: boolean
446
+ reorderOnly?: boolean
446
447
  }),
447
448
  maybeConfig?: BaseFieldConfig & {
448
449
  allowAdd?: boolean
@@ -452,6 +453,7 @@ export const $ = {
452
453
  min?: number
453
454
  max?: number
454
455
  simple?: boolean
456
+ reorderOnly?: boolean
455
457
  }
456
458
  ): FieldBuilder<any[]> {
457
459
  // Label-first: $.array('Items', schema) or $.array('Items', schema, { min: 1 })